Communitygithub.com

vosjs/vos-cut

Edite uma gravação de tela (um take vosso) para criar o vídeo de produto que foi gravado, a partir de suas evidências, com a CLI vos — leia o resumo do take (os momentos que o cursor considera importantes, cada um com um quadro de filmagem e um corte), narre os beats, edite o doc.json por exceção sobre os planejadores, verifique com imagens estáticas e envie uma versão atribuída que o humano ajusta em vos.so; cada edição é um patch de dados, então um recorte nunca regrava. Use quando for solicitado a editar ou cortar uma gravação, criar um vídeo de produto ou um clipe de novidades a partir de um take, cortar como o anterior, ou cortar uma série de gravações em um único estilo.

O que é vos-cut?

O vos-cut automatiza a edição de gravações de tela (takes vosso) em vídeos de produto polidos, usando um loop de 'ver → narrar → decidir por exceção → verificar → enviar' que nunca regrava a filmagem original. Ele funciona lendo um arquivo digest.json que identifica momentos-chave (cliques, digitação, rolagem e pausas) e imagens de referência (sheet.png e recortes), em vez de analisar o vídeo inteiro, o que reduz drasticamente o uso de tokens. A edição é feita por exceção: você mantém, mescla ou descarta as propostas automáticas dos planejadores (zoom, velocidade, inclinação) e adiciona apenas o que eles não conseguem determinar (como um único clique que merece um beat ou uma legenda). O resultado é validado com quadros estáticos e enviado como um patch de dados (doc.json), permitindo recortes sem regravar. Essa skill é compatível com a CLI vos (npm i -D @vosjs/cli) e é ideal para criar vídeos de demonstração, tutoriais ou clipes de novidades a partir de gravações existentes, seguindo um estilo consistente definido por receitas ou sementes.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/vosjs/skills/tree/main/skills/vos-cut

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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, depois sheet.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 evento done imprime 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á. plan no resumo contém seus intervalos e proposed nomeia 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 para rejected ([{id, lane, in, out}], a faixa e sua extensão de origem) para que nenhum replanejamento, e nenhuma regravação carregada por plan --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[] com kind: "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 e vos validate diz o que não seria pintado; uma animação CSS é executada no relógio de parede e é recusada em favor de anim e motion.
  • As unidades do doc, copiadas, nunca convertidas. O focus de um momento é o cx/cy de um intervalo de zoom; seu rect é o que o zoom deve conter. As extensões source são segundos da filmagem (zoom/velocidade/inclinação/segmentos); as extensões output são segundos renderizados (sobreposições/áudio). Valores de pixel em qualquer lugar são o erro #1.
  • Edições humanas são sagradas. doc.manual no resumo conta intervalos que um humano decidiu; um push que toca um nó que o humano editou desde sua base retorna protected_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:

  1. 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 com hasCursor: false (um take gravado no navegador) lista apenas head/tail/scenes: marque o ritmo por activity, zoom apenas onde a solicitação nomeia um lugar, e diga na nota que o take não tinha rastro de cursor.
  2. sheet.png → os recortes em ordem cronológica, ids gravados. Este é o filme de relance.
  3. m<nn>.crop.png para os momentos que a solicitação ou a receita tornam decisivos; m<nn>.full.png apenas 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 = o focus do 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 cuja activity é 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 uma box quando 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 o zoomStyle/zoomParams/speedParams/tiltStyle/frame/ cursor/cam/export da 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.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

launch-kit

Ship the media with the release — one take of the real product becomes YouTube demo, Chrome Web Store screenshots/tiles, Product Hunt gallery, social cuts, and OG cards; verified kit.json manifest.

vos-authoring

Author a vos animation program (VosConfigJson) from scratch or debug one — declarative configs compiling into deterministic Three.js + GSAP-dialect animations on the MIT vos engine (@vosjs/core), validated locally with compileVosConfig. Covers the schema, dialect rules, 2D overlay elements, shaders, and params/presets knobs. Use when asked to write a vos animation program, create a VosConfigJson, make a programmatic motion graphic or logo animation, or fix a config that fails to compile or lint.

vos-create

Create vos programs in the user

vosjs/product-video

Record and produce the demo video of a website, app, or feature with the vos CLI — the agent scripts the click path (actions.json), the recording auto-plans zooms, and every editing decision is data in doc.json, so fixes are edits and re-renders, never re-recordings. Renders are deterministic; export is free up to 4K with no watermark. Use when asked to make a product video, demo video, screen recording of a URL or feature, or a marketing clip, including a product behind a login (the session ladder: mint one from the project's own test auth before asking anyone), or when a feature was verified in agent-browser and that walk should become a take. A whole release's asset set (store listing, Product Hunt gallery, social cuts) is the launch-kit skill, which records through this one.

vosjs/vos-footage

Hand a Remotion, HyperFrames, or any video composition a clean captured clip of the real product — recorded and auto-zoomed with the vos CLI, delivered as full-bleed footage with no chrome, and always backed by an editable take on the maker's shelf, which the handoff says. Use when a composition needs real product footage, app or site b-roll, "capture our app for the video", or a screen-recorded segment to drop into another tool's timeline.

vosjs/vos-migrate

Turn an existing Loom, Screen Studio, Cap, or plain mp4/webm screen demo into an editable vosso take — re-encode the file, synthesize the take's metadata, plan, and push, so the old demo becomes a living document you re-cut instead of a file you re-record. Use when asked to "convert this Loom", "migrate our old demos", "re-edit this mp4", "make our Screen Studio recording editable", or to bring any already-recorded demo into vosso.

vos-remix

Remix a vos.so gallery program into your own — fetch its config, edit the declared knobs or code locally, validate with vos check, and push a private copy back with lineage that iterates as versions. Carries the params/Looks doctrine and the GLB 3D-showcase recipe. Use when asked to remix, customize or personalize a gallery animation, swap a 3D model into a showcase, or iterate a fetched program as versions.

Habilidades Relacionadas