Vai al contenuto principale

Soluzione API di modifica

Modifica la foto che hai già, non una inventata dal modello.

Gli endpoint di modifica accettano almeno due input: l’immagine e l’istruzione. Far entrare l’immagine – come URL pubblico, come upload confermato o come data URI inline – è il punto in cui si blocca la maggior parte delle integrazioni.

La sfida

Far entrare il riferimento è la metà difficile

Il prompt è la parte facile. L’altra parte è un file che vive sul telefono dei tuoi utenti, deve arrivare al modello senza esporre un bucket privato e deve stare dentro limiti applicati prima ancora che l’attività esista.

01

Ci sono tre vie d’ingresso, e falliscono in modo diverso

Un campo immagine dichiarato accetta un URL HTTPS pubblico, un file URI spicy:// confermato o un data URI inline. L’inline è limitato a 1 MiB decodificati e 8.388.608 pixel per immagine, dentro un corpo di richiesta da 2 MiB. Tutto ciò che è più grande deve passare da un ticket di upload.

02

Gli URL HTTPS firmati funzionano se il file è accessibile

Un link firmato può puntare a un bucket privato se i nostri server scaricano il file senza cookie né un altro login. Mantienilo valido durante l’elaborazione. IP privati, loopback e credenziali user:password nell’URL sono rifiutati.

03

La modifica è un’attività diversa dalla generazione

Il nome pubblico della chiamata finisce in /edit, lo schema di solito richiede image_url o image_urls, e alcuni endpoint aggiungono mask_url o strength. Un valore di model da testo a immagine infilato in un flusso di modifica fallisce la validazione invece di adattarsi.

L’approccio

Carica una volta, conferma, poi cita il file URI

Per i file degli utenti chiedi un ticket di upload, fai la PUT del numero esatto di byte con tutti gli header restituiti, conferma e passa l’URI spicy:// nel campo immagine del modello. Il riferimento diventa del tuo account, viene controllato una volta sola e si riusa su più attività senza ricaricarlo.

Ticket, PUT, conferma, creazione. I media già raggiungibili pubblicamente saltano i primi tre passaggi.

Ticket → PUT → commit → create

POST /api/v1/common/upload-url
{ "contentType": "image/png", "bytes": 482113 }
→ { "fileId": "fil_01k3…", "uploadUrl": "https://…", "method": "PUT", "headers": { … } }

PUT <uploadUrl>            # exactly 482113 bytes, every returned header replayed
POST /api/v1/files/fil_01k3…/commit
→ { "status": "ready", "uri": "spicy://f/fil_01k3…", "sha256": "…" }

POST /api/v1/jobs/createTask

{
  "model": "<publisher>/<model>/edit",
  "input": {
    "prompt": "Replace the background with an overcast beach at dusk",
    "image_urls": ["spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3"]
  }
}

Contratto

Cosa conviene fissare fin dall’inizio

API di modifica immagini: da un riferimento — Cosa conviene fissare fin dall’inizio
Campo o headerValore o limite
POST /api/v1/common/upload-urlJPEG · PNG · WebP · GIF ≤ 10 MiB
POST /api/v1/files/{fileId}/commitreturns spicy://f/fil_…
inline data URI≤ 1 MiB decoded · ≤ 8192 px per side
request body≤ 2 MiB · ≤ 16 images

Scorri in orizzontale per vedere tutte le colonne.

Integrazione

Dalla prima chiamata alla produzione

  1. 01POST /api/v1/common/upload-url con contentType e il numero esatto di byte; immagini fino a 10 MiB in JPEG, PNG, WebP o GIF.
  2. 02Fai la PUT dei byte all’URL prefirmato ripetendo tutti gli header restituiti dal ticket, poi POST /api/v1/files/{fileId}/commit.
  3. 03Manda createTask con il valore di model di modifica dell’endpoint e l’URI spicy:// in image_url o image_urls.
  4. 04Leggi output.assets dalla callback o da recordInfo e conserva tu il file modificato.

Scelta

Quando questa strada è quella giusta

Scegli questa via se

  • Il tuo prodotto parte dalle foto degli utenti: ritocco, sostituzione dello sfondo, cambio di stile, rimozione di oggetti.
  • Lo stesso riferimento viene riusato su più attività e non deve essere ricaricato ogni volta.

Cerca altrove se

  • Non hai un’immagine di partenza. Il testo a immagine è un contratto più semplice e più economico.
  • Ti servono modifiche video fotogramma per fotogramma. Gli endpoint di modifica restituiscono immagini fisse.

Verifiche

Cosa puoi verificare in autonomia

Gli upload sono legati all’account e controllati alla conferma

La conferma confronta byte salvati e tipo di media con il ticket, verifica la firma dell’immagine e calcola uno SHA-256 prima che il file diventi citabile.

Le immagini inline non tornano mai nel record

I data URI vengono conservati come file legati all’account. L’input normalizzato restituito da recordInfo contiene file URI, mai i byte Base64 originali.

Materiale di partenza e risultati hanno orologi separati

Il materiale che carichi resta un giorno; i risultati generati restano 14 giorni. Entrambe le finestre sono pubblicate, non trattate account per account.

Prima del lancio

Comportamenti della piattaforma da confermare

  • Decidi chi conferma i diritti sull’immagine di partenza: la piattaforma non la esamina per te.
  • Valida tipo di media e dimensione nel tuo client prima di chiedere un ticket: un 413 costa meno evitarlo che gestirlo.
  • Conserva gli URI spicy:// con i tuoi record se la stessa sorgente verrà modificata di nuovo.
  • Tratta invalid_asset come un errore da mostrare all’utente, non come un disservizio.

Domande frequenti

Cosa ci chiedono su questa pagina

Entrambe le cose. Un URL HTTPS pubblicamente raggiungibile va dritto nel campo immagine del modello. I ticket di upload esistono per i file non pubblici e per tutto ciò che supera i limiti inline.