# Mga File

Tumatanggap ang mga modelong gumagamit ng larawan, video o audio ng alinman sa tatlong anyo. Tinutukoy ng page ng bawat modelo ang mga file parameter nito (halimbawa `image`, `images`, `videos`, `audios`).

## 1. Pampublikong URL

Anumang `https://` (o `http://`) URL na mada-download ng modelo:

```json
{ "image": "https://example.com/photos/product.jpg" }
```

Dapat maabot ang file nang walang cookies o login, at dapat itong manatiling maabot hanggang magsimula ang kahilingan. Inililista ng page ng bawat modelo ang mga limitasyon sa laki at dimensyon ng mga file parameter nito.

## 2. Data URI

Maaaring ilagay inline ang maliliit na file bilang `data:` URI na hanggang 10 MB:

```json
{ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }
```

Pinapalaki ng Base64 ang body nang humigit-kumulang isang-katlo kumpara sa file, kaya mas mainam ang mga upload para sa malalaki.

## 3. Upload

Para sa mga lokal na file, humingi ng upload URL, i-`PUT` ang bytes doon, at ipasa sa modelo ang ibinalik na `file_url`. Libre ang paggawa ng upload URL.

```bash 1 · Kumuha ng upload URL
curl -X POST "https://api.doitong.ru/v1/files" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "product.jpg", "content_type": "image/jpeg", "size": 482113}'
```

```json 201 Created · upload
{
  "object": "upload",
  "upload_url": "https://…signed upload URL…",
  "file_url": "https://content.doitong.com/…/product.jpg",
  "method": "PUT",
  "headers": { "Content-Type": "image/jpeg" },
  "content_type": "image/jpeg",
  "expires_in": 3600,
  "max_bytes": 15728640
}
```

```bash 2 · I-upload ang bytes gamit ang eksaktong ibinalik na headers
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Gamitin ang file_url bilang input ng modelo
curl -X POST "https://api.doitong.ru/v1/run/{model_id}?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image": "https://content.doitong.com/…/product.jpg", "prompt": "..."}'
```

- Mga suportadong upload: `.jpg`, `.jpeg`, `.png`, `.webp` (hanggang 15 MB) at `.mp4`, `.mov`, `.webm` (hanggang 200 MB). Itinatakda ng extension ang type; dapat tumugma rito ang `content_type`.
- May bisa ang upload URL nang isang oras. Mananatiling may bisa ang `file_url`.
- Para sa audio, gumamit ng pampublikong URL o data URI.

## Mga output file

> [!TIP]
> Kinokopya ang mga nabuong file sa aming storage at ibinabalik sa `outputs[].url` bilang mga link sa `content.doitong.com`. Maaari mong direktang ipasa ang mga ito sa ibang modelo, halimbawa isang larawan mula sa text-to-image na modelo papunta sa image-to-video na modelo.

Ikaw ang pumipili kung gaano katagal pananatilihin ang mga output file:

- **Walang hanggan** (`permanent`, ang default): hanggang i-delete mo ang mga ito, sa halagang 100 kredito ng API ($0.10) bawat GB bawat buwan, sinisingil isang beses bawat araw mula sa balanse ng API (1 GB = 1024³ bytes).
- **7 araw** (`temporary`): libre, saka dine-delete mula sa aming storage.

Itakda ang default gamit ang switch na "Itago ang mga file habambuhay" sa [dashboard](https://doitong.com/developers/dashboard#balance) o gamit ang `PATCH /account/storage`, at i-override bawat run gamit ang `?storage=temporary` (o `permanent`):

```bash
curl -X PATCH "https://api.doitong.ru/v1/account/storage" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "temporary"}'
```

Ipinapakita ng bawat kahilingan ang sarili nitong `storage` (`mode`, `bytes`, `expires_at`, `expired`). Nalalapat ang setting sa mga bagong kahilingan; mananatili ang mga file na pinananatili mo nang walang hanggan hanggang i-delete mo ang mga ito gamit ang `DELETE /requests/{id}/files` (tingnan ang [Mga Kahilingan](https://doitong.com/developers/docs/requests#delete-files)). Kung hindi kayang bayaran ng balanse ng API ang storage, makakatanggap ka ng email at 30 araw para magdagdag ng balanse bago maging temporary ang mga file na pinananatili.
