Tutti i lavori

Short narrati, pubblicati in automatico

Scegli la nicchia: arriva uno short narrato e sottotitolato, in bozza su TikTok e pubblicato su Instagram.

Stack:
  • Python
  • Flask
  • OpenRouter
  • Edge TTS
  • faster-whisper
  • FFmpeg
  • TikTok API
  • Postiz

Cosa produce

Video veri generati dal sistema.

  • 13video narrati dal motore interno, da 24 a 70 secondi l'uno
  • 6 + 1bozze TikTok caricate e post Instagram creato end-to-end in un test
  • 33video generati dal pannello nei primi otto giorni, con entrambi i motori

Una nicchia dentro, uno short narrato fuori

Scegli la nicchia: scrive il copione, lo doppia in italiano, dà il tempo a ogni parola, copre la voce con clip stock e manda l'MP4 in bozza su TikTok e su Instagram.

Tocca un blocco per vedere cosa fa.

  • Ingresso
  • AI
  • Logica
  • Uscita

Ingresso

Pannello

Flask sulla porta 5000: scegli la nicchia, scrivi un argomento o lascialo vuoto, lancia uno o N video di fila; job in thread in background, stato ogni 1,5 s.

  • Flask
  • JavaScript

Passa a Copione

Il problema

Una pagina narrata (oroscopi, abitudini col denaro, curiosità) ha bisogno quasi ogni giorno di un video nuovo da 30-70 secondi: copione, voce, clip coerenti, sottotitoli a tempo con le parole, poi il caricamento su ogni piattaforma. Il generatore open source che avevo provato girava come app separata nel suo ambiente, e la pubblicazione restava a mano.

Cosa ho costruito

  1. Ho scritto un profilo di prompt per ogni nicchia (stile del gancio, struttura, temi vietati come i consigli d'investimento) e un passaggio LLM che scrive il copione in italiano, propone l'argomento se il campo è vuoto e lo riscrive più lungo se la voce dura meno di 30 secondi.
  2. Ho dato la voce con Edge TTS e sincronizzato i sottotitoli trascrivendo l'audio con faster-whisper, così le coppie di parole compaiono esattamente quando vengono dette; li imprimo nel video come sottotitoli ASS stilizzati.
  3. Ho preso le clip dalle API di Pexels e Pixabay con termini di ricerca scritti dall'LLM più termini fissi per nicchia; l'astrologia usa solo il suo pool visivo, così un oroscopo sul lavoro non finisce mai in un ufficio.
  4. Ho messo i due motori video dietro un pannello Flask con job in background, un lock per motore, generazioni in serie e uno storico, aperto da un'icona sul desktop senza finestra di console.
  5. Pubblico dallo stesso job: bozze su TikTok con un mio client della Content Posting API, Instagram tramite Postiz self-hosted e una notifica sul telefono via ntfy quando TikTok conferma la bozza.

La parte difficile

L'accesso a TikTok. Il connettore di Postiz chiedeva sei scope, tra cui video.publish, che richiede un audit dell'app: TikTok rifiutava persino il mio account. Ho scritto un client OAuth minimo con soli user.info.basic e video.upload, dietro un tunnel Cloudflare perché TikTok non accetta localhost; carica il video nell'inbox come bozza e controlla lo stato prima di notificare.

Risultato

Il motore ha prodotto 13 video narrati e il pannello 33 video, con entrambi i motori, nei primi otto giorni. In un test end-to-end l'app ha caricato 6 bozze su TikTok (3 erano prove) e creato 1 post Instagram tramite Postiz.

Il mio ruolo

Progetto in solitaria. Ho scelto le nicchie, scritto le regole dei prompt e il flusso con revisione prima della pubblicazione, configurato l'app sviluppatore TikTok, Docker, Postiz e il tunnel, e provato ogni passaggio; il Python e il pannello li ha scritti in gran parte Claude Code.