Communitygithub.com

Atlas-Flythrough

Verwandle Fotos oder generierte Standbilder mit World Labs Atlas in tiefenbewusste Kamerafahrten. Ideal für Durchgänge, Überflüge, Enthüllungen oder Umkreisungen einer bildbasierten Szene.

Was ist Atlas-Flythrough?

Atlas-Flythrough ist ein KI-Agenten-Skill, der es Entwicklern und Kreativprofis ermöglicht, aus einzelnen JPEG-Bildern oder generierten Standbildern kinoreife Kamerafahrten zu erstellen. Der Skill nutzt die World Labs Atlas-Plattform, um Tiefeninformationen aus den Bildern zu extrahieren und damit realistische 3D-Kamerabewegungen (z. B. Durchgänge, Überflüge, Orbitale) ohne manuelle Modellierung zu generieren. Er unterstützt die Eingabe über die World Labs CLI, Python 3 mit NumPy und FFmpeg zur Videoproduktion. Zentral ist die Definition von Keyframes in einer JSON-Datei ("shot.json"), die Kameraposition, Zielpunkt, Brennweite und Banking über die Zeit von 0 bis 1 festlegen. Der Skill ermöglicht es, sowohl einfache laterale Bewegungen als auch komplexe Routen mit Hindernissen (z. B. Durchgänge, Umkehrungen) zu planen. Für anspruchsvolle Manöver bietet der Skill einen Workflow zur Auswahl von Ankerbildern: Durch Vergleichen mehrerer Generierungspässe an denselben Kameraposen können Nutzer die konsistentesten und visuell stimmigsten Einzelbilder auswählen und zu einer finalen Sequenz zusammenfügen. Die Ausgabe kann als MP4-Video mit FFmpeg gerendert werden, optional mit leichtem Geh-Wobbeln ("footfalls") für mehr Realismus. Der Skill ist für Cursor optimiert, aber auch mit Claude Code, Codex und GitHub Copilot kompatibel, wobei die Plattformabhängigkeit von der World Labs CLI und API besteht. Er bietet einen vollständigen Pipeline-Workflow von der Bildvorbereitung über die Tiefenschätzung bis zur finalen Videorenderierung und eignet sich besonders für Architekturvisualisierung, Filmvorschaubilder oder Virtual-Tour-Prototypen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wendlerc/atlas-skills/tree/main/skills/atlas-flythrough

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Atlas-Flythrough?

Wählen Sie aus, was der Betrachter bis zum Ende der Einstellung entdecken soll. Untersuchen Sie das Standbild auf Vordergrundkanten, freien Bewegungsraum und markante Punkte in mehreren Tiefen. Eine versetzte Bewegung an einem Vordergrundobjekt vorbei erleichtert das Lesen der Maßstäbe. Ein Gegenwinkel erfordert Hinweise darauf, was sich hinter dem Motiv befindet.

Verwenden Sie eine authentifizierte World Labs CLI, Python 3 mit NumPy und FFmpeg. Arbeiten Sie in einem frischen Shot-Verzeichnis. Setzen Sie PREP auf den absoluten Pfad von scripts/prepare.py in diesem Skill. Stellen Sie ein JPEG und dessen gewünschte Ausgabemaße bereit.

Die Prompt-Verbesserung ist standardmäßig für Support-Ansichten und den endgültigen Flug aktiviert. Übergeben Sie --no-enhance-prompt an einen Generierungsbefehl in prepare.py, um den Szenen-Prompt für diesen Durchlauf wörtlich zu verwenden.

python3 "$PREP" pose scene.jpg --resolution 1280 720 > pose-request.json
worldlabs tasks run images2PosedRGBD --request pose-request.json --wait --json > pose.json

Schreiben Sie shot.json mit einem Szenen-Prompt und Keyframes. Jede Zeile gibt die normalisierte Zeit, die kamerabezogene XYZ-Verschiebung (rechts, oben, rückwärts), das normalisierte bildbezogene Ziel U und V (von oben links), die Zielentfernung in Quellkamera-Einheiten, den Brennweitenmultiplikator und die Banking in Grad an. Halten Sie die Zeit streng monoton von 0 bis 1 steigend. Untersuchen Sie die geschätzte Tiefe, um Entfernungen im Maßstab der Szene zu wählen. Diese minimale laterale Bewegung ist ein Ausgangspunkt:

{"prompt":"Eine sonnendurchflutete Werkstatt mit einer Werkbank und hohen Fenstern.","knots":[[0,0,0,0,0.5,0.5,2,1,0],[0.5,0.15,0,-0.12,0.53,0.5,2,1,0],[1,0.35,0,-0.25,0.57,0.5,2,1,0]]}
python3 "$PREP" angles shot.json --pose pose.json --supports 6 > supports-request.json
worldlabs tasks run atlasGenerate --request supports-request.json --wait --json > supports.json
worldlabs operations download "$(jq -er '.id' supports.json)" --out supports

Untersuchen Sie die Supports in der Pfadreihenfolge vor der vollständigen Renderung. Verfolgen Sie denselben markanten Punkt über benachbarte Winkel hinweg. Verwenden Sie für eine exakte Übereinstimmung mit der Eingabe in Frame Null die ursprünglich positionierte Kamera dort.

Auswahl von Ankern für eine schwierige Bewegung

Erkunden Sie für einen Durchgang, einen Orbit oder eine Umkehrenthüllung beide Seiten des Hindernisses und die Mitte der Kurve. Verwenden Sie die Developer API für Viewfinder-ähnliche Standbilder. Führen Sie atlasGenerate mit spärlichen targetCameras, returnDepth: true und enhancePrompt: true aus. Eine einfache Bewegung mit guter Abdeckung kann den ersten Support-Durchlauf verwenden.

Wenn der erste Durchlauf inkonsistent ist, generieren Sie Alternativen an denselben Kameraposen. Behalten Sie das spärliche Ziel-Array und den Szenen-Prompt fest. Variieren Sie, welche zuverlässigen früheren positionierten Ansichten Sie in contextFrames bereitstellen, z. B. bevorzugen Sie in einem Durchlauf eingangsseitige Ansichten und in einem anderen ausgangsseitige Ansichten. Behalten Sie alle Kameras und Tiefenkarten in denselben Weltkoordinaten.

Ordnen Sie die Kandidaten mit einer Spalte pro Kamerazeit und einer Zeile pro Durchlauf an. Vergleichen Sie jeden Kandidaten mit den Ansichten auf beiden Seiten. Achten Sie auf eine durchgehende Öffnung, eine stabile Silhouette eines markanten Punkts, plausible Vordergrundtiefe und eine klare Sichtlinie. Untersuchen Sie die Tiefe auf den Oberflächen, an denen die Kamera nahe vorbeikommt. Wählen Sie die Ansichten, die über die Sequenz hinweg übereinstimmen. Überspringen Sie redundante oder fehlerhafte Posen oder erkunden Sie einen fehlenden Winkel, bevor Sie sich auf den dichten Render festlegen.

Um eine gemischte Auswahl zu verwenden, notieren Sie jede Auswahl als nullbasierten Frame-Index in ihrer gespeicherten Operation. Erstellen Sie beispielsweise nach dem Herunterladen und Überprüfen von zwei Sechs-Ansichten-Durchläufen den endgültigen Kontext mit jq. Ersetzen Sie Ihre eigenen Auswahlen. Behalten Sie das RGB-Asset, das Tiefen-Asset und die Kamera aus demselben zurückgegebenen Frame bei.

# Speichern Sie die Auswahlen, damit derselbe Kontext später wiederhergestellt werden kann.
echo '[["A",0],["B",2],["A",4],["B",5]]' > picks.json
jq -n --slurpfile a supports.json --slurpfile b alternate.json --slurpfile picks picks.json '
  {A: $a[0].response.frames, B: $b[0].response.frames} as $runs
  | [$picks[0][] as [$run, $i]
     | ($runs[$run][$i] // error("Unbekannter Anker: \($run)[\($i)]"))
     | {camera, imageAsset: {assetId: .imageAsset.assetId},
        depth: {depthAsset: {assetId: .depth.depthAsset.assetId}}}]
' > anchors.json

Rendern und vergleichen

Bereiten Sie die dichte Kameraanfrage aus den Shot-Keyframes vor.

python3 "$PREP" flight shot.json --pose pose.json --angles supports.json --frames 120 > flight-request.json

Wenn Sie eine gemischte Auswahl kuratiert haben, ersetzen Sie jetzt diese Anker. Dies bewahrt das erste positionierte Bild zusammen mit den ausgewählten Frames.

jq --slurpfile picks anchors.json '.contextFrames = [.contextFrames[0]] + $picks[0]' flight-request.json > selected-request.json
mv selected-request.json flight-request.json

Übermitteln Sie den vollständigen Pfad in einer Operation.

worldlabs tasks run atlasGenerate --request flight-request.json --wait --timeout 1800 --json > flight.json
worldlabs operations download "$(jq -er '.id' flight.json)" --out frames
ffmpeg -framerate 24 -i frames/frames_%03d_image.jpg -c:v libx264 -pix_fmt yuv420p -movflags +faststart shot.mp4

Überprüfen Sie den Start, die größte Basislinie, die Enthüllung und das Ende, sehen Sie sich dann den Clip in voller Geschwindigkeit an. Wenn die Bewegung immer noch wie ein Zoom wirkt, halten Sie das Objektiv fest und vergrößern Sie die seitliche Verschiebung in der Nähe eines unterstützten Vordergrundrands. Gleichen Sie Endposition, Ausrichtung, Brennweite und Geschwindigkeit an, wenn Sie zwei Bewegungen verbinden, die sich durchgehend anfühlen sollen. Optional fügt --footfalls einen subtilen Wobble für Geh-Aufnahmen hinzu.

Beim Vergleichen von Ankersätzen rendern Sie dieselbe dichte Anfrage zweimal und ändern nur contextFrames. Wenn Sie die Flugbahn während der Erkundung überarbeitet haben, führen Sie die alten Anker auf dieser überarbeiteten Flugbahn erneut aus. Verwenden Sie eine eigene Operation pro Anfrage, speichern Sie die Anfragen und überprüfen Sie, dass das Löschen von contextFrames identisches JSON hinterlässt. Zeigen Sie synchronisierte Frames zu denselben Zeitstempeln an, insbesondere an der Kurve oder Enthüllung. Wenn die Prompt-Verbesserung aktiviert ist, überprüfen Sie beide promptUsed-Antworten: Die ausgewählten Bilder können die verbesserte Beschreibung ändern. Für ein Experiment, das auch den effektiven Text konstant hält, verwenden Sie eine Beschreibung mit enhancePrompt: false in beiden Durchläufen. Unabhängige Renderings können trotzdem variieren.

Im Tide-Organ-Strandbeispiel produzierten zwei API-Durchläufe 40 Standbilder in 20 Posen. Siebzehn Auswahlen deckten den Zugang, den gerippten Bogen, die offene Brandung und die Gegenansicht zum Ufer ab. Das Kupferrohr war ein nützlicher markanter Punkt zur Beurteilung der Kontinuität während der Wendung auf See.

Verwandte Skills