Per costruire un workflow n8n di generazione di immagini AI NSFW, collega un elenco di scene a un modello da testo a immagine per adulti, poi salva ogni immagine finita prima di iniziare la successiva. Su n8n self-hosted, il nodo community SpicyAPI gestisce preventivo, invio, attesa e download. Su n8n Cloud usa invece il template con HTTP Request integrato: il pacchetto attualmente non è verificato per l'installazione diretta su Cloud.
Per una prima serie di un adulto immaginario, usa Z-Image Spicy a 1024 × 1536 con espansione del prompt spenta. Il prezzo base è $0.01235 per immagine, quindi sei richieste riuscite costano $0.07410 di generazione immagini. Imposta un limite per elemento, mantieni manuale la prima esecuzione e salva i file reali in una cartella di progetto. Hosting n8n e archiviazione sono costi separati.
Il workflow sotto crea una serie serale di ritratti di un adulto immaginario. Fornisci descrizione e sei scene; n8n ripete preparazione e consegna. Manterrà coerente il brief scritto, ma il solo text-to-image non garantisce un volto identico. Inoltre n8n non cambia la policy di un modello: aggiungere un nodo di automazione a un'API ristretta non la rende senza filtri.
È un tutorial di configurazione basato sul sorgente attuale del plugin, sul catalogo e sulla documentazione n8n. L'esempio è un workflow proposto, non il resoconto di un nuovo test di sei immagini. Le illustrazioni pubbliche spiegano l'impostazione; non sono campioni che dimostrano le prestazioni dei modelli.
Cosa costruirai
La sequenza è:
Manual Trigger → Build scene list → Split Out → Build prompts → Loop Over Items → SpicyAPI Generate → Google Drive Upload → ritorno al ciclo.
Il ciclo esegue una scena alla volta. Il nodo di generazione completa e scarica l'immagine, Drive la salva e soltanto allora parte la scena successiva. L'uscita Done del ciclo segna la fine della serie completata.
Questo ordine conta quando crei un insieme invece di un'immagine sola. Se la quarta scena fallisce, le prime tre devono essere già nella cartella. Puoi recuperare la quarta e continuare con le rimanenti invece di ricominciare tutto. Assegna anche un nome riconoscibile a ogni immagine mentre le informazioni della scena sono ancora disponibili.
Il nodo SpicyAPI sa già elaborare più elementi d'input. Aggiungiamo il ciclo specificamente per salvare ogni risultato prima di proseguire; non serve solo per inviare più prompt. Un nodo di generazione con molti elementi può essere utile dopo, ma un workflow per una sola immagine alla volta chiarisce meglio esecuzione, attività e file scaricato quando li stai ancora imparando.
Per questa prima versione non servono AI Agent, frontend, Telegram o un modello linguistico che scriva prompt. Puoi aggiungerli quando risolvono un problema reale. Per ora toglierli lascia un punto chiaro per modificare il personaggio, uno per cambiare la scena e una cartella chiara con i risultati.
Scegli il modello d'immagine prima del template
Per personaggi per adulti, la scelta del modello precede l'automazione. Un template può avere un modulo utile o una demo raffinata ma usare un endpoint che rifiuta il materiale desiderato. Alcuni esempi n8n generici aggiungono anche una propria lista di blocco NSFW. Importarli invariati conserva quel comportamento.
Per questa guida, le opzioni SpicyAPI da testo a immagine pertinenti sono:
| Modello | Prezzo con espansione spenta | Controlli delle dimensioni | Quando è adatto |
|---|---|---|---|
| Z-Image Spicy | $0.01235 per immagine | Larghezza e altezza, ciascuna 256–1536 pixel; default 1024 × 1536 | Prima serie di ritratti con endpoint per adulti e costo modesto |
| Z-Image Spicy Pro | $0.019 per immagine | Larghezza e altezza, ciascuna 256–2560 pixel; default 1024 × 1024 | L'immagine finale richiede un lato maggiore di 1536 pixel |
| Z-Image Turbo | $0.010 per immagine | Scelta di rapporti supportati; default 1:1 | Prova economica del workflow o esplorazione con i suoi parametri |
Le due famiglie Spicy sono indicate come endpoint per adulti senza restrizioni. È l'ambito fornito del prodotto, non un nuovo tasso misurato di accettazione di qualsiasi prompt. Scegli l'endpoint che supporta il lavoro da automatizzare, poi fai una prova piccola con il brief reale prima di ampliare la serie.
Pro è una scelta pratica per una tela di consegna maggiore; il nome non prova una conservazione più precisa del volto. Se basta 1024 × 1536, Spicy standard accetta già la misura. Pagare Pro deve rispondere a un requisito concreto, non alla supposizione che un nome più costoso sistemi la deriva del personaggio.
Non copiare impostazioni tra le righe come se fossero la stessa API. Spicy e Spicy Pro usano width e height. Turbo usa aspect_ratio e limita il prompt a 1.000 caratteri. I prompt Spicy non hanno un limite di caratteri imposto. Gli endpoint accettano testo, non riferimenti d'immagine; aggiungere una foto al workflow non dà loro una funzione che non espongono.
Lascia spenta l'espansione nella prima serie. Scriverai deliberatamente personaggio e scena specifica. Un espansore aggiunge un'altra trasformazione tra istruzioni e richiesta, rendendo più difficile capire quali parole abbiano prodotto il risultato. Cambia anche il prezzo di Spicy standard e Turbo: con espansione costano rispettivamente $0.0133 e $0.016 per immagine. Pro ha un solo prezzo indicato per immagine.
Per la prima esecuzione scegli Spicy standard, imposta esplicitamente 1024 × 1536 e usa il default con espansione spenta. L'esempio ha così formato coerente e calcolo semplice. Dopo aver aperto i file salvati puoi decidere se serve una composizione più ampia, una tela maggiore o un editor per un controllo più forte dell'identità.
Installa il nodo e collega l'account
Per pacchetto, configurazione della chiave e template HTTP n8n Cloud, apri la guida ufficiale del nodo n8n SpicyAPI. Poi segui la preparazione di scene o riferimenti sotto per questo workflow.
Il percorso diretto community richiede un'istanza n8n self-hosted che consenta pacchetti community. Apri Settings, trova Community Nodes e installa @spicyapi/n8n-nodes-spicyapi. La versione pubblicata è 0.1.1. Se l'amministratore ha disattivato l'installazione, chiedigli di abilitarla o installare il pacchetto; cercarlo ripetutamente nel selettore non lo aggiunge.
La pubblicazione del pacchetto non significa verifica n8n. Cloud consente nodi community verificati e questo pacchetto attualmente non appartiene alla categoria. Gli utenti Cloud devono passare alla sezione del template HTTP sotto. La distinzione segue la documentazione d'installazione dei nodi community n8n, non un limite dell'API immagini.
Dopo l'installazione aggiungi un nodo SpicyAPI e crea la credenziale. Prendi la chiave dalla console delle chiavi SpicyAPI, incollala nel campo API Key e conserva il Base URL predefinito, https://api.spicyapi.ai. Salva la credenziale e usa il test di connessione. La chiave va lì, non in un prompt, in Edit Fields o in un export condiviso del workflow.
Il test riuscito stabilisce che l'account è raggiungibile. Non significa che hai già generato un'immagine, che il modello accetti ogni input o che il saldo basti per un lotto grande. Controlla il saldo prima della prova e lascia inattivi i trigger programmati finché il percorso manuale non funziona correttamente.
Se il nodo appare ma il selettore modelli non carica, comincia da credenziale e connessione anziché riscrivere il prompt. Una richiesta di elenco fallita è configurazione. Puoi scegliere la modalità ID del campo Model e inserire l'identificatore pubblico esatto, ma un ID non ripara una chiave non valida né evita le regole dei parametri.
Qui l'identificatore è alibaba/z-image-spicy/text-to-image. Nome della pagina della famiglia e identificatore API hanno scopi diversi: la pagina spiega il prodotto, quello completo sceglie l'attività precisa. Usa l'identificatore completo nel nodo, non lo slug breve del sito.
Genera e salva prima una sola immagine
Prima dell'elenco di sei scene, collega Manual Trigger a un solo nodo SpicyAPI. Seleziona Resource Image e Operation Generate. Scegli Z-Image Spicy o modalità ID con l'identificatore sopra. Lascia vuoto Media Inputs perché la richiesta parte dal testo.
Usa questo prompt iniziale completo:
Fotografia editoriale di Mara, donna immaginaria di 34 anni con ricci scuri alle spalle, occhi marroni, volto morbidamente angolare e piccolo ciondolo d'oro. Indossa un abito da sera opaco in satin verde scuro con spalline sottili. È accanto a un'alta finestra dell'appartamento al crepuscolo, una mano appoggiata lievemente alla tenda, e guarda la camera con sicurezza tranquilla. Ritratto a mezzo busto, luce interna calda mescolata a luce serale blu fredda, texture cutanea naturale, pieghe realistiche, atmosfera romantica contenuta, nessun'altra persona nell'inquadratura.
Il prompt descrive un'adulta specifica e un solo momento visibile. Dà una posizione alla camera, indica gli abiti importanti e separa luce interna calda e finestra più fredda. Non richiede di ricostruire una storia elaborata in una sola immagine fissa.
Imposta Model Parameters su larghezza 1024, altezza 1536, espansione false. Lascia il seed non impostato per la prova. In Additional Parameters mantieni l'oggetto vuoto {}. Il campo può sovrascrivere prompt e impostazioni visibili: un valore dimenticato può inviare qualcosa di diverso da ciò che vedi nel modulo.
Imposta Max Cost per Item (USD) a 0.015. È sopra il prezzo attuale $0.01235 ma molto sotto il default del nodo di $2 per elemento. Nelle opzioni lascia Wait for Completion e Download Output attivi. Usa data come nome della proprietà binaria. Mantieni Max Wait Time al default per la prima immagine; il nodo usa la scadenza dell'attività invece di aspettare indefinitamente.
Esegui una volta. Il nodo ottiene un preventivo prima di creare l'attività e lo controlla rispetto al limite. Quando l'attività riesce e l'output è pronto, scarica l'immagine nei dati binari. Apri la vista Binary dell'output e visualizza o scarica data.
Tre cose devono concordare: attività riuscita, immagine binaria apribile e risultato ragionevolmente fedele al brief. Un'attività riuscita con abito sbagliato è creatività. Una credenziale fallita è configurazione. Un'attività riuscita senza file ancora salvato è consegna. Separarle evita di pagare un'altra generazione quando l'originale semplicemente non ha raggiunto la destinazione.
Guarda l'immagine alla dimensione d'uso. Per una scheda companion il volto deve leggersi in piccolo; per un capitolo possono contare di più posa e stanza. Se il ciondolo distrae, semplificalo prima della serie. Se l'espressione è troppo neutra, cambia sguardo o posa invece di aggiungere una dozzina di generici aggettivi di qualità.
Aggiungi ora Google Drive dopo Generate. Seleziona Resource File, Operation Upload e Input Data Field Name data. Scegli credenziale Drive e cartella, poi esegui il caricamento usando l'output riuscito. Apri il file in Drive. Completa questo primo upload prima del lotto; altrimenti sei generazioni riuscite lasciano lo stesso problema di file mancante da diagnosticare sei volte.
Prepara un brief del personaggio e sei scene diverse
Per un insieme coerente, conserva aspetto e stile fotografico in due campi riutilizzabili. Cambia separatamente la scena. È più controllabile di un modello linguistico che inventa un nuovo prompt per ogni immagine, perché vedi le parti fisse e quelle variabili.
Aggiungi Edit Fields dopo Manual Trigger e chiamalo Build scene list. In Manual Mapping crea:
| Campo | Tipo | Valore d'esempio |
|---|---|---|
seriesId | String | mara-evening-v1 |
characterBase | String | Età, volto, capelli, ciondolo e abito opaco verde satin dell'adulto immaginario |
styleBase | String | Fotografia editoriale, texture naturale, tessuto realistico, atmosfera romantica contenuta |
scenes | Array | I sei oggetti scena sotto |
Per characterBase usa una frase completa: «Mara è una donna immaginaria di 34 anni con ricci scuri alle spalle, occhi marroni, volto morbidamente angolare e piccolo ciondolo d'oro, e indossa un abito da sera opaco in satin verde scuro con spalline sottili.» Per styleBase usa «Fotografia editoriale, texture cutanea naturale, pieghe realistiche, atmosfera romantica contenuta, un solo personaggio adulto.»
Non inserire ogni preferenza nel campo personaggio. «Sorride», «seduta», «alla finestra» e «luce blu» sono scelte di scena. Se fisse nella base, possono contraddire un ritratto successivo in piedi con luce calda. La base descrive chi è presente; la scena cosa vede il pubblico accadere.
Incolla questo valore nel campo Array scenes:
[
{"sceneId":"01","scene":"Waist-up beside an apartment window at dusk, hand on the curtain, cool evening light and warm interior light, looking toward the camera."},
{"sceneId":"02","scene":"Seated sideways on a velvet armchair in the same apartment, relaxed shoulders, hands resting separately, warm floor-lamp light, medium portrait."},
{"sceneId":"03","scene":"Standing in the apartment doorway, one hand on the doorframe, softly playful expression, three-quarter portrait, warm light behind her."},
{"sceneId":"04","scene":"Close portrait beside the window, curls tucked behind one ear, pendant visible, steady direct gaze, soft side light."},
{"sceneId":"05","scene":"Standing on a quiet balcony at blue hour, dress moving slightly in the breeze, looking back toward the apartment, medium portrait."},
{"sceneId":"06","scene":"Seated on the armchair near the window, looking down with a small smile, hands resting in her lap, gentle mixed evening light, waist-up portrait."}
]Questi sei prompt formano un piccolo servizio fotografico, non sei richieste scollegate. Stanza, abiti e personaggio restano stabili mentre cambiano distanza, posa e attenzione. Ottieni variazione sufficiente per una storia o un profilo senza chiedere al modello di cambiare tutto insieme.
L'esempio pubblico resta completamente vestito. Per un progetto per adulti puoi adattare guardaroba e atmosfera consentiti al tuo brief immaginario. Mantieni istruzioni visive e concrete. La sola etichetta di categoria adulta non dice se vuoi un primo piano intimo, moda serale drammatica o una scena rilassata in stanza.
Non partire da sei pose difficili a figura intera. Composizioni ampie offrono più elementi da disporre e rendono più difficile valutare differenze facciali. Il primo piano della quarta scena è utile proprio perché confronta tratti distintivi senza che la stanza occupi quasi tutto il fotogramma.

Illustrazione: il primo piano enfatizza i dettagli mantenuti nella descrizione riutilizzabile del personaggio.
Separa le scene e costruisci i prompt finali
Dopo Build scene list aggiungi Split Out. Imposta Field to Split Out su scenes, Include su All Other Fields e Destination Field Name su scene. L'output deve contenere sei elementi. Ciascuno mantiene seriesId, characterBase e styleBase, più il proprio oggetto scene. Le impostazioni seguono la documentazione Split Out.
Apri l'output prima di proseguire. Il primo elemento deve avere scene.sceneId pari a 01, il secondo 02. Se c'è ancora un solo elemento con tutte le scene, il campo di separazione è sbagliato. Se sparisce la descrizione del personaggio, è sbagliato Include. Correggerlo qui non costa generazione.
Aggiungi un altro Edit Fields chiamato Build prompts. Mantieni i campi in ingresso. Aggiungi sceneId come String in Expression con {{ $json.scene.sceneId }}. Aggiungi prompt come String con {{ $json.characterBase + '. ' + $json.styleBase + '. ' + $json.scene.scene }}. La documentazione Edit Fields descrive campi ed espressioni.
La piccola espressione unisce tre pezzi di testo ordinario. Non chiede a un modello linguistico di parafrasare il personaggio o reinterpretare la scena. Esamina tutti i sei prompt finali: base del personaggio identica, stile identico, solo la scena finale deve cambiare.
Assicurati che l'espressione sia valutata, non salvata come testo letterale. L'anteprima deve mostrare la descrizione fotografica completa, non parentesi e $json. Se compare undefined, un nome di campo differisce da quello creato. La grafia esatta di characterBase, styleBase e scene conta.
Se in futuro usi un foglio, conserva questa struttura. Una riga contiene seriesId, sceneId e la scena variabile; carattere e stile fissi vengono allegati prima di Build prompts. Non serve un foglio per le prime sei immagini, ma ID stabili facilitano il passaggio successivo.
Evita un AI Agent tra i nodi solo per rendere sofisticato il workflow. Introduce costi testuali, latenza e possibili rifiuti in un'altra fase. Un endpoint immagini può supportare il brief adulto mentre il modello facoltativo rifiuta di scriverlo. Il rifiuto avviene allora prima della generazione. Mantieni il prompt preparato e invialo direttamente all'attività scelta.
Salva ogni immagine prima della scena successiva
Aggiungi Loop Over Items dopo Build prompts con Batch Size 1. Collega l'uscita Loop a SpicyAPI Generate, Generate a Google Drive Upload e Upload di nuovo a Loop Over Items. Done chiude la serie. Tieni Reset spento: è una lista finita di sei elementi, non un ciclo che ricrea input indefinitamente. Vedi la documentazione Loop Over Items.
Sostituisci il prompt fisso della prova con {{ $json.prompt }}. Mantieni modello, dimensioni, limite e download della prova riuscita. Il ciclo presenta un elemento a Generate: ogni passaggio deve mostrare un prompt completo di scena.
Il collegamento cruciale è il ritorno da Upload al ciclo. Tornare direttamente da Generate avvia la scena successiva prima di finire l'archiviazione. Collegare Done invece di Loop salta il percorso per scena. Segui il grafo con il dito: una scena entra in Generate, il file entra in Upload, l'upload completato torna per la successiva.
In Google Drive Upload mantieni Input Data Field Name data. Per File Name usa {{ $('Build prompts').item.json.seriesId + '-' + $('Build prompts').item.json.sceneId + '-' + $binary.data.fileName }}. Aggiunge serie e scena al nome realmente scaricato mantenendo l'estensione vera. Scegli la cartella della prova. I campi sono documentati nell'operazione upload Google Drive.
Perché tornare a Build prompts? Generate restituisce record dell'attività e binario; non copia automaticamente i campi personalizzati di scena nel JSON. Il collegamento degli elementi n8n consente all'espressione di recuperare seriesId e sceneId precedenti corrispondenti. Usare l'attuale $json.sceneId dopo Generate può dare un nome vuoto perché il JSON attuale descrive l'attività.
In questa ricetta con una sola immagine, data è l'unico campo binario necessario all'upload. Quando un'altra attività restituisce più asset, i binari aggiuntivi si chiamano data_1, data_2 e così via. Un upload configurato per data non carica automaticamente tutti gli altri. Ricordalo cambiando attività; non presumere che il primo file salvato sia tutta la risposta.
Esegui ancora con la sola scena 01 nell'array. Conferma che il nome includa serie e scena e si apra dalla cartella scelta. Ripristina poi i sei oggetti ed esegui la serie completa. Questo passaggio singolo verifica nuovo ciclo ed espressioni dei nomi prima che sei richieste pagate ne dipendano.
La cartella finale deve contenere una sequenza riconoscibile, non sei download anonimi. Il file salvato è il punto finale utile. URL dell'output e anteprima d'esecuzione aiutano durante la generazione, ma nessuno è la cartella permanente di progetto che vuoi costruire.

Illustrazione: salva l'immagine attuale prima che il ciclo avvii la scena successiva.
Imposta un vero budget per la serie
La tariffa immagini è il numero di richieste riuscite fatturabili moltiplicato per il prezzo applicabile. Il workflow non addebita una scena che esiste soltanto nell'elenco. Addebita un'altra generazione riuscita richiesta deliberatamente per sostituire un'immagine che non ti piace.
Per l'esempio di sei scene, con espansione spenta:
| Piano | Spicy standard a $0.01235 | Spicy Pro a $0.019 | Turbo a $0.010 |
|---|---|---|---|
| Un passaggio completo di sei scene | $0.07410 | $0.11400 | $0.06000 |
| Primo passaggio più sei sostituzioni | $0.14820 | $0.22800 | $0.12000 |
| Tre candidati per ciascuna delle sei scene | $0.22230 | $0.34200 | $0.18000 |
Sono costi di generazione, non una promessa di risultati tutti utili. Se produci diciotto candidati e ne tieni sei, paghi diciotto immagini riuscite. Un download affidabile evita di sprecare attività completate; non rende gratuiti i candidati scartati creativamente.
Max Cost ha un altro scopo. Il plugin lo confronta con il preventivo di ogni elemento prima di crearne l'attività. Non è il budget dell'intero workflow di sei scene. Il default è $2 per elemento, molto più del prezzo d'esempio. Zero disattiva il limite; non significa generazione gratuita.
Con sei elementi e tetto di $0.015 ciascuno, la somma dei tetti è $0.09. È un limite superiore utile per quei sei invii, se il workflow non aggiunge elementi, ricicla, cambia attività o avvia altre esecuzioni. Al prezzo base attuale Spicy standard, la tariffa prevista è inferiore: $0.07410.
Per Pro, un tetto $0.015 fermerebbe la richiesta prima della creazione perché il preventivo $0.019 lo supera. Alza deliberatamente il limite se scegli Pro: per esempio $0.025 consente il prezzo attuale. I sei tetti sommano allora $0.15. Hai cambiato scelta e spesa consentita, non permesso un ripiego silenzioso a un costo diverso.
Il plugin gestisce anche il conflitto di cambio prezzo ottenendo un nuovo preventivo e ricontrollando il limite. Non serve un nodo separato solo per avere quella protezione nel percorso community. Il fallback HTTP sotto è un'implementazione distinta: non presumere ogni parte dello stesso comportamento automatico.
Prima di programmare, moltiplica il costo del lotto per le esecuzioni previste. Un passaggio standard di sei scene al giorno costa $2.223 di generazione su trenta giorni alla tariffa base indicata. Tre candidati per scena al giorno costano $6.669. Raddoppiando la frequenza raddoppiano le cifre. Abbonamento o server n8n, spazio e modelli testuali facoltativi sono separati.
Mantieni il workflow manuale finché non sai quanti candidati servono davvero. Un programma quotidiano che riproduce una serie già finita è un ordine ricorrente. Dai ai nuovi avvii un progetto o elenco diverso, oppure includi soltanto scene ancora prive d'immagine. Una richiesta economica diventa costosa se il trigger la ripete senza motivo.
Un timeout non autorizza a generare di nuovo
Attesa e generazione sono attività diverse. Max Wait Time controlla quanto il nodo aspetta il risultato. Raggiungerlo non cancella l'attività sottostante. Può completarsi dopo e una generazione riuscita può essere addebitata.
Supponi che la scena 04 mostri timeout. Non cliccare subito Execute Workflow con tutte e sei. Apri l'esecuzione fallita, cerca l'ID creato nell'output o messaggio e recupera prima l'attività. Non ogni errore ha un campo JSON dedicato taskId: leggi anche il messaggio.
Nel percorso community, crea un piccolo workflow di recupero: Manual Trigger → SpicyAPI con Resource Task, Operation Get → nodo di archiviazione. Inserisci l'ID esistente. Se è ancora in coda o in esecuzione, attiva Wait for Completion. Task Get non aspetta per default. Lascia Download Output attivo e proprietà data per inviare il recupero allo stesso upload.
In questo workflow distinto, dai all'upload un nome con serie e scena note: per la quarta usa {{ 'mara-evening-v1-04-' + $binary.data.fileName }}. Non copiare l'espressione che rimanda a Build prompts: quel nodo non esiste nel recupero. Mantieni Input Data Field Name data e la stessa cartella.
Controlla cosa dice davvero l'attività. Se sta eseguendo serve tempo. Se riuscita serve salvare il file. Se fallita o scaduta serve affrontare l'errore indicato prima di una nuova richiesta. Un rifiuto del modello non è un timeout di rete: aspettare di più o reinviare in un ciclo stretto non lo risolve.
Attività fallite o scadute normalmente liberano la prenotazione. Le richieste rifiutate per contenuto normalmente non sono fatturate salvo diversa indicazione nella pagina del modello. Per la richiesta reale esamina regolamento e costo, non decidere dal solo nodo rosso. Un nodo d'attesa fermato e un'attività di generazione fallita non sono esiti di fatturazione intercambiabili.
Dopo aver recuperato e salvato 04, elimina 01–04 dall'elenco ed esegui 05 e 06. Se 04 è davvero fallita e vuoi una nuova generazione, mantieni 04 nell'elenco restante dopo aver corretto l'input. Gli ID restano stabili anche con array corto, quindi i nomi mostrano ancora il posto di ogni immagine.
Per questo il ciclo di un elemento è utile. Salva le scene precedenti prima che una successiva interrompa la serie. Non fa sparire l'attività esterna quando n8n si ferma, ma riduce il lavoro da ricostruire.
Comprendi cosa possono deduplicare i tentativi
Il plugin aggiunge una chiave interna d'idempotenza alla creazione. Nella stessa esecuzione, passaggio del nodo ed elemento, lo stesso input può recuperare la stessa richiesta invece di creare alla cieca un duplicato. Aiuta quando si perde una risposta di rete dopo l'accettazione API.
Non è un controllo permanente «questo prompt è già stato generato». Una nuova esecuzione ha un ambito diverso. Anche un successivo passaggio del ciclo ha un indice diverso. Cambiare prompt o parametri cambia la richiesta. Possono creare un'attività pagata nuova anche se la scena visibile sembra familiare.
Usa quindi tre risposte per tre problemi. Se l'invio era incerto, recupera l'attività prima di ordinarne un'altra. Se l'immagine finita non è stata caricata, ripeti upload o recupera l'output esistente. Se è salvata ma la posa è sbagliata, cambia scena e richiedi deliberatamente una sostituzione.
Mantieni modesti i retry automatici aggiunti. Servono per errori temporanei di trasporto, non selezione creativa. Dimensione non valida, campo binario errato o input incompatibile restano sbagliati al tentativo successivo. Correggi prima l'impostazione. Un retry nel suo ambito d'esecuzione è diverso da una persona che lancia un workflow nuovo.
Per una serie programmata, usa un piccolo foglio o tabella di stato quando il recupero manuale diventa scomodo. Campi utili: seriesId, sceneId, stato, ID e link salvato. Prima della generazione includi solo righe pronte; dopo l'upload marca la scena salvata. Un retry ha così l'ID da recuperare invece di indovinare se la precedente richiesta sia arrivata.
Non aggiungere questa gestione alla prima prova senza necessità. Sei scene riviste manualmente si gestiscono modificando l'array. La tabella vale per trigger ricorrenti non sorvegliati o più persone sullo stesso progetto. Impedisce che una scena completata venga trattata come nuovo ordine, non serve a creare burocrazia.
Conserva i file, non i link temporanei
I link firmati API durano circa venti minuti. È la finestra d'accesso di un link, non una promessa che attività e asset spariscano allo stesso momento. Recupera l'attività per l'accesso attuale mentre l'asset è conservato, poi scarica e archivia.
Se incolli l'URL in un foglio e torni domani, un link scaduto può sembrare una generazione persa. Non pagare per ricrearla solo perché fallisce il vecchio URL. Recupera prima l'attività. In un workflow ricorrente salva il link durevole Drive dopo l'upload invece di trattare quello temporaneo come asset finale.
Con Download Output attivo il plugin fornisce binario al nodo successivo. Disattivato, hai record e link ma nessun data binario per Drive. Una stringa URL non è il file. Se l'upload non trova dati binari, controlla Download Output e corrispondenza del nome della proprietà.
Conta anche aggiungendo un frontend. Nel tutorial no-code di Leon van Zyl, la trascrizione mostra un'esecuzione n8n riuscita seguita da errore frontend perché la gestione della risposta si aspettava qualcosa di diverso dal binario restituito. La lezione utile è esaminare chi consuma l'immagine prima di incolpare la generazione.
Drive vuole un campo binario. Una pagina web può volere un URL permanente. Per una cartella locale la scrittura avviene sulla macchina n8n, che può essere un server invece del portatile. Scegli deliberatamente la destinazione e apri lì un risultato prima di aggiungere scene.
Se l'upload fallisce dopo la generazione, conserva l'ID e ritenta l'archiviazione. Controlla credenziale Drive, accesso alla cartella e data. Se il file è già presente, evita un'altra copia solo perché l'ultima conferma era incerta. L'idempotenza protegge la creazione nel proprio ambito; non deduplica automaticamente ogni upload a valle.
Usa il template HTTP su n8n Cloud
Su Cloud puoi usare l'API con nodi integrati senza il pacchetto non verificato. Scarica l'esempio dal repository ufficiale n8n SpicyAPI, poi importalo. Parti dalla struttura per una sola immagine invece di ricostruire tutte le funzioni community insieme.
Il template contiene Settings, preventivo, controllo budget, creazione, controlli di stato con ciclo Wait e download finale. Settings parte da Z-Image Turbo e un rapporto. Cambia il prompt nella prova del tuo adulto immaginario mantenendo intatti i campi supportati.
Crea la credenziale HTTP Bearer Auth richiesta e selezionala in GetQuote, CreateTask e GetTask. Metti la chiave nella credenziale. DownloadImage finale recupera l'URL firmato dell'asset e non richiede la credenziale SpicyAPI su quella richiesta di storage.
Le risposte HTTP grezze usano un involucro data, quindi le espressioni possono rimandare a data.taskId o data.output. Il nodo community restituisce un record senza involucro. Copiarne un'espressione in HTTP senza considerarlo può far apparire vuota una risposta valida.
Il download deve trattare la risposta come file. La documentazione HTTP Request n8n descrive Response Format File e il campo d'output. Esamina il binario reale e indirizza Drive lì. Il template scarica il primo asset; non scarica automaticamente tutti gli asset multipli.
Se passi da Turbo a Spicy standard, cambia input e identificatore. Usa larghezza e altezza invece di aspect_ratio. Aggiorna sia preventivo sia creazione per descrivere la stessa immagine. Cambiare solo Settings.model mantenendo il corpo vecchio non migra correttamente tra schemi.
Per il primo Cloud usa una sola immagine per esecuzione. La chiave di creazione del template dipende da esecuzione e indice elemento, non dalla chiave più ricca del plugin con input e passaggio del ciclo. Non inserire il template invariato in un ciclo presumendo gli stessi retry. Un lotto Cloud corretto necessita identità distinte delle richieste di scena e input quote/create corrispondenti.
Anche il polling richiede un punto d'arresto deliberato per l'uso non sorvegliato. L'esempio ripete attesa e controllo dello stato finché l'attività non raggiunge uno stato terminale; non offre Max Wait Time del nodo community. Imposta un timeout d'esecuzione appropriato prima di programmare. Fermare il workflow non cancella comunque l'attività API. Recuperala con GetTask prima di una nuova generazione.
Se il prezzo cambia tra preventivo e creazione, risolvi il conflitto e ottieni un nuovo preventivo. Il plugin lo automatizza, mentre l'esempio HTTP non è identico in ogni dettaglio. È una base Cloud utilizzabile, ma la ricetta self-hosted community è più semplice per il ciclo di sei scene insegnato qui.
Migliora la serie senza pagare modifiche sbagliate
Dopo il salvataggio confronta i sei file insieme. Chiedi prima se raccontano la storia visiva voluta: stessa serata, abiti e adulto, visti da angoli diversi. Poi decidi quali fotogrammi specifici sostituire. Non ripetere scene buone perché una è debole.
Se il volto deriva, riduci i cambi tra scene. Mantieni capelli, struttura e ciondolo e rimuovi trucco nuovo o segnali marcati di età presenti in una sola. Un angolo nuovo può comunque cambiare l'aspetto; la coerenza scritta controlla gli input ma non blocca l'identità facciale.
Se l'identità esatta è essenziale, smetti di risolverla con un altro paragrafo di aggettivi. Questi endpoint solo testuali non accettano il ritratto come riferimento. Porta l'immagine scelta in un modello con una vera attività di riferimento o editing. La guida alla conservazione del volto spiega quel workflow. Qui il text-to-image stabilisce personaggio e servizio fotografico; l'editing serve quando conservare il volto diventa prioritario.

Illustrazione: cambia posa, camera e ambiente mantenendo aspetto distintivo e guardaroba.
Se l'atmosfera è piatta, cambia un elemento visibile: sguardo, direzione della luce, distanza o tessuto. «Più NSFW» non specifica l'immagine. Un adulto che si volta su un balcone soffusamente illuminato è una composizione diversa da un primo piano con contatto visivo diretto, anche se entrambi appartengono a un progetto adulto.
Se la posa confonde, semplifica le istruzioni fisiche. La seconda scena separa deliberatamente le mani appoggiate invece di chiedere un'interazione complessa con diversi oggetti. Aggiungi una sola interazione quando la posa semplice funziona. L'automazione invia bene una serie preparata con coerenza; non elimina la necessità di offrire al modello un momento disegnabile.
Se l'inquadratura taglia qualcosa di importante, cambia composizione o dimensioni prima di aumentare i dettagli. Il ritratto standard può mostrare bene un mezzo busto, ma una figura intera può richiedere distanza più esplicita. La tela Pro dà più pixel; non allarga automaticamente il campo della camera né ripara un'istruzione compositiva.
Mantieni seed, prompt e dimensioni di un'immagine accettata per una ripetizione controllata. Un seed tiene stabile la variazione alle stesse impostazioni; cambiare scena o misura cambia il problema. Negli endpoint Spicy, seed zero richiede casualità. Un seed nonzero fisso serve al confronto, non garantisce volti identici in ogni scena.
Distingui infine successo tecnico e utilità. La tabella costi conta tutti i candidati riusciti fatturabili. La serie finita conta solo quelli conservati. Se sei immagini richiedono dodici candidati, prevedine dodici e poi migliora le istruzioni delle scene deboli per ridurre le sostituzioni nella prossima serie.
Domande prima di attivare un programma
n8n è un generatore di immagini NSFW?
No. Collega input, richieste API e destinazioni. L'endpoint scelto determina capacità e ambito. Un agente facoltativo per prompt o un template importato può imporre restrizioni proprie prima della chiamata immagini.
Si può fare senza scrivere uno script?
La ricetta self-hosted usa nodi visivi, un breve array e due piccole espressioni. Devi comunque scegliere modello, creare credenziali e collegare correttamente il ciclo. HTTP su Cloud richiede più attenzione a JSON e risposte; evita l'installazione, non tutta la configurazione API.
Un template n8n gratuito rende gratuite le immagini?
No. Importare un workflow e pagare una richiesta sono cose separate. L'esempio usa API a pagamento e hosting o abbonamento n8n aggiunge costi. Il numero utile è prezzo di generazione moltiplicato per i candidati riusciti richiesti.
Dovrei automatizzare la pubblicazione dopo la generazione?
Per una serie nuova, termina con file salvati e controlla prima le immagini. Puoi aggiungere consegna quando destinazione e requisiti creativi sono definiti. Un workflow che salva affidabilmente sei scene è già utile; il posting pubblico automatico è un'azione distinta con requisiti diversi.
Comincia con un'immagine manuale e un upload riuscito. Espandi poi alle sei scene con limite di costo e ciclo che salva prima di proseguire. Quando qualcosa fallisce, recupera l'attività esistente prima di ordinare un'altra immagine. Ottieni così un workflow n8n pratico per personaggi adulti: input comprensibili, costi prevedibili e file che ritrovi davvero.








