Cortar um take a partir de suas evidências
Você está cortando uma GRAVAÇÃO que alguém fez (um take vosso: recording.webm +
cursor.json + meta.json + doc.json), não gravando uma. Gravar a partir de
um script é a skill product-video; programas são vos-create/vos-remix.
O loop é: ver → narrar → decidir por exceção → verificar → enviar → (humano
analisa) → recortar. Cada etapa nomeia o verbo que a executa. O documento é
doc.json; o contrato para seus campos e unidades está em
https://vos.so/llms-full.txt. Nada aqui regrava o take de um humano, jamais:
um corte não pode consertar a filmagem, e se a filmagem não suportar a solicitação, você diz isso
na nota e para.
Configuração
npm i -D @vosjs/cli # buscar, resumir, planejar, quadros, renderizar, enviar, puxar
Credenciais, nesta ordem, nunca impressas: VOS_API_KEY, depois a primeira
linha de ~/.config/vos/credentials, depois vos login (um login no navegador que
cria uma chave para esta máquina). Chaves criam trabalho PRIVADO apenas e nunca podem
publicar. Um Chromium é necessário para digest, frames e render.
0. Regras básicas que substituem tudo abaixo
- Nunca leia o vídeo. Seus olhos são
vos digest:digest.json, depoissheet.png, depois um recorte apenas onde você precisa decidir. Um take de 90s tem ~35 momentos e ~25-40k de tokens de imagem se você ler cada imagem; a folha mais os recortes decisivos é ~10k. O eventodoneimprime a estimativa. - Edite por exceção. Os planejadores (zoom, velocidade, inclinação) já responderam
ONDE cada clique, sessão de digitação, rolagem e pausa está.
planno resumo contém seus intervalos eproposednomeia aqueles sob cada momento. Mantenha, mescle, descarte ou reajuste o tempo deles; adicione apenas o que um planejador não pode saber (qual clique solitário merece um beat, uma legenda, uma passagem rápida que é chata mas não é pausa). Cada intervalo que você toca carrega"source": "manual". Uma proposta que você DESCARTA vai pararejected([{id, lane, in, out}], a faixa e sua extensão de origem) para que nenhum replanejamento, e nenhuma regravação carregada porplan --reuse, proponha aquele beat novamente; o estúdio o escreve sozinho quando um humano exclui um intervalo automático. - Aponte com uma camada, não com a câmera. Quando o corte aponta para um
componente (um botão, um card, um bloco de código) e o zoom ampliaria
pixels, redesenhe-o como uma camada html em
doc.json(overlays[]comkind: "html": o markup, o CSS no próprio tipo do produto, a caixa de design em px 1080p) colocado ao lado do seu assunto, nunca sobre ele. Você tem os componentes reais do produto no repositório; use-os. O markup é XML bem formado evos validatediz o que não seria pintado; uma animação CSS é executada no relógio de parede e é recusada em favor deanimemotion. - As unidades do doc, copiadas, nunca convertidas. O
focusde um momento é ocx/cyde um intervalo de zoom; seurecté o que o zoom deve conter. As extensõessourcesão segundos da filmagem (zoom/velocidade/inclinação/segmentos); as extensõesoutputsão segundos renderizados (sobreposições/áudio). Valores de pixel em qualquer lugar são o erro #1. - Edições humanas são sagradas.
doc.manualno resumo conta intervalos que um humano decidiu; um push que toca um nó que o humano editou desde sua base retornaprotected_conflict. Mantenha os valores deles a menos que a solicitação nomeie aquele nó exato. - Três rodadas sozinho, depois um humano. Rodada = editar → validar → quadros → julgar. Se não funcionar em três, envie a melhor rodada e diga por quê.
- A solicitação decide; as receitas da pasta vêm em seguida; estes padrões por último. Uma linha de receita que os membros recentes contradizem é chamada de desatualizada em sua nota, não obedecida.
1. Ver
vos fetch <vosId> --media # um take hospedado que você não gravou (doc + filmagem em casa)
vos pull <take> --media # um diretório de take já vinculado a vos.so
vos folder pull <slug> --media # os takes de um projeto, receitas incluídas
vos plan <take> --style <seed doc.json|vosId> # em uma série: o estilo da semente, por dados
vos digest <take> [--transcript whisper.json] [--style <seed>]
Leia, nesta ordem:
digest.json→take(duração, página, tem cursor/mic),moments(id, tipo, janelas source/output, focus, rect, activity, proposed, said),plan,doc.manual. Um take comhasCursor: false(um take gravado no navegador) lista apenas head/tail/scenes: marque o ritmo poractivity, zoom apenas onde a solicitação nomeia um lugar, e diga na nota que o take não tinha rastro de cursor.sheet.png→ os recortes em ordem cronológica, ids gravados. Este é o filme de relance.m<nn>.crop.pngpara os momentos que a solicitação ou a receita tornam decisivos;m<nn>.full.pngapenas para contexto (qual página, qual seção).
Ler um recorte: o que está em foco (um controle, um campo, conteúdo); o que ele diz
(o rótulo, o valor digitado); a consequência do clique é visível no próximo
quadro do momento ou em um momento scene logo depois. Uma scene é um
salto de diferença de quadro (uma navegação, um diálogo); olhe para seu quadro completo para nomeá-la.
Duas coisas que os recortes dizem que a lista de cliques não diz: um aglomerado de cliques cujo
rect é a maior parte do quadro é um ARRASTO (mirar, esfregar, mover uma coisa),
não um alvo; e uma lacuna "idle" cuja activity permanece acima de ~0,1 é o
VÍDEO TOCANDO, não ocioso. Nenhum dos dois quer a proposta do planejador.
Se uma pasta estiver envolvida, leia TODO .md nela (próprio e herdado) antes
que você decida qualquer coisa.
2. Narrar
Escreva 3-6 beats em suas notas de trabalho, cada um com seus ids de momento, o que ele
MOSTRA (dos recortes) e para que ele SERVE (da receita, do título da página,
said, ou da solicitação). Exemplo:
B1 m01-m04 a galeria: navegar, escolher um programa (abrir amplo, um zoom de card)
B2 m05-m06 Remix abre o estúdio (a cena é a recompensa)
B3 m07-m12 knobs: cinco arrastos de slider no painel remix (um zoom mantido, 2× sobre o meio)
B4 m13-m14 o resultado é reproduzido (liberar, estabilizar)
Nenhuma solicitação veio com o take? Infira uma da gravação (o que ela mostra, onde seria exibida, quanto tempo deve durar) e DECLARE-A na nota de versão, para que o humano corrija a solicitação antes do corte quando estiver errada.
Se a solicitação nomear um beat ("torne a parte de exportação mais rápida"), mapeie-o para ids de momento PRIMEIRO e não toque em nada fora deles.
3. Decidir, por exceção
Por beat, contra plan e a receita:
- Zoom. Mantenha o intervalo do planejador quando ele emoldurar o beat; mescle propostas
adjacentes em um intervalo mantido quando forem um beat (um zoom por beat,
nunca por clique); descarte uma proposta em um clique que não é um beat; adicione um
intervalo em um clique solitário que o planejador ignorou quando o recorte mostrar que é o
momento. Nível a partir do rect: um controle pequeno quer 1,8-2,2, um painel
1,4-1,6; quando o alvo for a maior parte da largura do quadro, o lint de enquadramento decide
o nível, obedeça-o.
cx/cy= ofocusdo momento. Ids que você cria:u1,u2… Em uma gravação de editor, aplique zoom na FAIXA onde um intervalo aparece, nunca na tela que está sendo arrastada. Libere um zoom ANTES de um clique que navega, para que a troca de página seja reproduzida ampla. - Velocidade. Mantenha propostas em digitação/ocioso/rolagem; adicione
2×-3×em um trecho cujaactivityé baixa e nenhum beat precisa, ou sob aglomerados de arrasto; nunca sobre a recompensa de um beat, nunca durante a reprodução. - Inclinação. Apenas se o estilo da câmera tiver uma (
tiltStyle/a personalidade do estilo) e um beat merecer pontuação. Uma pose a cada ~5s, ±5..18°. - Corte. Início e fim: corte para a primeira e a última coisa que importa
(
segments), deixando ~0,5s de estabilização no final. Telas de carregamento são cortadas. - Texto. Uma legenda por beat que tem algo a dizer, em um ritmo (uma
a cada 5-10s, 2,5-4s cada, nunca duas ao mesmo tempo), nas palavras do produto
e na intenção do vídeo; terço inferior
y ≈ 0,82; segundos de SAÍDA; nunca sobre o controle clicado (validate avisa). Dê a ele umaboxquando o fundo sob ele for claro (a linha do tempo de um editor é), e julgue cada legenda em seu próprio instante. Uma legenda por filme é muito esparsa para um filme que explica um fluxo; zero é certo apenas quando a receita ou a solicitação diz sem texto. - Estilo. Em uma série,
vos plan --style <seed>ANTES de você cortar: ele copia ozoomStyle/zoomParams/speedParams/tiltStyle/frame/cursor/cam/exportda semente e replaneja os intervalos automáticos sob eles. Nunca reafirme esses números em uma receita; o doc da semente é o lar deles.
Escreva o patch como EDIÇÕES para doc.json, nunca uma reescrita. Mantenha todo campo que você
não entender.
4. Verificar
vos validate <take> # limpo; LEIA os avisos de enquadramento, corrija-os
vos digest <take> --no-frames # após reajuste de tempo: novos tempos de SAÍDA, mesmos quadros
vos frames <take> --at-moments --at-zooms --times 0,25%,50%,75%,100%
vos frames <take> --times <todo início de legenda + 1> # cada legenda em seu próprio fundo
vos render <take> check.webm --range a..b --draft # o beat que mais mudou
Julgue as imagens estáticas contra o loop de qualidade em https://vos.so/llms-full.txt
e o padrão da pasta: desfoque, croma, cursor, legibilidade do texto, primeiro e último
quadro como pôsteres; o momento crucial dentro de 3s; o final estabilizado; ≤1 tela cheia
bang por ~5s (ffmpeg -vf "select='gt(scene,0.12)'" os conta). Uma
imagem estática moment-<id> e seu <id>.crop.png compartilham um id: "o que estava lá"
ao lado de "o que o corte mostra".
5. Enviar
vos push <take> --label "<o que, imperativo, ≤60 caracteres>" --note "<a solicitação para a qual você cortou; os beats com segundos de origem; o que você descartou e adicionou>" [--folder <slug>]
A base vem de vos.json. 409 stale_base → vos pull, reaplicar em
cima, enviar novamente. 409 protected_conflict → manter os valores do humano a menos que
a solicitação nomeasse aquele nó (--override <id> apenas então). Um 400 imprime o
campo e seu limite. Depois GET /api/vos/<id>, siga
contentUrls.thumbnail, e OLHE para ele antes de relatar como concluído.
6. Recortar (o humano olhou)
vos pull imprime o resumo do differ do que eles mudaram ("zoom z3: nível
2,2→1,6; overlay c1 removido"). Esse é o feedback, nas próprias palavras dos dados:
recorte o que as PALAVRAS deles pediram e nada que as MÃOS deles já
consertaram. Conte as rodadas. "Ótimo" é a palavra deles e a única saída de uma semente.
7. Lembrar (apenas após o humano aprovar uma semente)
Arquive e escreva as regras; números permanecem no doc da semente.
vos folder create "<série>" --desc "<para que serve, ≤200 caracteres>"
vos folder move <vosId> --to <slug>
vos recipe push CUT.md --folder <slug> # aplica: takes, seed: <o vos id>
vos recipe push BRAND.md --folder <slug> # aplica: qualquer, seed: nenhum
Uma receita é nomeada em MAIÚSCULAS, da mesma forma que CLAUDE.md: é o arquivo que a
coleção lê antes de cortar qualquer coisa. O que você arquiva é armazenado com
seu radical em maiúsculas de qualquer forma, então o terminal e a estante concordam.
CUT.md diz o que um número não pode: o vocabulário de beats, o que recebe uma
legenda e o que nunca recebe, durações de retenção, a convenção de título/fim, a faixa de
duração, o que pular, e as decisões que o humano corrigiu NA
semente (lidas do differ). BRAND.md: tipografia, paleta, fundo, música, a voz de qualquer texto. Membros posteriores: puxar a pasta, resumir, planejar
--style a partir da semente, cortar contra CUT.md, enviar --folder; uma
correção que se repete em dois membros (ou uma que o humano afirma para todos
eles) é anexada sob ## Agent notes, datada, e a regra acima
é reescrita para corresponder (vos recipe push <file> --asset <id> substitui no
lugar; o corpo anterior é mantido). Nunca reescreva as linhas do proprietário silenciosamente.