E1 · Instalar
10 minRode "clonar, instalar e testar".
Pronto quando: npm ci: 0, hyperframes 0.8.134 e ℹ fail 0.
Aula 5 · 18 min
Até aqui o vídeo virou página. Agora o caminho inverso: a página vira vídeo. O filmarca (INEMA) lê cores, fontes, logo, textos e prints de um site e monta um filme da marca em HyperFrames. Você roda o caminho inteiro contra a página do kit sem chamar modelo nenhum, com as cenas-modelo do próprio filmarca, e depois põe o filme na página.
Começar a aula
Objetivo: ler o DNA do site do kit com o filmarca e renderizar um filme da marca com cenas-modelo, sem chamar modelo.
As etapas do filmarca. Clique em cada uma.
O filmarca fixa hyperframes 0.8.134 no package-lock dele (19/10/2026); o curso 3 ensina a 0.8.176. Use o lock do projeto: é o que os testes dele passaram.
Numa pasta de ensaio, no commit testado. O npm test do projeto roda sem modelo.
E=${TMPDIR:-/tmp}/ensaio-sites/a5; rm -rf "$E"; mkdir -p "$E"; cd "$E"
git clone -q https://github.com/inematds/filmarca && cd filmarca && git checkout -q 0c0356c; echo "clone: $?"
npm ci --no-audit --no-fund > npm.log 2>&1; echo "npm ci: $?"
node -p "'hyperframes ' + require('hyperframes/package.json').version + ' · playwright ' + require('playwright/package.json').version"
npx playwright install chromium > pw.log 2>&1; echo "chromium: $?"
npm test 2>&1 | grep -E "^ℹ (pass|fail)"clone: 0 npm ci: 0 hyperframes 0.8.134 · playwright 1.63.0 chromium: 0 ℹ pass 5 ℹ fail 0
Os 5 testes provam que uma cena quebrada é recusada e que a cena-modelo entra no lugar.
O servidor do kit serve a página da lente; o filmarca lê como leria qualquer site.
K=~/projetos/formacao-cinema-ia-sites-v72/kit
E=${TMPDIR:-/tmp}/ensaio-sites/a5; cd "$E/filmarca"
node "$K/scripts/servir.mjs" "$K/site" > "$E/url.txt" & S=$!
until U=$(cat "$E/url.txt") && [ -n "$U" ] && curl -s -o /dev/null "$U"; do sleep 0.3; done
node bin/filmarca.mjs dna "$U" --out "$E/filme"; echo "dna: $?"
kill $S
ls "$E/filme/assets"lendo http://127.0.0.1:<porta>/ marca: Aurora 35 · cores #0c0c10 #f3efe7 #e2a23b #e2a23b #0b0b0d · fontes Georgia / system-ui · logo assets/logo.svg dna: 0 fonts logo.svg print-1.png print-2.png print-3.png print-celular.png print-topo.png
Repare na cor primária: #e2a23b é o amarelo da chave de movimento (Parado / Ligado), não o detalhe da marca. O DNA lê o que aparece na tela. Confira o marca.json antes de gerar e corrija à mão o que estiver errado.
Um roteiro com fatos da página (kit/filmarca/roteiro.json) e as cenas-modelo do filmarca no lugar do passo cenas.
K=~/projetos/formacao-cinema-ia-sites-v72/kit
E=${TMPDIR:-/tmp}/ensaio-sites/a5; cd "$E/filmarca"
export HYPERFRAMES_NO_TELEMETRY=1
cp "$K/filmarca/roteiro.json" "$E/filme/"
node "$K/scripts/cenas-modelo.mjs" . "$E/filme"
node bin/filmarca.mjs render "$E/filme" --formatos 16x9 --rascunho; echo "render: $?"
python3 "$K/scripts/conferir-video.py" "$E/filme/renders/aurora-35-pt-16x9.mp4" 17.5 1920x1080; echo "saída: $?"{
"titulo": "Aurora 35",
"conceito": "a lente apresentada só com o que a página dela diz: luz baixa, abertura, ficha e reserva",
"lang": "pt",
"cenas": [
{ "id": "c1", "tipo": "abertura", "duracao": 3.5, "textos": { "frase": "Feita para a cena que acontece com pouca luz." }, "direcao": "", "midia": null },
{ "id": "c2", "tipo": "numero", "duracao": 3, "textos": { "numero": "f/1.4", "legenda": "para filmar no fim da tarde sem subir o ISO" }, "direcao": "", "midia": null },
{ "id": "c3", "tipo": "print", "duracao": 3.5, "textos": { "legenda": "Lente prime de 35 mm" }, "direcao": "", "midia": "assets/print-topo.png" },
{ "id": "c4", "tipo": "lista", "duracao": 4, "textos": { "titulo": "Ficha técnica", "itens": ["35 mm", "f/1.4 a f/16", "Encaixe PL e EF", "780 g"] }, "direcao": "", "midia": null },
{ "id": "c5", "tipo": "cta", "duracao": 3.5, "textos": { "chamada": "Reserve a sua", "botao": "Reservar a Aurora 35" }, "direcao": "", "midia": null }
]
}cenas-modelo: 5 cenas · 17,5 s · marca Aurora 35 · logo assets/logo.svg ✓ renders/aurora-35-pt-16x9.mp4 · 8 s (lint com avisos) /tmp/ensaio-sites/a5/filme/renders/aurora-35-pt-16x9.mp4 render: 0 OK: 17,5 s · 1920×1080 · 30 fps · sem áudio saída: 0
Cinco cenas, 17,5 s, render de rascunho em segundos. "lint com avisos" é aviso, não erro: o MP4 saiu e passou no conferidor.
O passo real troca o roteiro escrito à mão e as cenas-modelo pelo diretor e pelas cenas animadas pelo modelo. Depois, o MP4 entra na página.
cd <pasta-do-filmarca> node bin/filmarca.mjs roteiro <pasta-do-filme> --pedido "filme de apresentação da lente para a página" --motor claude node bin/filmarca.mjs cenas <pasta-do-filme> --motor claude node bin/filmarca.mjs render <pasta-do-filme> --formatos 16x9,9x16 --rascunho
<!-- O filme da marca numa seção comum da página: só baixa e toca quando a pessoa pede. -->
<section class="secao" id="filme-da-marca">
<h2>A Aurora 35 em 17 segundos</h2>
<video src="filme/aurora-35-pt-16x9.mp4" poster="filme/poster.jpg"
controls muted playsinline preload="none" width="1280" height="720"
style="width:100%;height:auto;border-radius:14px"></video>
</section>O ensaio inteiro, e o filme na página.
Rode "clonar, instalar e testar".
Pronto quando: npm ci: 0, hyperframes 0.8.134 e ℹ fail 0.
Rode "dna do site do kit" e depois "cenas-modelo, render e conferir".
Pronto quando: dna: 0, render: 0 e OK: 17,5 s · 1920×1080 com saída: 0.
Numa cópia da página do kit, crie a pasta filme/, copie o MP4 e tire o pôster (ffmpeg -ss 2 -i filme/aurora-35-pt-16x9.mp4 -frames:v 1 filme/poster.jpg). Cole a seção de kit/exemplos/video-da-marca.html antes da ficha técnica e rode o peso.py com --inicial 0.5.
Pronto quando: O peso.py mostra vídeo na linha PESO e primeira pintura … DENTRO.
A explicação aparece depois da sua resposta.
Pergunta 1 de 4
Qual etapa do filmarca roda sem modelo nenhum?
Pergunta 2 de 4
O DNA deu a cor primária #e2a23b, que é a cor da chave de movimento. O que fazer?
Pergunta 3 de 4
Uma cena escrita pelo modelo foi recusada duas vezes pela conferência. O que o filmarca faz?
Pergunta 4 de 4
Por que o vídeo da marca entra na página com preload="none"?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.