Communitygithub.com

Atlas 飛越運鏡

將照片或生成靜態影像轉化為具深度感知的攝影機運鏡,適用於場景導覽、飛越、揭露或環繞運鏡。

Atlas 飛越運鏡 是什麼?

此技能利用 World Labs Atlas 將照片或生成靜態影像轉換為具深度感知的攝影機運鏡,適用於走道導覽、飛越、揭露或環繞運鏡。它支援在 Claude Code 等開發者工具中執行,需要已驗證的 World Labs CLI、Python 3 與 NumPy,以及 FFmpeg。使用者需指定一張 JPEG 影像與目標輸出尺寸,並透過 `prepare.py` 腳本生成姿勢請求。工作流程包含設定場景提示與關鍵影格、產生支援視角、檢視深度一致性,以及最終的全解析度渲染。對於困難的運鏡(例如穿越、環繞或反向揭露),技能提供進階錨點選擇與上下文影格替換方法,以確保時空連貫性。最終輸出為一部影片,可進行視覺檢查與運鏡調整,例如透過增加橫向移動或使用可選的行走晃動效果來改善移動感。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wendlerc/atlas-skills/tree/main/skills/atlas-flythrough

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Atlas 飛越運鏡 是做什麼的?

選擇觀眾在鏡頭結束時應發現的畫面。檢查靜態影像的前景邊緣、可通行的空間,以及不同深度的地標。經過前景物體時的偏移運鏡有助於突顯比例感。反向角度需要主體背後有足夠的視覺證據。

使用已驗證的 World Labs CLI、Python 3 與 NumPy,以及 FFmpeg。在一個全新的拍攝目錄中作業。將 PREP 設定為此技能中 scripts/prepare.py 的絕對路徑。提供一個 JPEG 檔案及其預期的輸出尺寸。

提示增強功能預設啟用,適用於支援視角與最終運鏡。若要在特定生成過程中完全使用場景提示,請在 prepare.py 的生成命令中加入 --no-enhance-prompt。

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

撰寫 shot.json,包含一個場景提示與關鍵影格。每一行指定正規化時間、攝影機局部 XYZ 位移(右、上、後)、正規化影像空間瞄準點 U 和 V(從左上角開始)、以來源攝影機單位表示的瞄準深度、焦距倍率與傾斜角度(度)。時間必須嚴格遞增,範圍從 0 到 1。檢查估計的深度值,以選擇符合場景尺度的距離。以下是一個最小橫向運鏡的起點:

{"prompt":"A sunlit workshop with a workbench and tall windows.","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

在進行完整渲染前,依序檢視支援視角。追蹤相鄰角度之間的相同地標。若要與輸入影格零完全一致,請使用該處的原始姿態攝影機。

為困難運鏡選擇錨點

對於穿越、環繞或反向揭露運鏡,請探查障礙物兩側以及轉彎的中間點。使用 Developer API 來建立 Viewfinder 風格的靜態影像。執行 atlasGenerate,搭配稀疏的 targetCameras、returnDepth: true 與 enhancePrompt: true。一個覆蓋範圍良好的簡單運鏡可以使用第一次的支援視角生成結果。

若第一次生成結果不一致,請在相同的攝影機姿態下產生替代方案。保持稀疏目標陣列與場景提示不變。變更您在 contextFrames 中提供的可靠先前姿態視角,例如在一次生成中偏好入口側的視角,在另一次則偏好出口側的視角。將所有攝影機與深度圖保持在相同的世界座標系統中。

將候選視角以一個攝影機時間對應一個欄位、一個生成輪次對應一列的方式排列。比較每個候選視角與其相鄰視角。尋找連續的開口、穩定的地標輪廓、合理的前景深度以及清晰的視線。檢查攝影機近距離通過的表面上的深度。選擇在整個序列中一致的視角。跳過多餘或破損的姿態,或在進行密集渲染前先探查缺失的角度。

若要使用混合選擇,請將每個選取結果記錄為其儲存操作中的零基影格索引。例如,在下載並檢視兩個各六個視角的生成結果後,使用 jq 建立最終的上下文。請自行替換選取結果。保持同一個回傳影格的 RGB 資產、深度資產與攝影機在一起。

# 儲存選取結果,以便稍後能重建相同的上下文。
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("Unknown anchor: \($run)[\($i)]"))
     | {camera, imageAsset: {assetId: .imageAsset.assetId},
        depth: {depthAsset: {assetId: .depth.depthAsset.assetId}}}]
' > anchors.json

渲染與比較

根據拍攝關鍵影格準備密集攝影機請求。

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

若您策劃了一組混合選擇,請立即替換這些錨點。這會將第一個姿態影像與選取的影格一起保留。

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

在單一操作中提交完整的路徑。

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

檢查起點、最寬基線、揭露點與終點,然後以正常速度觀看片段。若運鏡仍然感覺像是縮放,請保持鏡頭固定,並在靠近支援的前景邊緣處增加橫向移動。在連接兩個意圖連貫的運鏡時,請匹配端點位置、方向、鏡頭與速度。可選的 --footfalls 參數可為步行鏡頭添加微妙的晃動感。

在比較錨點組合時,請渲染相同的密集請求兩次,僅變更 contextFrames。若您在偵察過程中修改了軌跡,請在該修改後的軌跡上重新執行舊的錨點。每個請求使用一個不同的操作,儲存這些請求,並檢查刪除 contextFrames 後是否留下相同的 JSON。在相同時間戳記上顯示同步的影格,特別是在轉彎或揭露點。啟用提示增強時,請檢查兩個回應中的 promptUsed:選取的影像可能會改變增強的敘述。若要進行一個同時固定有效文字的實驗,請在兩次執行中重複使用一個敘述,並將 enhancePrompt 設為 false。獨立的渲染仍然可能有所不同。

在 Tide Organ 海灘範例中,兩次 API 生成產生了 20 個姿態的 40 張靜態影像。十七個選取結果涵蓋了接近、肋狀拱門、開闊海浪以及海岸的反向視角。銅管是判斷離岸轉彎處連續性的有用地標。

相關技能