Was macht phone-portal-reel?
Überblick
Ein 9-Sekunden-9:16-Produktad, aufgenommen in einem einzigen, fixierten Stativrahmen, in drei Phasen:
- Portal-Drops (ca. 4,3 s). Eine Hand hält ein Telefon. Eine zweite Hand wischt darüber, und jeder Wisch lässt ein Produkt aus dem Bildschirm auf ein darunterliegendes Regal fallen, das auf den Beat landet. Das Hauptprodukt fällt zuletzt, nach einem toten Stopp in der Musik.
- Stop-Motion-Shuffle (ca. 2,7 s). Ein harter Schnitt entfernt Hände und Telefon. Das Produkt dreht sich durch die gesamte Linie, ein Standbild pro 16tel-Note, auf den Vieren gehalten.
- Logo-Hold (ca. 2 s). Das Wortmarke blendet über 6 bis 8 Frames ein und bleibt stehen. Nur Musik, keine Stimme.
Es gibt kein Kameramaterial. Ein generiertes Foto wird in Ebenen geschnitten (Set, Telefon und haltende Hand, wischende Hand) und im Code animiert. Das Produkt ist ein echtes 3D-Modell, das von derselben Kamera im Telefon und im Raum gerendert wird, sodass es als ein Objekt die Glasscheibe durchquert.
Der Anspruch: Es muss wie eine echte Aufnahme wirken. Jeder Fehler, den wir hatten, war ein Kontinuitätsbruch, den jemand in einem einzigen Frame gesehen hat. Betrachten Sie in voller Größe jeden Kontaktmoment auf der ausgelieferten Datei.
Benötigte Ressourcen
| Benötigt | Für |
|---|---|
OPENAI_API_KEY | gpt-image-2 für das Plate und das Master; gpt-image-1.5 mit input_fidelity: high für Bearbeitungen, die das Foto erhalten müssen |
ELEVENLABS_API_KEY | Den Musikbett (music_v2_5) und Foley |
HyperFrames CLI (npx hyperframes), three.js r169 | Die Frame-Engine und das Rendering |
ffmpeg; Python 3 mit numpy opencv-python-headless pillow openai | Die Skripte |
Die Skripte lesen Schlüssel aus der Umgebung oder aus einer .env-Datei im Arbeitsordner oder einem darüber liegenden Ordner. Sie geben sie niemals aus. Melden Sie, was jeder Durchlauf verbraucht: OpenAI-Dollar (die Skripte protokollieren einen Schätzwert) und ElevenLabs-Credits.
Wenn jemand eine echte Hand filmen kann, die auf einem Stativ ein Telefon wischt, verwenden Sie dieses Filmmaterial für die Hand. Es ist der am schwierigsten zu fälschende Teil.
Tore: Für jedes eine Freigabe einholen
- Brief und Beat-Sheet. Die Marke, 4 bis 6 Produkte (das Hauptprodukt zuletzt, in der Farbe, die das Set ergänzt), das Set und ein Tempo, bei dem ein Beat eine ganze Anzahl von Frames ergibt. Bei 30 fps ergeben 112,5 BPM 16 Frames, 120 BPM 15 und 90 BPM 20. Setzen Sie jede Landung auf das Musikraster, auf einen Beat oder einen halben Beat, niemals dazwischen. Für die Anzahl der Drops siehe
references/build.md, Abschnitt 1. - Look. Das Plate, das Master (Hände und Telefon), ein erster Render des 3D-Produkts in der angepassten Kamera und die Endkarte in 3 Schriftpaarungen, alles auf einem Blatt.
- Bewegungstest. Ein Wisch und ein Drop, in Auslieferungsqualität gerendert und Frame für Frame überprüft. Die meisten Fehler zeigen sich hier.
- Build, dann Sound, dann das Finale.
Build
Folgen Sie references/build.md. Es enthält jeden Schritt mit den Zahlen, die funktioniert haben. In der Reihenfolge:
- Generieren Sie ein Plate (das leere Set), dann ein Master: eine Bearbeitung des Plates, die beide Hände und ein leeres Telefon hinzufügt. Das Master ist der Frame. Jedes saubere Plate wird daraus erstellt.
- Schneiden Sie Ebenen aus dem Master und messen Sie die Bildschirmecken, die untere Kante des Bildschirms, die Fingerspitze und das Handgelenk.
- Passen Sie die 3D-Kamera an die Kanten des Regals an.
- Bauen Sie die Engine. Kopieren Sie
example/studio/(der Referenzbuild: eine Teemarke, fünf Schachteln) und messen Sie seine Konstanten für Ihr Plate neu. Es enthält nur Code: Bringen Sie Ihre eigenen Bilder, Schriftarten, Etikettenkunst und three.js-Dateien mit. Wenn das Produkt kein Karton ist (ein Glas, eine Flasche, eine Dose, alles aus Glas), lesen Sie zuerst „Andere Produkte“ inbuild.md. - Machen Sie zuerst die Musik und messen Sie ihre Beats. Verriegeln Sie dann die Landungen mit dem Raster, fügen Sie Foley hinzu und mischen Sie.
- Rendern Sie, dann führen Sie die untenstehenden Prüfungen durch.
Regeln, die die Illusion gebrochen haben
| Was sich zeigte | Lösung |
|---|---|
| Das Produkt erscheint einige Frames zu spät unter dem Telefon | Es ist ein 3D-Objekt auf beiden Seiten des Glases. Lösen Sie jeden Wisch rückwärts von seinem Landungsframe: Ab dem Frame, an dem sein tiefster Punkt die Kante erreicht, fällt es mit der Scrolling-Geschwindigkeit unter Schwerkraft |
| Das Produkt fällt hinter die Hand | Zeichnen Sie es unterhalb der unteren Bildschirmkante vor der Blende und den Fingern |
| Es hängt einige Frames unter dem Telefon | Die Schwerkraft übernimmt an der Kante. Lassen Sie es nicht der Gleitbewegung der Seite folgen |
| Der Wisch wirkt wie ein gleitendes Foto | Flicken Sie aus dem Handgelenk und halten Sie den Unterarm starr. Lösen Sie den Handgelenkwinkel so, dass sich die Fingerspitze mit der Seite bewegt. Keine zwei Wische sind gleich |
| Der Frame sieht aus wie ein Standbild | Das gehaltene Telefon driftet 1,5 bis 2 px und gibt bei jedem Druck nach. Die Wand bewegt sich nie |
| Eine dunkle Linie bewegt sich durch das Telefon | Keine Seitenteiler im Feed. Halten Sie Geisterbilder niedrig |
| Eine Uhr oder ein Schmuckstück rutscht am Handgelenk | Bitten Sie um ein bloßes Handgelenk im Master. Falls etwas hineinkommt, maskieren Sie alles und entfernen Sie es mit scripts/blend-edit.py |
| Ein Schnitt wird zu einer Überblendung | Entscheiden Sie jeden Schnitt, Wechsel und Standbild auf dem gesamten Frame, niemals innerhalb der Shutter-Samples |
| Das Etikett druckt sich als Kamm von Kopien | Verwenden Sie 48 Unterframes, während das Produkt fällt, und 10 sonst, mit einem 0,38-Frame-Shutter |
| Eine generierte Bearbeitung bewegte Dinge außerhalb ihrer Maske | Maskierte Bearbeitungen werden nicht respektiert. Registrieren Sie die Bearbeitung und übernehmen Sie sie nur innerhalb der Maske |
| Ein dumpfer Schlag landet vor der Schachtel | Schneiden Sie jeden Take auf 4 ms vor seinem lautesten Angriff zurück und richten Sie ihn auf diesen Angriff aus |
Die vollständige Liste mit Ursachen finden Sie in references/lessons.md.
Vor dem Versand prüfen
- Vollformat-Ausschnitte der ausgelieferten Datei an jedem Kontaktmoment: erster Frame jedes Wischs, Produkt beim Überqueren der Kante, jede Landung, der Schnitt und der Arm beim Verlassen des Frames.
python3 scripts/sync-sheet.py final.mp4 --audio sound/stems/sfx.wav: Jeder Treffer sitzt auf seinem markierten Frame.bash scripts/check-final.sh final.mp4 1080x1920: -14 LUFS ±1 und ein True-Peak bei oder unter -1 dBTP.
Skripte
| Skript | Aufgabe |
|---|---|
scripts/openai-image.py OUT.png "prompt" [--edit IN.png --mask M.png --fidelity high] | Generiert oder bearbeitet ein Bild und protokolliert Tokens und geschätzte Kosten |
scripts/blend-edit.py crop / blend | Bereitet eine maskierte Bearbeitung einer Region vor, registriert das Ergebnis und übernimmt es nur innerhalb der Maske |
scripts/elevenlabs.py spec.json OUTDIR | Generiert das Musikbett und die Effekte aus einer Spezifikation, cached sie und protokolliert die verbrauchten Credits |
scripts/beats.py bed.mp3 | Findet das Tempo des Bettes, sein Beat-Raster und seinen ersten Downbeat |
scripts/sync-sheet.py VIDEO --audio sfx.wav oder --cues cues.json | Zeigt die fünf Frames um jeden Soundtreffer auf einem Blatt |
bash scripts/check-final.sh VIDEO [WxH] | Überprüft Größe, fps, Dauer, Lautstärke und True-Peak |
Führen Sie jedes mit --help für seine Optionen aus. example/README.md zeigt die Referenzbuild-Struktur.