Skill: Mira Studio Full (16:9 com câmera embutida, gravação nativa)
Ordem zero — não negociável
A primeira ação é resolver deck_id = YYYY-MM-DD <slug> com a data atual e criar, de uma vez, a pasta do deck e toda a árvore interna: references/, assets/, assets/vendor/ e mira/. Nenhuma dessas pastas fica para depois. Isso acontece antes de mensagem intermediária, pergunta, leitura do deck de referência, coleta de roteiro, escolha de layout ou geração.
Cria decks horizontais 16:9 full-hd para gravação de videoaula em que o apresentador aparece AO VIVO dentro do próprio slide. Cada slide declara um layout no roteiro.md:
camera— a webcam preenche o quadro inteiro (você falando).thirds— título + animação declarativa nos 2/3 da esquerda e a câmera ao vivo no 1/3 direito (separados por uma linha sutil).full— título + animação no quadro inteiro, sem câmera (a fala fica em off, lida no teleprompter).
Fonte da verdade: o padrão desta skill está congelado no deck de referência. Resolva o arquivo nesta ordem:
mira-templates/decks/mira-studio-full-demo/index-16x9.html(projeto com Mira instalado)templates/decks/mira-studio-full-demo/index-16x9.html(repositório fonte do Mira)node_modules/mira-animator/templates/decks/mira-studio-full-demo/index-16x9.htmlSe nenhum existir, peça para rodar
npx mira-animator update. Em dúvida sobre um valor exato, o resultado deve bater com o deck de referência.
O resultado, em uma frase
Um quadro 16:9 cravado à janela (letterbox #000000 quando a tela não é 16:9) chamado index-16x9.html, onde cada body > section declara data-layout="camera|thirds|full", os slides NASCEM do roteiro.md (layout, título e animação linha:/orbita: por cabeçalho; texto da fala sincronizando ao vivo), a webcam entra ao vivo pelas .cam-area (mira/mira-camera.js), o teleprompter em overlay fica FORA do vídeo via Element Capture, e a tecla R grava um MP4 1920x1080 direto no disco pelo mira/mira-record-16x9.js, sem OBS.
Diferenças para o /mira-studio (não confunda)
/mira-studio |
/mira-studio-full |
|
|---|---|---|
| Formato | 9:16 vertical (coluna) | 16:9 horizontal (quadro cobre a janela) |
| Arquivo | index.html |
index-16x9.html |
| Layouts | capa, camera, split, full |
camera, thirds, full |
| Animações | autorais (escritas à mão por slide) | declarativas no roteiro (linha: / orbita:), autoral opcional |
| Gravador | mira-record.js (1080x1920) |
mira-record-16x9.js (1920x1080) |
| Painel de gravação | na margem, fora da coluna | SOBRE o slide (some do vídeo via Element Capture) |
| Launcher | mira-studio-windows.bat |
mira-studio-16x9-windows.bat / -apple.command |
Pedido de vertical/Reels/Shorts dentro desta skill: aponte para /mira-studio.
Dimensão (o bloco de formato canônico)
O quadro é 16:9 cravado e generalista para a tela: --fmt-w: min(100vw, calc(100vh * 16 / 9)) e --fmt-h: min(100vh, calc(100vw * 9 / 16)). Em tela cheia num display 1080p fecha exatos 1920x1080; em janela menor encolhe mantendo a proporção. Regras que acompanham (todas no deck de referência):
body > sectioncommargin: calc((100vh - var(--fmt-h)) / 2) 0escroll-margin-topigual: a sobra vertical vira faixa#000acima e abaixo, nunca o slide seguinte.htmlcomscroll-snap-type: y proximity,scrollbar-width: noneeoverflow-x: hidden: a barra de rolagem roubava largura e criava scroll horizontal em F11. Navegação por teclado ou roda do mouse.body > section { isolation: isolate }é PRÉ-REQUISITO do Element Capture: sem stacking context o Chrome aceita orestrictToe não emite frame nenhum (o MP4 sai vazio).thirds:.thirds-maincomwidth: 66.667%,padding: 50px(área segura onde título e animação vivem),h2centrado no topo;.cam-areacomwidth: 33.333%eborder-left: 1px solid var(--line).full:.full-mainocupando o quadro inteiro (padding: 50px, mesma área segura),h2centrado no topo, SEM.cam-area(o builder não a cria neste layout).- Tema mira-dark embutido nas variáveis
--mira-*(deck self-contained); destaque#FF904D. - Primeiro slide com
h1/h2:text-wrap: balance(diretiva do título da capa).
Roteiro externo roteiro.md (os slides nascem dele)
Todo deck gerado leva um roteiro.md na raiz: é dele que saem os slides E as animações. O usuário escreve no editor que quiser e vê o resultado no deck aberto.
Gramática (uma linha por cabeçalho):
## Slide N | layout | Título | animação
layout(obrigatório):camera,thirdsoufull, comparado em minúsculas. Valor desconhecido cai emcamera.Título(thirds/full):*entre asteriscos*vira<span class="accent">, montado por fragmento (nuncainnerHTML).animação(thirds/full):linha: A, B, C, D(etapas em diagonal, orbe percorrendo e acendendo cada nó com pulso) ouorbita: A, B, C @ NÚCLEO(satélites girando em elipse em torno do núcleo). Sem o campo ou valor inválido, cai emlinhapadrão.- O número do cabeçalho é rótulo, não índice, e continua sendo.
- Quem casa bloco com slide é a identidade, não a ordem. Cada bloco leva
<!-- mira-slide-id: X -->na linha abaixo do cabeçalho e a<section>correspondente levadata-mira-slide-id="X". Reordenar os blocos no editor ou os slides no modo E dá o mesmo resultado: o slide anda inteiro, com palco, título e fala. Faltando id de um dos lados, cai no casamento por ordem de aparição de antes (deck antigo não precisa de migração). Detalhes em_reversa_sdd/addenda/roteiro-identidade-de-slide-v001.md. - O
mira-slide-idé metadado, não fala: fica fora do teleprompter e do overlay lido em câmera. - O texto abaixo do cabeçalho é a fala do slide (teleprompter e overlay).
O que sincroniza e o que não:
| Dado | Fonte da verdade | Quando vale |
|---|---|---|
| Layout, título, animação | roteiro.md |
lido uma vez, no load (mudou, recarregue) |
| Texto da fala | roteiro.md |
ao vivo, nos dois sentidos |
| Posição/tamanho/fonte do overlay + textos | bloco #mira-studio-state no index-16x9.html |
Ctrl+S |
| Cópia de trabalho | localStorage |
entre polls |
- Builder síncrono antes das animações e dos
<script defer>(os módulos leem as<section>logo em seguida): busca o.md, guarda texto bruto, intro e cabeçalhos, remonta as seções antes do painel do teleprompter. As<section>estáticas do HTML ficam como fallback: emfile://ou sem o arquivo, elas SÃO o deck. - Sincronização: poll de leitura a cada 1,5 s, escrita com debounce de 800 ms. Guards obrigatórios: escrita em voo trava o poll; gravação em andamento trava o poll; campo com foco não é sobrescrito; conteúdo idêntico aborta.
- A escrita de volta remonta o arquivo com a intro e os cabeçalhos capturados no load, mais os textos atuais. Cabeçalho nunca é reescrito a partir do estado do deck. Arquivo ausente (404) é recriado uma vez.
- Estado no arquivo: diferente do 9:16, aqui o
#mira-studio-stateguarda texto (mira-tp-text) E layout do overlay (mira-tp-ov-pos). O seed no load é guardado por hash: só sobrescreve olocalStoragequando o bloco MUDOU desde o último seed, então ajustes locais ainda não salvos sobrevivem a um recarregar, e um arquivo atualizado sempre vence.
As animações declarativas (animLinha e animOrbita)
Os dois geradores estão no deck de referência; copie-os como estão. Regras que carregam:
- Regra Zero: entrada coreografada (haste se desenha e nós pipocam; núcleo cresce e satélites acendem) e DEPOIS o loop perpétuo via
d3.timer, com generation counter (window.__animGen[svgId]): cada rebuild mata o timer anterior no próximo tick. - Fora da tela o loop morre:
IntersectionObserver(threshold 0.35) reconstrói ao entrar e invalida a geração ao sair. Trocar de slide não acumula timers. casarPalco(viewBox casado ao box real do palco) +fitOncesobre a parte ESTÁTICA, uma vez (reenquadrar a cada frame faz o palco reescalar junto com o que se move).- Todo callback de
d3.timerdentro detry/catch: uma exceção congela a fila inteira de timers do d3. - Texto SVG:
font-size >= 24paraW = 960; cor da marca#FF904Dvia variáveis do tema; sem arco-íris. - Animação AUTORAL além das duas: permitida, presa ao palco
svg#sv-slide-N(N = posição do slide no arquivo), seguindo as mesmas regras e o padrão criativo doagents/mira-animator/SKILL.md: metáfora primeiro, animação depois (método A/B antes de codar), refinamento sob demanda por slide, e espaço vazio preenchido com cenário ambiente da própria metáfora (parado ou em deriva lenta, nunca focal). As declarativaslinha/orbitacontinuam como estão, mas devem preencher o palco. Palco sem animação fica vazio em vez de quebrar.
Teleprompter que não entra no vídeo
Duas peças, mais o estado no arquivo. Blocos canônicos no deck de referência.
- Painel lateral (
#mira-prompter, tecla T): o editor. Quatro chaves (T painel, O overlay, G Element Capture, E mover/redimensionar), slider de tamanho do texto do overlay por slide (padrão do deck: 34px, caixa 621x454), o texto do slide (#mp-body,contenteditable) e o botão "Salvar no arquivo". Some durante a gravação (html[data-mira-recording] #mira-prompter { display: none }). - Overlay central (
#tp-ov-wrap/#tp-ov, tecla O): o retângulo que o apresentador lê (fundo preto 60%, texto branco 60%), irmão das<section>, nunca filho: é isso que o exclui do vídeo no Element Capture. - Rolagem automática (teleprompter de verdade): tecla L liga/pausa a rolagem do overlay (P é da caneta), + / - ajustam a velocidade (10 a 200 px/s, persistida). Na troca de slide o texto volta ao topo e espera ~1 s antes de rolar. O degradê
.tp-ov-moreindica texto abaixo do corte; um toast discreto (#tp-toast) confirma liga/pausa e velocidade. - Modo E no overlay: arrastar move; alça da borda direita muda largura, da borda de baixo muda altura, grip do canto muda as duas. Tudo por slide, persistido em
mira-tp-ov-pos. - Element Capture (tecla G, LIGADO por padrão): o deck declara
window.__miraElemCapture = true; a gravação restringe a captura à subárvore da seção visível (RestrictionTarget.fromElement+track.restrictTo), então overlay, painel do teleprompter e painel de gravação não são pintados no vídeo, mesmo sobrepostos. - Cheat-sheet (tecla ?): grade com todos os atalhos, fora do vídeo, Esc ou clique fecha.
- Salvar (botão ou Ctrl+S): grava textos e layout do overlay no bloco
<script id="mira-studio-state" type="application/json">do próprioindex-16x9.html: em localhost porPOST /__mira_save, emfile://pela File System Access API. O arquivo é a fonte da verdade, não o navegador.
Onde cada overlay mora (regra de ouro): o que deve entrar no vídeo (logo, selo, .me-ov com data-me-chrome + data-me-key) fica DENTRO da <section>; o que não deve (teleprompter, painéis) fica FORA, como filho direto de body.
Desenho por slide (caneta P)
A caneta do mira-draw.js desenha sobre o slide ATUAL: ao trocar de slide os traços saem junto e voltam quando o slide volta (bloco canônico usando miraDraw.getShapes/setShapes por índice de slide). No palco do mira-remote o desenho é da shell (modelo global sincronizado): o bloco detecta window.__MIRA_REMOTE_STAGE__ e não interfere.
O módulo mira/mira-record-16x9.js (gravação nativa 1920x1080)
Fonte canônica em templates/authoring/mira-record-16x9.js; copie para mira/ do deck. O que muda em relação ao gravador 9:16:
- Painel SOBRE o slide: no 16:9 o quadro cobre a janela, então o painel de gravação flutua sobre o slide (arrastável). Gravando com Element Capture ele continua visível para você e fora do MP4; gravando sem (Region Capture), ele é ocultado via CSS durante a gravação e a tecla R segue funcionando.
- Contagem regressiva 3-2-1 antes de iniciar (fora do vídeo: aparece antes do pipeline).
- Saída H.264
avc1com resolução constante por sessão: 1920x1080 em Alta (padrão de videoaula) ou a resolução 16:9 nativa da janela em Desempenho (menos pixels a codificar, a alavanca real para máquina fraca). Bitrate 12 Mbps escalado proporcionalmente; keyframe a cada 2 s. - Pipeline em Worker idêntico ao padrão comprovado do 9:16:
MediaStreamTrackProcessorpuxaVideoFrames da track restringida/recortada, oreadableé transferido ao Worker (Blob URL, sem arquivo extra),VideoEncodercom backpressure (encodeQueueSize>=2descarta não-chave), áudio AAC no mesmo Worker, muxmp4-muxercomfirstTimestampBehavior: 'offset'(por trilha — nuncacross-track-offset). O main thread só renderiza a página. - CFR (edição) — o MP4 entra no Premiere sem drift de áudio: chave no painel, ligada por padrão, idêntica à do 9:16. O Worker põe cada frame num slot da grade de 1/FPS antes do encoder e preenche slot vazio com o quadro anterior (teto de 2 s). Sem isso a trilha sai VFR: VLC e Chrome tocam certo (honram PTS), mas o Premiere conforma VFR numa grade fixa e a boca desencontra da voz de forma PROGRESSIVA. Painel mostra
N dup/N salto; o JSON traztiming: {mode, dupFilled, dupDropped, gapJumped}. Desligada, volta ao VFR de antes. A grade CFR trata a deriva PROGRESSIVA e só ela. O deslocamento CONSTANTE entre as trilhas é outro defeito (BUG-20260815-HYRG, corrigido em 2026-08-16): o vídeo chega ao muxer já rebaseado em zero pela grade e o áudio no relógio nativo, entãofirstTimestampBehavior: 'offset'zerava cada trilha na própria origem e jogava fora a distância entre elas. Hoje quem alinha é o gravador, emmandaAoMux(), e o desvio medido aparece no painel (A/V ±N ms) e no diagnóstico (av: {firstVideoUs, firstAudioUs, deltaMs}). Contrato no adendo_reversa_sdd/addenda/bug-BUG-20260815-HYRG-v001.md. Trocar a constante do muxer sem esse alinhamento reintroduz o commit6e84363. - Seletores de câmera e microfone no painel, com medidor de nível (VU) do microfone. A troca de câmera é AO VIVO (
window.__miraCameraUsedomira-camera.js), persiste emmira-cam-devicee vale para os próximos loads. - Encoder Auto / Hardware preferido / Software (CPU) (
hardwareAccelerationé preferência, não garantia) e as três informações separadas: GPUs instaladas (/__mira/gpus, via launcher), renderer ativo (WebGL) e a preferência do encoder. GPUs instaladas nunca viram opções do encoder. - Gravação direta no disco (File System Access +
FileSystemWritableFileStreamTarget,fastStart: false): escolhe o arquivo uma vez antes de começar, nada acumula em RAM, sem teto de duração. Preço honesto: o índicemoovvai para o fim; travamento no meio deixa MP4 sem índice. Fallback in-memory (~2 GB de teto, aviso ~384 MB, para sozinha ~512 MB) quando não há File System Access. - Métricas reais ao vivo (fps efetivo, % descartado, fila do encoder, Mbps, MB) e diagnóstico JSON por
mira-navigation(input/crop/output, long task, gap de rAF, gap PTS) com botão de salvar ao final. - Fallback de compatibilidade: sem WebCodecs/
MediaStreamTrackProcessor/OffscreenCanvas, cai noMediaRecordersobre canvas fixo 1920x1080. - Tecla R grava/para (quieta nos modos E/P e digitação). Ao iniciar, escolha "Esta guia" no seletor do navegador.
Launcher mira-studio-16x9-windows.bat / -apple.command + mira/mira-studio-server.cjs
Fontes canônicas em templates/studio/: os launchers vão para a RAIZ do deck e o mira-studio-server.cjs para mira/. Mesmo ciclo de vida comprovado do Mira Remote: Node em primeiro plano, Chrome aberto pelo servidor somente depois de listen().
- Os launchers 16:9 exportam
MIRA_STUDIO_PAGE=/index-16x9.html(página inicial servida) eMIRA_STUDIO_FULLSCREEN=1(Chrome abre em--start-fullscreen: F11 já na abertura, para o quadro fechar 1920x1080 exato). - O servidor serve o deck em
http://127.0.0.1:8123(ou próxima porta livre), expõe/__mira/health,/__mira/gpus,GET /__mira_metaePOST /__mira_save(.html/.htm/.md, só dentro do root, até ~25 MB; o.mdé a escrita doroteiro.mdpelo teleprompter). MIME inclui.mde.pdf. - Chrome dedicado (
--user-data-direm%LOCALAPPDATA%\mira-studio\) com--force-high-performance-gpu(preferência, não garantia). Nenhuma escrita em registro, nenhumnode -e(launcher AV-clean). - Num deck antigo, depois de atualizar o servidor, reinicie o launcher: os endpoints são novos.
Transição padrão: dissolve fora da gravação
Igual ao /mira-studio: bloco === DISSOLVE (View Transitions same-document, 0.55s) com view-transition-name para CADA UI fixa (#mrc-panel, .cam-notice, #mira-prompter, #tp-ov-wrap), helper dissolve(jump) com fallback e scrollIntoView({ behavior: 'instant' }). Durante a gravação (html[data-mira-recording]) a navegação chama jump() direto, sem startViewTransition, emitindo antes o evento mira-navigation com {from, to, at}.
Teclas do deck (documente na entrega)
Setas/espaço navegam · T painel do roteiro · O overlay de leitura · L liga/pausa a rolagem · +/- velocidade · G Element Capture · E mover/redimensionar overlay · Ctrl+S salvar no arquivo · R gravar · C espelhar câmera · P caneta de desenho · ? lista de atalhos. Todas quietas nos modos E/P e durante a digitação.
Passos
- Criar toda a estrutura — primeira ação obrigatória. Antes de perguntar pelo roteiro, ler referências, escolher layouts ou gerar qualquer arquivo, derive o slug do pedido (ou use
novo-deck-studio-full, com sufixo anticolisão), resolvadeck_id = YYYY-MM-DD <slug>e criedecks/<deck_id>/,references/,assets/,assets/vendor/emira/. Informe o caminho absoluto dereferences/. Nenhuma outra ação pode vir antes desta. - Colher o roteiro. Liste com o usuário os slides e o layout de cada um (
cameraouthirds); sem layout declarado, pergunte. Para cadathirds, defina título curto e a animação (linha:com 2+ etapas ouorbita:com satélites e núcleo). A fala de cada slide vai para oroteiro.md, não para dentro do HTML. Diga em uma linha que dá para editar esse arquivo com o deck aberto (~1,5 s). Depois, complete a estrutura comindex-16x9.html,roteiro.md, módulos emmira/, vendor emassets/vendor/e os launchers na raiz. As pastas já existentes são reutilizadas, nunca recriadas nem abandonadas. - Gerar os slides. No
roteiro.md, cabeçalhos com layout/título/animação; no HTML, asbody > sectionequivalentes como fallback defile://(mesma ordem, mesmos títulos)..cam-areaem toda seção. As animações declarativas saem dos geradores canônicos; animação autoral extra se prende ao palcosv-slide-N. - Conferir os blocos canônicos. Bloco de formato 16:9 (com
isolation: isolatee o letterbox), builder do roteiro ANTES das animações e dos<script defer>,fitTitles, navegação com dissolve, teleprompter completo (painel + overlay + rolagem L/+/- + sincronização +SCRIPT[]fallback + bloco#mira-studio-state+ seed por hash + salvar/Ctrl+S), desenho por slide, cheat-sheet?, e os cinco<script defer src="mira/...">antes de</body>nesta ordem:mira-edit.js→mira-edit-free.js→mira-draw.js→mira-camera.js→mira-record-16x9.js. - Verificar. Servido pelo launcher: quadro 16:9 sem scroll horizontal, câmera no lugar certo por layout, permissão pedida uma vez, animações preenchendo os 2/3, títulos em máx. 2 linhas, editar o
roteiro.mdexterno reflete em ~1,5 s, digitar no painel grava no.mdsem tocar intro/cabeçalhos, Ctrl+S grava e sobrevive ao reload, gravando com Element Capture o overlay some do MP4 e navegar durante a gravação não congela o vídeo. Emfile://: áreas verdes#00FF00puras. - Reportar. Caminho do deck, o
roteiro.mdcomo lugar da fala e das animações, layout de cada slide, o launcher (tela cheia + GPU + endpoints), a gravação nativa (tecla R, painel, gravação no disco) e a receita OBS como alternativa (Chrome em tela cheia + Captura de Janela, 1920x1080 direto, sem recorte).
Edge cases (do mais comum ao menos)
- Aberto em
file://: semgetUserMediae sem sincronização do roteiro; áreas de câmera em verde chroma#00FF00puro com aviso fora da área; o deck sobe com os slides embutidos, navegável. - Permissão negada / sem webcam: mesmo fallback verde; aviso específico.
- Tela que não é 16:9 (ultrawide, 16:10): letterbox
#000acima e abaixo (ou nas laterais), quadro sempre proporcional, slide seguinte nunca vaza. - Webcam 16:9 num terço vertical:
object-fit: covercorta as sobras, nunca distorce. - Título longo no
thirds:fitTitlesreduz até 2 linhas (mínimo 18px). - Roteiro com mais/menos slides que o HTML embutido: o
roteiro.mdmanda; o mapeamento por ordem de aparição nunca desloca textos. - Numeração duplicada ou fora de ordem nos cabeçalhos: irrelevante, o número é rótulo.
- Janela estreita demais: o painel de gravação some (
mrc-tight); teclas continuam.
Restrições honestas (diga isto ao usuário, não prometa mais)
- Excluir o teleprompter do vídeo só funciona no gravador nativo (tecla R) com Element Capture (Chrome/Edge desktop recente, localhost/https). Sem suporte, cai no Region Capture e o overlay e os painéis somem da tela durante a gravação (fallback no CSS), para não vazarem no vídeo.
- No OBS não há exclusão de overlay: ele grava os pixels da janela. Para gravar no OBS, desligue overlay e painéis (T/O) e grave a janela inteira em 1920x1080.
body > section { isolation: isolate }é pré-requisito do Element Capture; sem ele o MP4 sai vazio.- Salvar por localhost exige o servidor com os endpoints (
/__mira_save,/__mira_meta): deck antigo, reinicie o launcher. hardwareAccelerationé preferência: o painel reporta métricas reais em vez de prometer NVENC.
Checklist
Os que mais falham (cheque primeiro):
- Arquivo do deck chamado
index-16x9.html; launchers 16:9 na raiz apontando para ele (MIRA_STUDIO_PAGE). -
body > section { isolation: isolate }presente (sem ele o Element Capture grava vídeo VAZIO). - Sem scroll horizontal em F11 (scrollbars escondidas +
overflow-x: hidden). - Cada slide com o layout que o usuário pediu, na ordem do roteiro;
thirdscom animação preenchendo os 2/3 e câmera no 1/3 direito;fullsó animação no quadro inteiro, sem.cam-area. - Fallback: em
file://as áreas ficam#00FF00PURO, sem texto por cima.
Roteiro e teleprompter:
-
roteiro.mdna raiz com a gramática de 4 campos (layout | Título | animação) documentada na intro. - Cada
<section>temdata-mira-slide-id, pareado com o<!-- mira-slide-id -->do bloco correspondente. - Trocar dois blocos de lugar no
roteiro.mde recarregar leva palco, título e fala juntos; nenhum palco<slug>-stagevirasv-slide-N. - O
<!-- mira-slide-id -->não aparece no painel do teleprompter nem no overlay. - Slides nascem do
.md; sem o arquivo, o deck sobe com os slides embutidos, sem erro no console. - Builder do roteiro ANTES das animações e dos
<script defer>. - Editar o
.mdaparece em ~1,5 s; digitar no painel grava com intro e cabeçalhos intactos; poll parado durante gravação e digitação;.mdapagado é recriado. - Painel
#mira-promptere#tp-ov-wrapFORA das<section>; overlays do vídeo DENTRO. - Rolagem automática: L liga/pausa, +/- velocidade persistida, volta ao topo na troca de slide.
-
window.__miraElemCapturedefault true; chave G sincronizada no painel. - Bloco
#mira-studio-statepresente com seed POR HASH antes de qualquer leitor delocalStorage(texto E overlay entram no estado). - Slider de fonte do overlay por slide; padrão do deck 34px / caixa 621x454.
Gravação:
-
mira/mira-record-16x9.js(não omira-record.js9:16) eassets/vendor/mp4-muxer.jspresentes. - O
mira-record-16x9.jsdo deck é a cópia ATUAL detemplates/authoring/(tem a chave "CFR (edição)" no painel). Deck antigo sem ela grava VFR e dessincroniza no Premiere. - Painel flutuante arrastável; some do MP4 com Element Capture; oculto na gravação sem EC.
- Seletores de câmera/microfone com VU; troca de câmera ao vivo funcionando (
__miraCameraUse). - Saída 1920x1080 (Alta) ou nativa (Desempenho); gravação direta no disco ligada por padrão em localhost.
- Navegar durante a gravação não congela o vídeo (
restrictToreaplicado a cadamira-navigation/scroll).
Gerais:
- Transição dissolve com
view-transition-nameem TODA UI fixa; navegação instantânea durante a gravação, com eventomira-navigationantes do salto. -
mira/com os 5 módulos na ordem certa antes de</body>+mira-studio-server.cjs. - Animações com entrada coreografada + loop perpétuo, generation counter e pausa fora da tela (IntersectionObserver).
- Nenhum texto abaixo de 13px (SVG:
font-size >= 24paraW = 960); título máx. 2 linhas; cor#FF904D; sem travessão em texto visível. - Modos E (edição) e P (pintura) funcionando; desenho por slide.
- Receita OBS reportada ao final.