Was macht Geschmacksanwendung?
Die zweite Hälfte der Pipeline. taste-distillation misst Referenzen in ein Stilpaket; diese Fähigkeit generiert gegen dieses Paket und schneidet das Ergebnis.
Ausführungs- und Liefervertrag
Die ursprüngliche Implementierung befindet sich hier in scripts/; kein separates ito-video-Checkout ist erforderlich. Installieren Sie scripts/requirements.txt für die lokale Verarbeitung. Installieren Sie scripts/requirements-live.txt nur für die Ausführung durch den Anbieter. Live-Uploads, -Einreichungen und -Downloads erfordern zusätzlich zu den Anmeldeinformationen explizit TASTE_FORGE_ALLOW_LIVE=1; setzen Sie es nur für den autorisierten Lauf des Benutzers. --dry-run bleibt anmeldeinformationsfrei und erzeugt beschriftete Platzhalter. Ein mehrdeutiger Anbieter-Timeouts wird nicht als neuer kostenpflichtiger Auftrag wiederholt. Überprüfen Sie die Anbieteranfrage, bevor Sie entscheiden, ob eine weitere Einreichung gerechtfertigt ist.
Verwenden Sie vorhandene abgeschlossene Takes ohne Anbieteraufrufe:
python scripts/pipeline.py --genre example --root stylepacks \
--takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
--out out/review-v1.mp4
--duration ist ein Best-Effort-Kadenzziel, keine exakte Laufzeit. Vollständige Aufnahmen können einen kürzeren oder längeren Schnitt erzeugen; der Assembler dupliziert keine Clips oder fügt Auffüllungen hinzu, um das Ziel zu erreichen. Das Ausgabemanifest behält die tatsächliche duration bei und fügt duration_contract mit angeforderten und tatsächlichen Sekunden, Unterschreitung, Überschreitung und der cadence_target-Richtlinie hinzu. Unterschiede von mindestens einem Ausgabeframe werden explizit gewarnt. Es wird kein Exakt-Dauer-Modus bereitgestellt; wenn eine exakte Laufzeit erforderlich ist, überprüfen Sie die Quittung und überarbeiten oder lehnen Sie den Schnitt vor der Auslieferung ab.
Die Pipeline behält die bewerteten Shot-Dateien jedes Laufs, da die bearbeitbare FCPXML und EDL darauf verweisen. Sie verweigert Ausgabekollisionen und meldet Timeline-Exportfehler. Ein abgeschlossenes Rendering ist kein gespeichertes Editorprojekt oder eine kreative Freigabe. Bewahren Sie Quell-Assets und versionierte Projekt-Checkpoints vor und nach Live-Bearbeitungen auf; zeichnen Sie den gespeicherten Pfad und Hash getrennt von der In-Memory-Timeline-Quittung auf.
Klonbereite Fal-Graphen und ihr Offline-Eingabe-Compiler sind in workflows/README.md dokumentiert. Kompilieren Sie das Briefing und die Stilrichtung vor der Einreichung; gehen Sie nicht davon aus, dass ein nicht verbundenes Schemafeld einen Modell-Prompt beeinflusst. Validieren Sie aktuelle Endpunktfelder gegen den tatsächlichen Anbieter vor einem kostenpflichtigen Lauf.
Für Blender verwenden Sie die vollständige texturierte Quell-GLB; Retopologie ist ein separat benanntes Derivat und ersetzt niemals diese Quelle. blender_prop.py unterstützt explizit --width 1920 --height 1080 --fps 30 --receipt receipt.json und bewahrt vom Paket abgeleitete Randbeleuchtung und Materialtexturen. Das Speichern einer Szene unterscheidet sich vom Rendern; überprüfen Sie den Zustand der Quittung und die gepackten Bilder.
Für Resolve-Overlays verwenden Sie taste.resolve.apply_placements mit injizierten Objekten aus einem explizit ausgewählten, versionierten Ziel. Setzen Sie source_end_mode auf die auf diesem Host verifizierte Konvention. Gehen Sie nicht von einem inklusiven Quellende über Resolve-Versionen hinweg aus. Der Adapter ordnet überlappende Effekte oberhalb von konservierten Spuren an und überprüft jede Platzierung sofort und erneut nach allen Anhängen. Zusammengesetzte Ganzzahlen müssen mit der installierten API übereinstimmen; für den verifizierten Studio 21-Host ist Bildschirm 5, nicht die falsche 22 des historischen Builders. Die Quittung beweist nur die In-Memory-Platzierung. Speichern Sie das Projekt, überprüfen Sie seinen Checkpoint, dann inspizieren Sie die exakte gerenderte Ausgabe, bevor Sie die Lieferung melden.
Wann zu aktivieren
- "Ein Video in diesem Stil erstellen" / "Das Paket anwenden" / "Dieses Filmmaterial ergänzen"
- Zusammensetzen generierter Clips zu etwas mit echtem Schnittrhythmus
- 3D-Props aus einem Look prägen und zurück ins Video bringen
- Überprüfen, ob ein fertiges Stück tatsächlich seiner Referenz entspricht
Arbeitsteilung
Das Modell liefert Inhalt, Bewegung, Bildausschnitt und Beleuchtungsstruktur. Das Paket liefert Farbe und Rhythmus. Dies ist gemessen, nicht stilistische Präferenz – siehe taste-distillation für die Zahlen. Praktische Konsequenzen:
- Der Generierungs-Prompt enthält keine Farbsprache. Fügen Sie hinzu: "Farbe: Keine. Neutral rendern. Die Grading wird nachträglich angewendet."
- Halten Sie zwei separate Flags:
--brief(was PASSIERT: Subjekt, Aktion, Ort) und--style-steer(wie es AUSSIEHT). Das Zusammenführen führt dazu, dass Stilwörter in die Szene ("Türkis" wird zu einem türkisen Objekt) und Subjektwörter in die Grading durchsickern. - Das Modell reagiert weitaus besser auf lokale, überprüfbare Regeln als auf globale. "Hintergründe rein schwarz und unbeleuchtet; Subjekte blasen in Richtung Weiß" funktioniert; "extremer Kontrast" nicht.
TAKES generieren, keine Shots
Die naheliegende Lesart von "den Rhythmus treffen" ist eine Generation pro Shot. Sie ist wirtschaftlich absurd. Eine Referenz mit durchschnittlich 0,78s/Shot bei einem Endpunkt mit einer 4-Sekunden-Untergrenze macht aus einem 10s-Stück 12 Aufrufe, 48 generierte Sekunden für 10 genutzte (21% Effizienz) und zwölf nicht zusammenhängende Clips, die zu etwas zusammengenäht werden, das als kontinuierlich gelesen werden soll.
Editoren drehen einen längeren Take und schneiden darin. Shots in ~5s-Takes gruppieren: 3 Aufrufe, 13 generierte Sekunden, 77% Effizienz, und aufeinanderfolgende Shots, die tatsächlich zueinander gehören, weil sie aus derselben Generation stammen.
Sagen Sie dem Modell, welche Form Sie wollen, oder es rendert einen langsamen, festgefahrenen Push und sechs Schnitte darin lesen sich wie ein Stottern:
"Gefilmt als EIN kontinuierlicher Take ohne harte Schnitte darin. Es wird in 6 Stücke von ungefähr 0,8s im Schnitt geschnitten, also müssen Bildausschnitt, Subjekt und Licht sich ständig ändern – jedes 0,8s-Fenster muss als eigener Shot für sich stehen können."
Schnittregeln
- Neu encodieren, niemals Stream-Copy. Stream-Copy schneidet nur an Keyframes, was bei 0,78s die Schusslänge jede Grenze auf das nächste GOP rundet – und damit genau das zerstört, was die Pipeline bewahren soll.
- Beim Ergänzen vorhandenen Filmmaterials dessen eigene Shot-Grenzen verwenden. Das Zerschneiden eines Basisvideos in zusammenhängende Stücke und deren Abspielen in Reihenfolge setzt einfach das Original wieder zusammen: Jeder "Schnitt" landet in der Mitte eines Shots und ist unsichtbar. Gemessen ergab eine 20-Shot-Montage nur 12 erkannte Schnitte. Erkennen Sie echte Grenzen und nehmen Sie jeden N-ten, so dass aufeinanderfolgende Auswahlen garantiert diskontinuierlich sind. Das verbesserte eine Schnittmessung von 1,29s auf 0,83s bei einem 0,78s-Ziel.
- Schusslängen aus der Verteilung der Referenz abtasten, nicht aus ihrem Mittelwert, damit der Schnitt Rhythmusvarianz erbt, anstatt auf gleichmäßige Clips zu glätten.
Grading-Regeln
- Direkte Messung schlägt eine eingebrannte LUT, wenn Sie den Clip haben: Messen Sie ihn, passen Sie seine L*-CDF an, wenden Sie Zonen-Chroma an.
grade_clip_directerreichte MAE 1,58 und Kontrast 34,0 gegenüber 34,7. - Verankern, nicht CDF-matching, wenn das Histogramm des Clips anders ist als das der Referenz. Das Erzwingen eines zu 68% schwarzen generierten Clips auf ein bewegtes Referenzhistogramm hob den gesamten Hintergrund aus dem Schwarz: Die Hintergrundbewahrung fiel auf 26,0% (CDF) gegenüber 69,0% (Anker), während MAE und Kontrast immer noch ausgezeichnet aussahen. Standardmäßig auf verankerten Ton.
- Batch-Größe ist wichtig. Das Grading von 48 Frames auf einmal tötete den Prozess durch OOM; 6 ist sicher.
Wiederhergestelltes fal-Plattformverhalten
Diese Beobachtungen und Endpunkt-Beispiele stammen aus dem wiederhergestellten Workflow. Überprüfen Sie aktuelle Endpunkt-Metadaten erneut; sie sind keine Garantien für jede zukünftige Anbieterversion. Die gebündelten Graphvorlagen zeichnen die separat verifizierten Workflow-Eingaben auf, einschließlich expliziter generierter Audio-Steuerung.
Diese kosten echte Zeit zum Entdecken. Überprüfen Sie sie, bevor Sie einen Graphen entwerfen.
| Grenze | Detail |
|---|---|
| Überhaupt kein 3D-Renderer | fal hat image-to-3d, text-to-3d, 3d-to-3d und nichts anderes. Jeder 3d-to-3d-Endpunkt gibt ein weiteres Mesh aus. Es gibt keine Kategorie 3d-to-image/3d-to-video, daher kann eine gemünzte GLB nicht wieder in einen fal-Videographen eintreten. Rendern Sie lokal, dann verwenden Sie fal-ai/ffmpeg-api/images-to-video. |
| compose kann nicht überlagern | fal-ai/ffmpeg-api/compose lehnt eine zweite Spur mit "Multiple video tracks are not supported" ab – und es zählt eine image-Spur als Videospur. Es sequenziert nur eine Videospur. Komponieren Sie lokal mit ffmpeg. |
| compose-Keyframes sind Millisekunden | Nichts in der Antwort sagt das. Ein in Sekunden eingereichter Lauf wird akzeptiert und gibt ein Video zurück, das 1000x zu kurz ist. |
| extract-frame bietet nur first/middle/last | Kein beliebiger Zeitstempel. Verwenden Sie die drei als drei separate Konditionierungsbilder. |
| Keine Schleifen, keine String-Konkatenation im DAG | Die Aufteilung pro Shot muss Knoten für Knoten erstellt oder lokal gehalten werden. |
| Kling 3.0 hat kein Referenz-zu-Video | Die v3-Linie ist nur Text/Bild/Bewegungssteuerung; Referenz-zu-Video lebt auf der o3-Linie: fal-ai/kling-video/o3/pro/reference-to-video. |
| Präfixe sind nicht einheitlich | bytedance/*, tripo3d/*, meshy/*, minimax/*, openai/* haben kein fal-ai/-Präfix. kling-video, veo3.1, flux-*, hunyuan-3d, ffmpeg-api haben es. |
Endpunktauswahl
| Slot | Beste | Wertalternative |
|---|---|---|
| Referenz→Video | bytedance/seedance-2.5/reference-to-video (~$0,473/s @720p) | fal-ai/kling-video/o3/pro/reference-to-video (~$0,112/s) |
| Bild→3D | fal-ai/hunyuan-3d/v3.1/pro/image-to-3d ($0,375, bis zu 8 Ansichten) | tripo3d/h3.1/image-to-3d ($0,20) |
| Text→3D | fal-ai/hunyuan-3d/v3.1/pro/text-to-3d | tripo3d/h3.1/text-to-3d |
| Retopologie | fal-ai/hunyuan-3d/v3.1/smart-topology ($0,75) | tripo3d/tripo/remesh (~75x günstiger) |
| Teiltrennung | fal-ai/hunyuan-3d/v3.1/part (nur FBX) | tripo3d/tripo/segment |
| Text→Bild | fal-ai/nano-banana-pro ($0,15 pauschal) | fal-ai/flux-2-pro ($0,03/MP) |
Seedance ist ~4x Kling o3's Preis für die gleichen 5 Sekunden. Es verdient das bei Multi-Referenz-Treue (bis zu 50 gemischte Bild/Video/Audio-Referenzen) und verdient es nicht, wenn es auf einem einzelnen Standbild konditioniert.
Modell-IDs und Preise ändern sich. Überprüfen Sie fal.ai/models, bevor Sie einen von ihnen versprechen.
Der 3D-Zweig
python mint3d.py --genre <name> --from-stills 4 --retopo --render
python mint3d.py --genre <name> --prompt "ein rissiger Chrom-Visier" --render
- Generieren Sie zuerst eine saubere Platte; heben Sie nicht von Referenz-Standbildern ab. Die angegebene Eingabeanforderung des Endpunkts ist einfacher Hintergrund, einzelnes Objekt, Objekt >50% des Bildausschnitts. Referenzaufnahmen sind das Gegenteil davon – Collagen, Weitwinkelaufnahmen, mehrere Subjekte, eingebrannte Grafiken – und sie erzeugen skulptiertes Rauschen. Text → Einzelobjekt-Platte → Mesh kostet ~$0,15 extra und ist der Unterschied zwischen einem brauchbaren Mesh und einem verworfenen.
- Multi-View ist nach Winkeln benannte Felder, keine Liste.
input_image_url(vorne, erforderlich), dannback_image_url,left_image_url,right_image_url,left_front_image_url,right_front_image_url,top_image_url,bottom_image_url. Es gibt keininput_image_urlsund keinmulti_view-Flag – das Erfinden davon degradiert jede Münze auf Single-View, während es funktioniert. Ein falsches Winkel-Label ist schlimmer als das Weglassen der Ansicht, weil das Modell ihm vertraut. - Adressieren Sie die GLB per Schlüssel, nicht nach Position. Die Antwort trägt ein
thumbnail-PNG und einenmodel_urls-Block nebenmodel_glb; das Nehmen der ersten URL funktioniert nur, bis die Schlüssel neu angeordnet werden, und ein Vorschau-PNG wird problemlos heruntergeladen – nichts schlägt fehl, bis Blender sich weigert, es zu öffnen. - Fordern Sie PBR-Karten an. Ohne sie leuchtet das Mesh wie bemalte Pappe.
- Retopologisieren Sie, wenn jemand es bearbeiten oder riggen wird. Generierte Meshes sind dicht und chaotisch.
- Rendern Sie lokal, um den Kreislauf zu schließen. Sobald ein Drehteller Frames ist, ist es Filmmaterial, und jede nachgelagerte Stufe verarbeitet bereits Filmmaterial – Graden, Schneiden, als Element einblenden oder als Konditionierungsreferenz hochladen. Verwenden Sie Blender, wenn eine Binärdatei im PATH ist; behalten Sie einen leichtgewichtigen Software-Rasterizer als Standard, weil ein kopfloser GL-Kontext das mit Abstand häufigste ist, was in einem Container fehlt, und ein Renderer, der nur auf einer Workstation funktioniert, ist kein Teil einer Pipeline.
Überprüfen, dann glauben
Jede andere Stufe behauptet ein Ergebnis. Überprüfen Sie es, und überprüfen Sie die Verteilungsform, nicht nur Momente:
background– Anteil des Frames unter L*10 im Vergleich zur Zahl des Pakets. Vergleichen Sie mit der Referenz, nicht mit dem Quellclip: Eine generierte Quelle mit 68% Schwarz ist schwärzer als jede Referenz in einem 24–55% Band, also verlangt "die Schwarztöne der Quelle bewahren" das Falsche und entschuldigt gleichermaßen ein angehobenes Grading.chroma_mae– Pro-Zone a*/b*-Fehler, unter Verwendung des Medians (passend dazu, wie die Ziele des Pakets gemessen wurden; ein Mittelwert vergleicht eine schiefe-sensitive Statistik mit einer robusten und meldet eine Definitionsdiskrepanz als Fehler).contrast/black_point/white_pointbanding– Leere L*-Histogramm-Bins zwischen belegten. Das Zählen aller leeren Bins funktioniert nicht: Ein legitimerweise dunkler Clip hat leere Highlight-Bins.cadence– Erkannte mittlere Shotlänge im Vergleich zur Referenz.
Achten Sie auf die Einheitenfalle: OpenCV ändert die Lab-Konvention mit dem dtype. Bei float32 ist L* 0–100 und a*/b* sind vorzeichenbehaftet; bei uint8 ist L* 0–255 und a*/b* sind +128 vorgespannt. Das Mischen meldet Chromafehler in den Hunderten.
Vollständige Kette
python pipeline.py --genre <name> --refs a.mov b.mov \
--brief "was passiert" --duration 12 \
--base-video existing.mp4 --out out/FINAL.mp4
mint → distill → (mint3d) → apply → forge → verify. Stufen 1–3 sind gecached, sodass das Iterieren über Briefs nie etwas neu misst. --dry-run simuliert jeden Netzwerkaufruf: Der Plan, die Prompts, das Spurlayout und das Manifest werden trotzdem getestet.
Anti-Patterns
| Nicht tun | Warum |
|---|---|
| Eine Generation pro Shot | 21% Effizienz, 12 nicht zusammenhängende Clips |
| Farbe in den Prompt setzen | Gemessen nicht funktionierend; drückt weg von der neutralen Basis, die die LUT will |
| Stream-Copy der Schnitte | Nur Keyframe-Grenzen zerstören den Sub-Sekunden-Rhythmus |
| Ein Basisvideo zusammenhängend schneiden | Setzt das Original wieder zusammen; jeder Schnitt unsichtbar |
| Vertrauen, dass compose überlagert | Es kann nicht; es lehnt die zweite Spur ab |
| Sekunden an compose senden | Still 1000x zu kurz |
| Nur auf MAE ausliefern | Fügen Sie die Hintergrundanteil-Prüfung hinzu |
Entliehenes Filmmaterial trägt die UI der Aufnahme-App
Der mit Abstand schlimmste Defekt in einem ausgelieferten Schnitt: Das fertige Video enthielt den Like-Button, den View-Zähler und den Kommentar-Button von jemand anderem, weil die Basis
…
[gekürzt für die Übersetzung]