Atlas flythrough
Escolha o que o espectador deve descobrir até o final do take. Inspecione a imagem em busca de bordas de primeiro plano, espaço de deslocamento livre e pontos de referência em várias profundidades. Um movimento lateral passando por um objeto em primeiro plano facilita a leitura da escala. Um ângulo reverso precisa de evidências do que está atrás do assunto.
Use uma CLI autenticada da World Labs, Python 3 com NumPy e FFmpeg. Trabalhe em um diretório de takes novo. Defina PREP como o caminho absoluto de scripts/prepare.py neste skill. Forneça um JPEG e suas dimensões de saída pretendidas.
A melhoria de prompt está habilitada por padrão para as vistas de suporte e o voo final. Passe --no-enhance-prompt para um comando de geração em prepare.py para usar o prompt da cena literalmente naquela passagem.
python3 "$PREP" pose scene.jpg --resolution 1280 720 > pose-request.json
worldlabs tasks run images2PosedRGBD --request pose-request.json --wait --json > pose.json
Escreva shot.json com um prompt de cena e keyframes. Cada linha especifica tempo normalizado, deslocamento XYZ local da câmera (direita, cima, trás), referência U e V normalizada no espaço da imagem (do canto superior esquerdo), profundidade da referência em unidades da câmera de origem, multiplicador focal e inclinação em graus. Mantenha o tempo estritamente crescente de 0 a 1. Inspecione a profundidade estimada para escolher distâncias na escala da cena. Este movimento lateral mínimo é um ponto de partida:
{"prompt":"Uma oficina ensolarada com uma bancada e janelas altas.","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
Inspecione os suportes na ordem do caminho antes da renderização completa. Acompanhe o mesmo ponto de referência em ângulos vizinhos. Para uma correspondência exata com a entrada no quadro zero, use a câmera posada original ali.
Selecionar âncoras para um movimento difícil
Para uma passagem, órbita ou revelação reversa, explore ambos os lados da obstrução e o meio da curva. Use a API do Desenvolvedor para imagens estilo Viewfinder. Execute atlasGenerate com targetCameras esparsas, returnDepth: true e enhancePrompt: true. Um movimento simples com boa cobertura pode usar a primeira passagem de suporte.
Onde a primeira passagem for inconsistente, gere alternativas nas mesmas poses de câmera. Mantenha o array de alvos esparsos e o prompt da cena fixos. Varie quais vistas posadas anteriores confiáveis você fornece em contextFrames, por exemplo, favorecendo vistas do lado de entrada em uma passagem e vistas do lado de saída em outra. Mantenha todas as câmeras e mapas de profundidade nas mesmas coordenadas do mundo.
Organize os candidatos com uma coluna por tempo de câmera e uma linha por passagem. Compare cada candidato com as vistas de cada lado. Procure por uma abertura contínua, uma silhueta de ponto de referência estável, profundidade de primeiro plano plausível e uma linha de visão clara. Inspecione a profundidade nas superfícies pelas quais a câmera passa perto. Escolha as vistas que concordam ao longo da sequência. Pule poses redundantes ou quebradas, ou explore um ângulo ausente antes de se comprometer com a renderização densa.
Para usar uma seleção mista, registre cada escolha como um índice de quadro baseado em zero em sua operação salva. Por exemplo, após baixar e revisar duas passagens de seis vistas, construa o contexto final com jq. Substitua por suas próprias escolhas. Mantenha o ativo RGB, o ativo de profundidade e a câmera juntos do mesmo quadro retornado.
# Salve as escolhas para que o mesmo contexto possa ser reconstruído posteriormente.
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("Âncora desconhecida: \($run)[\($i)]"))
| {camera, imageAsset: {assetId: .imageAsset.assetId},
depth: {depthAsset: {assetId: .depth.depthAsset.assetId}}}]
' > anchors.json
Renderizar e comparar
Prepare a solicitação de câmera densa a partir dos keyframes do take.
python3 "$PREP" flight shot.json --pose pose.json --angles supports.json --frames 120 > flight-request.json
Se você selecionou um conjunto misto, substitua essas âncoras agora. Isso preserva a primeira imagem posada junto com os quadros selecionados.
jq --slurpfile picks anchors.json '.contextFrames = [.contextFrames[0]] + $picks[0]' flight-request.json > selected-request.json
mv selected-request.json flight-request.json
Submeta o caminho completo em uma operação.
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
Inspecione o início, a linha de base mais larga, a revelação e o fim, depois assista ao clipe em velocidade. Se o deslocamento ainda parecer um zoom, mantenha a lente fixa e aumente o deslocamento lateral perto de uma borda de primeiro plano suportada. Combine posição final, direção, lente e velocidade ao unir dois movimentos que devem parecer contínuos. Opcional --footfalls adiciona um balanço sutil para takes de caminhada.
Ao comparar conjuntos de âncoras, renderize a mesma solicitação densa duas vezes, alterando apenas contextFrames. Se você revisou a trajetória durante o reconhecimento, reexecute as âncoras antigas nessa trajetória revisada. Use uma operação distinta por solicitação, salve as solicitações e verifique se a exclusão de contextFrames deixa JSON idêntico. Mostre quadros sincronizados nos mesmos timestamps, especialmente na curva ou revelação. Com a melhoria de prompt habilitada, inspecione o promptUsed de ambas as respostas: as imagens selecionadas podem alterar a descrição aprimorada. Para um experimento que também mantenha o texto efetivo fixo, reutilize uma descrição com enhancePrompt: false em ambas as execuções. Renderizações independentes ainda podem variar.
No exemplo da praia do Tide Organ, duas passagens de API produziram 40 imagens em 20 poses. Dezessete escolhas cobriram a aproximação, o arco canelado, a arrebentação aberta e a vista reversa da costa. O tubo de cobre foi um ponto de referência útil para julgar a continuidade durante a curva ao largo.