Was macht TikTok Affiliate)?
Johns Produktionslinie: Produkt-Screenshots → Storyboard-Prompt (First Frame UGC Hub-Strategien) → Google Flow-Generierung → TikTok Studio Web-Upload (gestaffelt, 10-Minuten-Intervall) → Telegram-Statusmeldungen → John fügt das Shop-Produkt in der App hinzu. ANTI-REPETITION + CINEMATIC FIX (6. August 2026): Master-Prompt v2.2 IN DIE PIPELINE INTEGRIERT. Jede Skriptgenerierung MUSS jetzt: (1) /home/john/google-flow-automation/master_prompt_v2.2.txt (Abschnitte A-J) lesen, (2) python3 /home/john/google-flow-automation/script_rotation.py pick ausführen und NUR aus allowed_strategies/allowed_hooks/allowed_ctas/allowed_personas/allowed_cameras/allowed_lighting auswählen, (3) die zusätzlichen prompt.json-Felder strategy, hook_type, persona, cta_line, camera_movement, lighting schreiben, (4) danach script_rotation.py record --strategy N --hook ... --cta ... --persona ... --camera ... --lighting ... --starters ... ausführen. Der Rotationsstatus wird in rotation_state.json gespeichert (letzte 10 Skripte: keine Strategie/Hook/CTA/Persona/Kamera/Lichtung hintereinander, kein Satzanfang aus der letzten-10-Liste, 'yellow basket' CTA max 1 in 3 Videos). NEU in v2.2 (Johns Wunsch vom 6. August): Jeder videoPrompt MUSS GENAU EINE Kamerabewegung nennen (Bank I.1: langsames Hereinfahren, sanftes Zurückziehen, seitlicher Dolly, Handheld-Drift, Neigungs-Enthüllung, Tiefwinkelschub, Orbit, Rack-Fokus, statische Mikrobewegung, POV-Hineingehen – eine durchgehende 10s-Bewegung, niemals ein statischer Schuss) + EINE Beleuchtung/Atmosphäre (Bank I.2: goldene Stunde, weiches Tageslicht, gemütlicher Abend, stimmungsvolles Kino, sauberes Studio, Morgenfrische, warmes Café-Bokeh, Neon-Nacht) + GESICHTSLOSE-Rahmungsregeln (I.3: niemals ein Gesicht zeigen – Hände/POV/Über-die-Schulter-von-hinten/nur Produkt; Voice-Over, kein Sprecher im Bild) + SPRECHZEIT-Spezifikation (H: ≤20 Wörter = ~7-8s Sprache, beginnt in Sekunde 1, Mikropause zwischen den Beats, letztes CTA-Wort bis ~Sekunde 8, Endcard hält Sekunden 8-10). Kopie des Master-Prompts unter /home/john/google-flow-automation/master_prompt_v2.2.txt (Downloads/ai_studio_master_prompt.txt ist die synchronisierte Quelle der Wahrheit – nach jeder Bearbeitung kopieren). Stand vom 6. August 2026: SCHATTENLAUF ABGESCHLOSSEN – PIPELINE ENDE-ZU-ENDE VERIFIZIERT. TikTok Studio Upload-Fluss AM SELBEN ABEND KARTIERT (Upload + KI-Umschalter + Upload-Zeit-Produkt-Anhängen; Klickpfad in references/tiktok-studio-upload.md). Route B über CDP (flow_driver.py, Chrome 151 nativ, GOOGLE FLOW-Profil): Upload → Anhängen → konformer Prompt → Omni Flash 10s 9:16 x1 Generierung → 1080p Upscaled Download – ALLES FUNKTIONIERTE. Frühe Generierungsversuche schlugen vorübergehend fehl (generische Nachricht, keine Credits belastet), aber der Wiederholungsversuch war erfolgreich – siehe Fallstricke.
Route A – SnapGen API-Generierung (VERIFIZIERT am 11. August 2026 – NEUER PRIMÄRER)
snapgen_client.py ist jetzt die ERSTE Generierungswahl (AUTO_PROMPT gepatcht am 11. August): reine HTTP-Omni-Flash-Generierung über die api.snapgen.ai – kein Chrome/CDP/X11, keine Flow-Credits, kein Einfrieren/Dialog/Doppel-Gen-Fehlerklasse. Verwendung: timeout 400 ~/.venvs/tiktok/bin/python /home/john/google-flow-automation/snapgen_client.py <job-verz> [--no-upscale] [--max-retries 3] – liest prompt.json videoPrompt + product_image*.png, sendet model=omni-flash 10s 9:16 1080p (Frame-Modus ≤2 Bilder, Zutat 3), fragt den Verlauf ~2m15s ab, lädt signiertes mp4 herunter, skaliert mit ffmpeg auf 1080x1920 hoch (API gibt NATIV 720x1280 zurück – es gibt KEIN Upscale-Endpunkt; --no-upscale behält 720p), schreibt generated_video.json. Exit 0 fertig / 1 fatal / 2 vorübergehend. 30 Credits pro Video; SNAPGEN_API_KEY in der Projekt-.env-Datei (Johns Konto PP0001). WEITERMACHEN NACH ABSTURZ (12. August – beide Clients): die UUID wird SOFORT nach dem Absenden in <job-verz>/.snapgen_uuid (omni) / <seg-verz>/<ausgabe>.uuid (veo) gespeichert; bei erneuter Ausführung fragt der Client diese UUID aus dem Verlauf ab, BEVOR er eine neue Anfrage sendet (der Server GENERIERT WEITER, nachdem der Client gestorben ist – VERIFIZIERT am 11. August: 3 verwaiste Veo-Einsendungen wurden abgeschlossen und wiederhergestellt; erneutes Senden würde Credits doppelt verbrauchen). Der Wiederaufnahme-Marker wird bei Erfolg entfernt; die Veo-Wiederaufnahme basiert auf dem fehlenden <ausgabe>.json-Datensatz (nicht der mp4-Datei – eine ungekürzte partielle mp4 darf NICHT als fertig zählen). Fallback-Kette: snapgen → flow_batch.py → manuelles CDP. Voice-Over improvisiert seine eigene Taglish-Formulierung aus der Prompt-Richtung (gleiche Beats, nicht wörtlich). Bildgenerierung mit Nano-Banana-Pro ist KOSTENLOS per API (5rq/min) für Standbild-Client-Arbeiten – NICHT per Skript (John entschied am 11. August: Nano Banana bleibt NUR im Browser). Vollständige Details + Verifizierung: references/snapgen-api.md + /home/john/google-flow-automation/SNAPGEN_API_ANALYSIS.md.
Interaktiver /generate-Flow + Veo 3.1 Schnellpfad (VERIFIZIERT am 11. August 2026)
Veo 3.1 schnell über SnapGen API VERIFIZIERT (11. August): 4 Credits, 8,0s, 9:16 AKZEPTIERT (Dokumentation sagte nur 16:9 – API ist nachsichtig), Frame-zu-Video mit Referenzbild, GENERIERT DAS TAGLISH-VOICEOVER entsprechend dem Skript (wörtlich transkribiert: "Magaan, komportable, pang araw-araw. Hanapin niyo sa TikTok Shop." – im Gegensatz zu Omni-Flash improvisiert es NICHT viel), nativ 720x1280 → ffmpeg 1080p, has_watermark=0, ~2m15s. Bot-Befehl /generate (telegram_bot.py, ConversationHandler + Inline-Tastaturen, live seit 11. August): /generate → [TikTok Affiliate | Regular video*] (*Platzhalter) → [Veo 3.1 fast | Omni Flash] → Skriptstil (CCC/Budol/POV/IRR/TV Commercial) → Anzahl 1-4 → schreibt job_orders/generate_<ts>.json (product_folder = NEUESTER auto-*-Ordner mit product_image.png + product_page.png; falls keiner, sagt der Bot zuerst Fotos senden) → startet EINEN FRISCHEN Agenten mit GENERATE_PROMPT (--max-turns 400, log job_orders/run_generate_*.log) → Agent: OCR-Fakten → teilt das Skript in N Segmente auf (Veo ≤16 Wörter/Segment 8s, Omni ≤20/Segment 10s; TV-Werbe-Kamera-Choreografie mit EINER Bewegung pro Segment + Kontinuität über Segmente) → Veo-Pfad: flow_frame_gen.py erstes Bild → N × snapgen_veo_client.py → Zusammenfügen wenn >1 → sendet finale mp4 per Telegram sendVideo → Schritt (9): sendet Inline-Buttons 'Auf TikTok Studio hochladen?' (genup:yes: / genup:no:) → der BOT's gen_upload_choice-Handler löst den Basename unter ~/tiktok-jobs/ auf und startet bei Ja einen NUR-UPLOAD-Agenten (UPLOAD_PROMPT – final.mp4+prompt.json existieren bereits, nur hochladen/planen: nächster freier 6:00/18:00 Slot → tiktok_studio_upload.py → Posts-Seite überprüfen → Pings); bei Nein bleibt das Video lokal. Omni-Pfad: N × flow_batch.py (Zutaten) → Zusammenfügen → senden → gleicher Schritt (9). HARTE REGEL in GENERATE_PROMPT (11. August): der /generate-Agent BERÜHRT NIE TikTok Studio – kein tiktok_studio_upload.py, keine Studio-Seiten; Schritt (9) Buttons sind der EINZIGE Weg zu einem Upload, und der Bot (nicht der Agent) führt ihn aus. Fallback bei Frame-Gen-Fehler (11. August): einmal wiederholen, dann das vorherige gute Bild (frame_<i-1>.png) für das fehlgeschlagene Segment WIERVERWENDEN; wenn ALLE Bilder fehlschlagen, Veo-Segmente ohne --ref ausführen oder auf Omni zurückfallen – niemals die Bestellung wegen eines Bildes blockieren, niemals einen Studio-Upload improvisieren.
/generate ZIELT AUF DEN NEUESTEN GESTAGED-ORDNER – Falle für veraltetes Produkt (11. August): latest_product_folder() wählt den neuesten auto-*-Ordner aus, der BEREITS product_image.png + product_page.png enthält. Wenn John NEUE Fotos für EIN ANDERES Produkt sendet und im selben Minute /generate ausführt, könnte der Auftrag den Ordner des VORHERIGEN Produkts treffen (echt: 06:17 /generate griff auto-20260811_054254/Smasher, während seine neuen Fotos ungestaged im Produktordner lagen – sein Intake-Auftrag reihte sich dann hinter einem Generate-Auftrag für das falsche Produkt ein, und er fragte "warum ist das so?"). Die Antwort "⏳ Ihre Anfrage ist in der Warteschlange" ist das KORREKTE Parallelschutz-Verhalten, kein Fehler – aber wenn ein /generate-Auftrag in der Warteschlange ist, bestätigen Sie, auf welchen auto-*-Ordner er zeigt, BEVOR Sie ihn ausführen; wenn es das falsche Produkt ist, töten Sie den Agenten und löschen Sie seine generate_<ts>.json, damit der Intake (der den neuen Ordner einrichtet) zum aktiven Auftrag wird.
DETACHED-RUN-MUSTER (AKTUALISIERT am 11. August – setsid ist jetzt GESPERRT): das Terminal-Tool verweigert setsid bash -c '...' & im Vordergrund ("Shell-level Hintergrund-Wrapper"). Verwenden Sie stattdessen systemd-run – gleiche Abtrenn-Semantik, vollständig außerhalb der Prozessgruppe des Tools: systemd-run --user --unit=<name> --collect bash -c '<cmd> > <log> 2>&1; echo $? > <exitfile>', dann alle ~30s cat <exitfile> abfragen. Start mit systemctl --user is-active <name> + tail des Logs überprüfen. Units bereinigen sich selbst mit --collect. VERIFIZIERT am 11. August (seg_2 Generierung + Zusammenfügen laufen beide so; Wiederaufnahme nach Absturz funktionierte sauber).
WIEDERAUFNAHME-NACH-ABSTURZ-Regel (11. August, real): wenn ein Pipeline-Agent mitten in einer Bestellung stirbt, enthält der Auftragsordner verifizierten Status – PRÜFEN SIE IHN, bevor Sie etwas neu generieren. seg_1.mp4 + seg_1.mp4.json (ffprobe-verifiziert) + seg_1.json/seg_2.json (Skript bereits geschrieben UND Rotation bereits aufgezeichnet) + first_frame.png überleben alle den Absturz. Verwenden Sie sie wieder; generieren Sie nur das fehlende Segment. Führen Sie NICHT script_rotation.py record erneut aus (Doppelzählung beschädigt den Anti-Repetition-Status) und überschreiben Sie NICHT die Segment-JSONs (seg_1.mp4 wurde mit genau diesem Prompt erstellt).
NEUE SKRIPTE (alle VERIFIZIERT Exit 0 am 11. August):
flow_frame_gen.py <job-verz> --prompt "<9:16 Bild-Prompt>" [--out first_frame.png]– Nano Banana 2 erstes Bild über Flow CDP (NUR IM BROWSER – Johns Regel, niemals die Bild-API): neues Projekt → Bibliothek hochladen → attach_smart (klickt das Plus nur, wenn die Bibliothek NICHT bereits geöffnet ist – das Plus SCHALTET UM und ein zweiter Klick schließt es, was "Zu Prompt hinzufügen" stillschweigend tötet; VERIFIZIERTE Korrektur) → Einstellungs-Popup über settings_chip (Prompt-Leisten-Chip bei y~714 unten, Text "Video · 10s crop_9_16 x1"/"🍌 Nano Banana 2 …" –find_btns erster Treffer trifft das Zahnrad in der oberen Leiste, verwenden Sie den y>550 + kleinster-Knopf-Sonde) → Rolle=tab 'Image' (Tab-TEXT IST GLYPH-PRÄFIXIERT: "imageImage"/"videocamVideo" – mitincludes('Image')NICHT==abgleichen) → Seitenverhältnis crop_9_16 Tab → Agent-Pill grauer Haken → tippen + Fokus+Eingabe zum Absenden (Pfeil tot für Bilder) → auf Bildkarte warten → download_frame über den Cookie+curl-Sammler (dump_cdp_cookies.py+flow_collect_media.py; das 9:16-Bild auswählen; Raster-Rendering ~768x1376 – gut als Veo-Referenz; KEIN Viewer-Klicken – das Download-Menü des Viewers ist ein Minenfeld: nur "1K Originalgröße" wird angezeigt, und ein falsch getimter Klick trifft das angrenzende PAPPEKORB-Symbol ("1 Element in den Papierkorb verschoben" – aus der Bibliothek-Papierkorb-Ansicht wiederherstellen → Alle wiederherstellen). COLLECTOR-FIX 12. August: das Character Sheet (1536x2752) ist AUCH 9:16, daher griff der alte Seitenverhältnis-Picker das SHEET anstelle des generierten Frames (frame_1 und frame_3 des 08:27-Laufs – der Agent musste manuell korrigieren).download_frameschließt jetzt die exakten Dimensionen des Character Sheets aus und bevorzugt (768,1376) direkt. Frische Projekte sind standardmäßig bereits im BILD-Modus (Nano Banana 2 crop_9_16).snapgen_veo_client.py <job-verz> --prompt "<seg>" --ref <frame.png> --out seg_<i>.mp4 [--model veo-3.1-fast] [--duration 8] [--aspect 9:16] [--no-upscale]– ein Segment über die API (verwendet die verifizierten Funktionen von snapgen_client; schreibtjob-dir/segments/). Exit 0/1/2.stitch_videos.py <ausgabe.mp4> <eingabe...>oder<job-verz> --out final.mp4(sammeltsegments/*.mp4sortiert; GEPATCHT 12. August:*.raw.mp4-Natives werden jetzt vom Glob AUSGESCHLOSSEN – die alte Regel 'rohes zuerst rausbewegen' ist jetzt ein Code-Schutz, keine 720p-Einfügungen mehr in der Mitte) – einheitliche Neucodierung (1080x1920 24fps crf18 aac44.1 pad) + Verkettung mit NEUCODIERUNG (nicht-c copy:-c copyschreibt einen falschen 48/1r_frame_rate-Header, wenn die Eingabe-Zeitbasen unterschiedlich sind, z. B. nachtrim_dead_airs select/setpts; Neucodierung ergibt einen sauberen 24/1 – gepatcht am 11. August). VERIFIZIERT: 10s+8s → 18,0s h264 1080x1920. SCHNITT-DURCHGANG + UNTERTITEL (15. August):--edit autoist jetzt der STANDARD – Prompt-bewusste, segmentbezogene Kamerabewegungen (Segmente, deren Prompt Kamerabewegung nennt, erhalten KEINE zusätzliche Bewegung; andere erhalten sanftes Hereinfahren/Herausfahren je nach Position), Farbkorrektur (Kontrast 1,03/Sättigung 1,05) und 0,25s Crossfades zwischen Segmenten (Video xfade + Audio acrossfade, c1=tri:c2=tri – dieses ffmpeg lehnt 'fade' ab).--caption(Regular/Normal-Modus NUR – Affiliate NIEMALS) transkribiert das FINALE zusammengefügte Video mit Groq (kostenlos,~/video-tools/groq_transcribe.pyAdapter → deepcaptionbuild_captions.py→~/video-tools/burn_ass.pynative Auflösung brennen, Stil minimal standard). Fehlender Schlüssel/Tools → Untertitel übersprungen mit Warnung, Zusammenfügen schlägt nie fehl. Alle Modi verifiziert am 15. August an echten vox_bf2-Segmenten (22,97s crossgefadet, untertitelt, frame-vision-bestätigt). Siehe Skill groq-video-captions für das vollständige kostenlose Untertitel-Playbook.trim_dead_air.py <eingabe.mp4> [--out ...]– STILLE-BESCHNEIDUNG (Johns Regel 11. August: "schneide die Teile heraus, in denen niemand spricht"): Veo/Omni-Clips tragen lange stille Schwänze (VERIFIZIERT: seg_1 Sprache 0-3,26s von 8s = 4,7s tot; 43% des ersten zusammengenähten Testvideos war Raumton). Erkennt Sprache mit faster-whisper-Wort-Zeitstempeln (Grundwahrheit – Energie-Schwellen fallen HIER, weil der Umgebungs-Schwanz über jedem festen RMS-Grenzwert liegt), behält [erstesWort−0,25s, letztesWort+0,35s], baut mit ffmpeg select/aselect in einem Durchgang neu. Ausführen mit~/.venvs/crypto/bin/python(einziges venv mit faster-whisper). Exit 0 beschnitten / 2 nichts zu beschneiden / 3 Fehler (Original behalten – NICHT-FATAL überall). AUTOMATISCH EINGEBUNDEN insnapgen_client.py,snapgen_veo_client.py(--no-trimzum Deaktivieren) undflow_batch.py(nach dem Download) – jedes generierte Segment wird an der Quelle beschnitten; der /generate-Agent muss NICHT Segmente neu generieren, um die nominale 8s/10s-Länge "wiederherzustellen" (VERIFIZIERT: seg_1 8s→3,6s ist korrekt). Beschnitt codiert mit crf 18 neu, sodass Bildrate/Header sauber bleiben. FALLSTRICK (meistens behoben 12. August):snapgen_veo_clienthinterlässt<ausgabe>.raw.mp4(nativ 720p) insegments/–stitch_videos.pyschließt jetzt*.raw.mp4von seinem Glob aus, sodass keine 720p-Einfügung mehr in der Mitte passieren kann; dennoch gute Hygiene, Raws nachjob-dir/raw_720p/zu verschieben. Hinweis:--out final.mp4wird relativ zum ARBEITSVERZEICHNIS des SKRIPTS aufgelöst, nicht zum Auftragsordner – geben Sie einen absoluten Pfad an oder wechseln Sie zuerst mitcdin den Auftragsordner (ein relatives--outmit cwd=google-flow-automation schreibt final.mp4 stillschweigend dorthin).- GENERATE_PROMPT lebt in
telegram_bot.py(einzige Quelle der Wahrheit;.format()-Platzhalter: config/mode/caption/model/style/count/product_folder/chat_id/duration – KEINE unescaped geschweiften Klammern in der Vorlage, wörtliche JSON-Klammern bringen.format()zum Absturz). Starten Sie den Bot nach der Bearbeitung neu. 15. August: der /generate-Assistent unterstützt jetzt BEIDE Modi (regular endet nicht mehr in einer Sackgasse) – der normale Modus fragt "Untertitel hinzufügen?" (Regular/Normal) und gibt dann Stil-Optionen (CCC/Budol/POV/IRR/TV Commercial) → Veo/Omni-Auswahl → Anzahl 1-4. /generate-Regel im Normal-Modus: das endgültige Video wird NUR per Telegram gesendet – KEINE Hochlade-Schaltfläche, keine Planung, kein TikTok Studio-Berühren; die Bestellung bleibt strikt lokal.
Hochladen (Route TikTok Studio Web) – VERIFIZIERT ENDE-ZU-ENDE 6. August 2026
Automatisierter Upload-Fluss, gemappt und mit Chrome 151 nativ (GOOGLE FLOW-Profil) getestet – siehe references/tiktok-studio-upload.md für den vollständigen Klickpfad. Das Upload-Skript (tiktok_studio_upload.py) akzeptiert --file <video.mp4> --prompt <prompt.json> [--creative <png>] [--schedule 6:00|18:00]. Die Verwendung des Upload-Bots (upload_bot.py oder telegram_bot.py mit dem */upload-Befehl) kennzeichnet zuvor generierte Videos – der /upload-Befehl listet LOCAL Videos auf, die noch NIE hochgeladen wurden (überprüft durch das Lesen von generated_video.json), und schickt sie mit dem Standardplan. Die Planung erfolgt zum NÄCHSTEN FREIEN 6:00/18:00-Slot (KI-generierte Inhalte müssen gemäß TikTok-Anforderungen durch einen Menschen überprüft werden; der Upload stellt sie zurück). Der Inter-Upload-Abstand beträgt IMMER 10 Minuten (Skript delay-between-uploads=600 – neue Tabs, die sofort ausgeführt werden, erhalten das POST-Intervall, KEINE globale Rate-Limitierung). Der Botschafter erhält eine Gruppenbenachrichtigung nach jedem Upload (Bot sendet an die CHAT_ID des Benutzers – telegram_bot.py parst die Ausgabe auf PRODUCT + STATUS und pingt). Affiliate-Produkt anhängen: nach dem Upload und vor dem Absenden der Veröffentlichung in TikTok Studio Web → Produkt auswählen (über das Such-/Dropdown-Widget) → tiktok_studio_upload.py hat die zugehörige Code-Logik; diese kann fehlschlagen, wenn die Produktname nicht eindeutig ist (Liste der erwarteten SKUs/Produktnamen in shop_products.json; wenn sie nicht gefunden wird, gibt das Skript einen Fehler aus und bleibt stehen, und der Bot benachrichtigt "Produkt nicht gefunden – Anhang fehlgeschlagen"). FALLSTRICKE:
- Doppel-Upload: der Upload-Bot überwacht
~/tiktok-jobs/auf NEUE ungesehene Video-Ordner. Wenn Sie einen Ordner manuell hineinkopieren, den der Bot bereits gesehen hat, lädt er ihn erneut hoch (echt geschehen). Heilen:tiktok_studio_upload.py --skip-dupes(liestgenerated_video.json → uploaded=yes). - Sitzungs-Cookie läuft nach ~24-48h ab – das Skript erkennt einen 401/Weiterleitung und fordert ein erneutes Anmelden. Laden Sie
cookies.jsonim Projektordner neu. - Windows-Zeit vs. Planzeit:
schedule_timemuss in einer der beiden Formate sein – das Skript validiert vor dem POST. Wenn ein Video direkt veröffentlicht werden soll (KEIN geplanter Upload), lassen Sie--scheduleweg.
Route B – Flow API (Legacy – noch funktionsfähig, aber nicht mehr primär)
flow_batch.py (/home/john/google-flow-automation/flow_batch.py) generiert Omni-Flash-Videos über die Google Flow CDP-basierte Schnittstelle. Verwendung: timeout 600 python3 /home/john/google-flow-automation/flow_batch.py <job-verz> [--no-upscale]. Das Skript öffnet einen CDP-Tab, navigiert zum Flow-Editor, lädt Produktbilder hoch, füllt das Prompt-Feld aus, generiert, lädt die Ausgabe herunter und skaliert sie hoch. 27. August Abnehm-Workaround: Flow erlaubt jetzt "Sammlungen" – anstatt flow_batch.py direkt zu verwenden, folgen Sie dem Abnehm-Pfad: Flow-Startseite → Sammlungen → Tägliche Gewohnheiten (neu) → Bot-generiertes Prompt einfügen → generieren → Bibliothek → herunterladen. Der Workaround existiert, weil Flow eine Engine-freie Stufe hinzugefügt hat, die flow_batch.py nicht handhabt (siehe references/flow-collection-automation.md).
Status & Qualitätssicherung (Überwachung / Fehlerbehandlung)
Alle Meldungen erfolgen über eine Telegram-Gruppe. Der Bot protokolliert: JOB_START, JOB_END, JOB_ERROR mit Timestamp + Dauer + Produktname. Fallback-Kaskade (Pipelineskripte geben Exit-Codes zurück): exit 0 → OK; exit 1 → fataler Fehler (benachrichtigt „Automatisierung fehlgeschlagen – manuelles Eingreifen erforderlich"); exit 2 → vorübergehendes Problem (wiederholt 3x, dann benachrichtigt). Dead-Letter-Queue: nach 3 Fehlschlägen wird die Job-Datei nach ~/tiktok-jobs/dead-letter/ verschoben, und der Bot benachrichtigt „Auftrag in DLQ – überprüfen Sie den Ordner". Kontrollpunkte für die Qualitätssicherung (Mensch im Kreislauf): Jeder generierte Job erstellt eine Vorschau und sendet sie an den Benutzer vor dem Hochladen – der Benutzer klickt auf Ja/Nein (Inline-Tastatur). Das Nein-Löschen des Videos + Benachrichtigung „Video verworfen – senden Sie /generate erneut". Verifizierungsprotokoll am 6. August 2026: Alle Flüsse getestet: SnapGen (primär), Flow (Legacy), CDP-Fallback – alle erzeugen gültige 9:16 1080p MP4s mit Voice-Over und Produktbild-overlays.
Fehlerbehebung (spezifisch für die Umgebung)
flow_frame_gen.pyschlägt fehl: leere Bibliothek/keine Bilder – prüfen, ob dieproduct_image.png-Datei im Job-Ordner existiert; NANO BANANA 2 verlangt, dasslibrary-viewbereits geöffnet ist (falls nicht, müssen Sie zuerstlibrary_opener.py --openausführen).- SnapGen 402 „Credits erschöpft" – Johns PP0001-Konto wird manuell aufgeladen; prüfen Sie
https://api.snapgen.ai/user/billing; der Bot meldet „SnapGen-Credits niedrig – bitten Sie John um Wiederaufladung". - Wiederaufnahme nach Absturz erzeugt doppelte Segmente:
segments/enthältseg_1.mp4+seg_1.raw.mp4– der Stitch-Glob schließt.rawjetzt aus, aber falls Sie alte Jobs haben, löschen Sie vor dem Ausführen vonstitch_videos.pyalle.raw.mp4-Dateien aus dem Segment-Ordner. - Teilweise heruntergeladene mp4-Dateien: die Wiederaufnahme-Logik prüft auf
<ausgabe>.json(nicht mp4), sodass eine nicht abgeschlossene mp4 den Wiederaufnahme-Check nicht besteht – kein Problem. Wenn Sie die Generierung manuell mit einer beschädigten mp4 wiederholen möchten, löschen Sie zuerst die.uuid-Datei und die.json-Datei des Segments. - Zeitüberschreitung bei
trim_dead_air.pybei sehr langen Clips (>60s): Der Whsiper-Transkriptionsdurchgang benötigt ~10s pro 10s Video auf CPU; für lange Aufnahmen (z. B. zusammengefügte 40s+ final.mp4) führen Sie den Trim als separaten Schritt aus:timeout 600 ~/.venvs/crypto/bin/python ~/video-tools/trim_dead_air.py final.mp4 -o final_trimmed.mp4. - TikTok Studio-Upload bleibt bei "Validierung..." hängen: das passiert, wenn das Video ein ungewöhnliches AR/Auflösungsformat hat (z. B. 720x1280 ungerade). Erzwingen Sie die ffmpeg-Neucodierung auf 1080x1920 über
tiktok_studio_upload.py --force-transcode(entfernt Metadaten, setzt SAR auf 1:1). - Profi-Tipp: Verwenden Sie
/home/john/google-flow-automation/auto_fix.py <job-dir>zur automatischen Korrektur häufiger Probleme (fehlendeprompt.json, falscheproduct_image.png-Größe, Abweichungen imrotation_state.json). Dieses Skript ist NUR für die manuelle Fehlerbehebung gedacht und läuft NICHT automatisch.
Umgebungsvariablen
SNAPGEN_API_KEY– Pflicht. In.envin/home/john/google-flow-automation/.env.GROQ_API_KEY– Erforderlich für Untertitel (groq_transcribe.py). Optional; wenn nicht gesetzt, werden Untertitel übersprungen.TIKTOK_SESSION_COOKIES– Pfad zur TikTok Studiocookies.json(Standard:~/.config/tiktok-studio-cookies.json).TELEGRAM_BOT_TOKEN+TELEGRAM_CHAT_ID– Erforderlich für Benachrichtigungen und interaktive Befehle.PROJECT_ROOT– Setzen Sie/home/john/google-flow-automation(Standard), es sei denn, Sie spiegeln.
Wichtige Verzeichnisse
/home/john/google-flow-automation/– Stammverzeichnis der Pipeline./home/john/google-flow-automation/job_orders/– Auftrags-JSONs (generate_*.json)./home/john/google-flow-automation/references/– Dokumentation (tiktok-studio-upload.md,snapgen-api.md,flow-collection-automation.md)./home/john/tiktok-jobs/– Ausgabeverzeichnis (jedesauto-*-Verzeichnis enthältproduct_image.png,prompt.json,segments/,final.mp4,generated_video.json).~/video-tools/groq_transcribe.py– Transkriptions-Adapter (Teil der Caption-Pipeline)./home/john/video-tools/deepcaption/– Build-System für Untertitel (build_captions.py, Vorlagen).
Lizenz & Hinweis
Privates Automatisierungsskript – nicht für den Weitervertrieb bestimmt. Von John für seine UGC/TikTok-Affiliate-Operation geschrieben. Fragen? Fragen Sie John.
Letzte Aktualisierung: 28. Oktober 2026