Communitygithub.com

vosjs/vos-cut

화면 녹화(vosso take)를 증거 자료로부터 제품 영상으로 편집합니다. vos CLI를 사용하여 테이크의 다이제스트를 읽고, 비트를 내레이션하고, 예외 기반으로 doc.json을 편집하고, 스틸로 검증한 후, 사람이 미세 조정할 수 있는 속성 버전을 vos.so에 푸시합니다. 모든 편집은 데이터 패치이므로 재편집 시 다시 녹화하지 않습니다. 녹화 편집이나 컷, 테이크로 제품 영상/새소식 클립 제작, 이전과 같은 스타일로 컷, 또는 여러 테이크를 한 스타일로 편집하라는 요청 시 사용하세요.

vos-cut란 무엇인가요?

vosjs/vos-cut은 vos.so 생태계에서 작동하는 AI 에이전트 기술로, 화면 녹화본(vosso take)을 증거 자료만을 바탕으로 제품 영상이나 설명 영상으로 편집합니다. 이 기술은 '보고 → 내레이션 → 예외 기반 결정 → 검증 → 푸시 → (사람 검토) → 재편집'의 반복 루프를 따르며, 모든 편집은 데이터 패치이므로 재편집 시 다시 녹화할 필요가 없습니다. 주요 지원 기능으로는 vos CLI를 통한 다이제스트 생성, 프레임 추출, 계획 수립, 렌더링, 푸시/풀 등이 있으며, Chromium이 필요합니다. 핵심 원칙은 비디오 자체를 직접 읽지 않고 `vos digest`를 통해 분석하며, 줌/속도/틸트 등의 이미 생성된 계획을 예외 기반으로 수정하는 것입니다. 특히 사람의 편집 내용을 신성시하며, 3라운드 이내에 해결되지 않으면 최상의 라운드를 푸시하고 그 이유를 설명합니다. 이 기술은 vos.so 웹사이트에서 호스팅되는 녹화본을 지원하며, Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼과 호환되어 개발자와 에이전트 사용자에게 효율적인 영상 편집 워크플로우를 제공합니다.

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

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

테이크를 증거로부터 편집하기

당신은 누군가가 만든 녹화(vosso take: recording.webm + cursor.json + meta.json + doc.json)를 편집하는 중이며, 새로 녹화하는 것이 아닙니다. 스크립트에서 녹화하는 것은 product-video 스킬입니다. 프로그램은 vos-create/vos-remix입니다.

루프는 다음과 같습니다: 보기 → 내레이션 → 예외 기반 결정 → 검증 → 푸시 → (사람 확인) → 재편집. 각 단계는 그 단계를 수행하는 명령어 이름을 나타냅니다. 문서는 doc.json입니다. 필드 및 단위에 대한 규격은 https://vos.so/llms-full.txt 에서 확인할 수 있습니다. 여기서는 절대 사람의 테이크를 다시 녹화하지 않습니다. 편집은 푸티지를 수정할 수 없으며, 푸티지가 요청을 수행할 수 없는 경우 노트에 그 사실을 명시하고 중단합니다.

설정

npm i -D @vosjs/cli   # fetch, digest, plan, frames, render, push, pull

자격 증명은 다음 순서로 사용되며 절대 출력되지 않습니다: VOS_API_KEY, 그 다음 ~/.config/vos/credentials의 첫 번째 줄, 그 다음 vos login(이 머신용 키를 발급하는 브라우저 로그인). 키는 비공개 작업만 생성하며 절대 게시할 수 없습니다. digest, frames 및 render에는 Chromium이 필요합니다.

0. 모든 내용을 재정의하는 기본 규칙

  • 비디오를 절대 읽지 마세요. 당신의 눈은 vos digest입니다: digest.json, 그 다음 sheet.png, 그 다음 결정해야 하는 곳에서만 자릅니다. 90초 테이크는 약 35개의 순간과 모든 이미지를 읽을 경우 약 25-40k 이미지 토큰입니다. 시트와 결정적 자르기를 합치면 약 10k입니다. 완료 이벤트는 예상치를 출력합니다.
  • 예외에 의해 편집하세요. 플래너(줌, 속도, 틸트)는 이미 모든 클릭, 타이핑 세션, 스크롤 실행 및 유휴 간격의 위치를 결정했습니다. 다이제스트의 plan은 해당 스팬을 보유하고 있으며 proposed는 각 순간 아래에 있는 것을 지정합니다. 이를 유지, 병합, 드롭 또는 재타이밍하고, 플래너가 알 수 없는 것(어떤 단독 클릭이 비트, 캡션, 지루하지만 유휴는 아닌 빠른 넘기기를 받을 자격이 있는지)만 추가합니다. 당신이 건드리는 모든 스팬은 "source": "manual"을 전달합니다. 드롭한 제안은 rejected ([{id, lane, in, out}], 레인 및 그 소스 범위)로 이동하여 plan --reuse가 다시 녹화하지 않고 해당 비트를 다시 제안하지 않도록 합니다. 사람이 자동 스팬을 삭제하면 스튜디오 자체에서 이를 작성합니다.
  • 카메라가 아닌 레이어로 가리키세요. 컷이 구성 요소(버튼, 카드, 코드 블록)를 가리키고 줌이 픽셀을 확대할 때, doc.json에서 html 레이어로 다시 그리십시오(overlays[] with kind: "html": 마크업, 제품 자체 스타일의 CSS, 1080p px 단위의 디자인 박스). 주제 옆에 배치하고 절대 그 위에 배치하지 마세요. 저장소에 제품의 실제 구성 요소가 있습니다. 이를 사용하세요. 마크업은 잘 구성된 XML이며 vos validate가 페인트되지 않는 것을 알려줍니다. CSS 애니메이션은 벽시계에 따라 실행되며 anim 및 motion을 위해 거부됩니다.
  • 문서의 단위는 복사하고 절대 변환하지 마세요. 순간의 focus는 줌 스팬의 cx/cy입니다. rect는 줌이 포함해야 하는 것입니다. source 범위는 푸티지 초(줌/속도/틸트/세그먼트)입니다. output 범위는 렌더링된 초(오버레이/오디오)입니다. 어디에서든 픽셀 값은 #1 실수입니다.
  • 사람의 편집은 신성합니다. 다이제스트의 doc.manual은 사람이 결정한 스팬을 계산합니다. 당신의 기본 409 이후 사람이 편집한 노드를 건드리는 푸시는 protected_conflict입니다. 요청이 해당 노드를 지정하지 않는 한 그 값을 유지하세요.
  • **혼자서 세 번의 라운드, 그 다음 사람. 라운드 = 편집 → 검증 → 프레임 → 판단. 세 번 안에 해결되지 않으면 최상의 라운드를 푸시하고 이유를 설명하세요.
  • **요청이 결정합니다. 폴더의 레시피가 그 다음 순위입니다. 이 기본값이 마지막입니다. 최근 멤버와 모순되는 레시피 줄은 노트에서 오래된 것으로 표시하고 따르지 마세요.

1. 보기

vos fetch <vosId> --media        # 당신이 녹화하지 않은 호스팅된 테이크 (문서 + 푸티지 홈)
vos pull <take> --media          # 이미 vos.so에 연결된 테이크 디렉토리
vos folder pull <slug> --media   # 프로젝트의 테이크, 레시피 포함
vos plan <take> --style <seed doc.json|vosId>   # 시리즈: 시드의 스타일을 데이터로
vos digest <take> [--transcript whisper.json] [--style <seed>]

다음 순서로 읽으세요:

  1. digest.json → take (지속 시간, 페이지, 커서/마이크 유무), moments (id, 종류, 소스/출력 윈도우, focus, rect, activity, proposed, said), plan, doc.manual. hasCursor: false인 테이크(브라우저 레코더 테이크)는 헤드/테일/씬만 나열합니다: activity로 페이스 조절, 요청이 장소를 지정하는 경우에만 줌, 노트에 테이크에 커서 트랙이 없다고 말하세요.
  2. sheet.png → 시간 순서대로 자른 이미지, id가 표시됨. 한눈에 보는 필름입니다.
  3. m<nn>.crop.png는 요청이나 레시피가 중요하게 만드는 순간들에 대해; m<nn>.full.png는 컨텍스트(어떤 페이지, 어떤 섹션)를 위해서만.

자른 이미지를 읽을 때: 초점에 있는 것(컨트롤, 필드, 콘텐츠); 그것이 말하는 것(레이블, 입력된 값); 클릭의 결과가 다음 순간의 프레임 또는 바로 뒤의 scene 순간에 보이는지. scene은 프레임 차이 점프(네비게이션, 대화 상자)입니다. 전체 프레임을 보고 이름을 지정하세요.

자른 이미지가 클릭 목록과 다른 두 가지: rect가 프레임의 대부분을 차지하는 클릭 클러스터는 DRAG(조준, 스크러빙, 물체 이동)이며 타겟이 아닙니다. activity가 약 0.1 이상으로 유지되는 "유휴" 간격은 비디오가 재생 중인 것이며 유휴가 아닙니다. 둘 다 플래너의 제안을 원하지 않습니다.

폴더가 관련된 경우, 무엇이든 결정하기 전에 그 안의 모든 .md 파일(자체 및 상속)을 읽으세요.

2. 내레이션

작업 노트에 3-6개의 비트를 작성하고, 각각에 해당 순간 id, 보여주는 내용(자른 이미지에서), 목적(레시피, 페이지 제목, said 또는 요청에서)을 포함하세요. 예시:

B1 m01-m04  갤러리: 둘러보기, 프로그램 선택            (넓게 열기, 카드 하나 줌)
B2 m05-m06  Remix가 스튜디오 열기                        (씬이 페이오프)
B3 m07-m12  노브: 리믹스 패널에서 슬라이더 다섯 번 드래그     (하나의 고정 줌, 중간 2배속)
B4 m13-m14  결과 재생                                     (릴리스, 안정화)

테이크와 함께 요청이 오지 않았습니까? 녹화(보여주는 내용, 표시될 위치, 길이)에서 하나를 유추하여 버전 노트에 명시하세요. 그래야 사람이 잘못된 경우 컷 전에 요청을 수정합니다.

요청이 비트를 지정하는 경우("내보내기 부분을 더 빠르게 만들어 줘"), 먼저 순간 id에 매핑하고 그 외부의 것은 건드리지 마세요.

3. 예외에 의해 결정하기

비트별, plan 및 레시피에 대비하여:

  • 줌. 플래너의 스팬이 비트를 구성할 때 유지합니다. 인접한 제안을 하나의 비트일 때 하나의 고정 스팬으로 병합합니다(비트당 하나의 줌, 클릭당 절대 안 됨). 비트가 아닌 클릭의 제안은 드롭합니다. 플래너가 건너뛴 단독 클릭에 스팬을 추가합니다(자른 이미지가 순간임을 보여줄 때). rect에서 레벨을 결정합니다. 작은 컨트롤은 1.8-2.2, 패널은 1.4-1.6을 원합니다. 타겟이 프레임 너비의 대부분일 때 프레이밍 린트가 레벨을 결정하므로 따르세요. cx/cy = 순간의 focus. 당신이 만드는 id: u1, u2… 편집기 녹화에서 스팬이 나타나는 LANE을 줌하고, 드래그되는 캔버스는 절대 줌하지 마세요. 탐색하는 클릭 전에 줌을 해제하여 페이지 전환이 넓게 재생되도록 하세요.
  • 속도. 타이핑/유휴/스크롤에 대한 제안을 유지합니다. activity가 낮고 비트가 필요하지 않은 구간 또는 드래그 클러스터 아래에 2배-3배를 추가합니다. 비트의 페이오프 위나 재생 중에는 절대 추가하지 마세요.
  • 틸트. 카메라 스타일에 틸트가 있고(tiltStyle/스타일의 개성) 비트가 구두점을 받을 자격이 있는 경우에만. 약 5초마다 한 포즈, ±5..18°.
  • 트림. 헤드와 테일: 중요한 첫 번째와 마지막 부분(segments)까지 자르고, 끝에 약 0.5초의 안정화 시간을 남깁니다. 로딩 화면은 자릅니다.
  • 텍스트. 말할 내용이 있는 각 비트당 하나의 캡션, 케이던스에 맞춰(5-10초마다 하나, 각 2.5-4초, 동시에 두 개 절대 안 됨), 제품의 언어와 비디오의 의도로; 하단 1/3 y ≈ 0.82; OUTPUT 초; 클릭한 컨트롤 위에 절대 배치하지 않음(검증이 경고함). 그 아래 바탕이 밝을 때(편집자 타임라인 등) box를 제공하고, 각 캡션을 자체 순간에 판단하세요. 영화당 하나의 캡션은 흐름을 설명하는 영화에는 너무 드뭅니다. 레시피나 요청이 텍스트 없음을 지시할 때만 0개가 적절합니다.
  • 스타일. 시리즈에서, 컷 전에 vos plan --style <seed>를 실행하세요. 시드의 zoomStyle/zoomParams/speedParams/tiltStyle/frame/cursor/cam/export를 복사하고 그 아래에서 자동 스팬을 재계획합니다. 레시피에서 해당 숫자를 다시 언급하지 마세요. 시드의 문서가 그들의 집입니다.

패치를 doc.json에 대한 EDITS로 작성하고, 다시 쓰지 마세요. 이해하지 못하는 필드는 유지하세요.

4. 검증

vos validate <take>                                   # 깨끗한지 확인; 프레이밍 경고를 읽고 수정하세요
vos digest <take> --no-frames                         # 재타이밍 후: 새로운 OUTPUT 시간, 동일한 프레임
vos frames <take> --at-moments --at-zooms --times 0,25%,50%,75%,100%
vos frames <take> --times <모든 캡션 시작 + 1>   # 각 캡션을 자체 바탕에서 확인
vos render <take> check.webm --range a..b --draft     # 가장 많이 변경된 비트

스틸을 https://vos.so/llms-full.txt 의 품질 루프와 폴더의 기준에 대해 판단하세요: 흐림, 크롬, 커서, 텍스트 가독성, 포스터로서의 첫 번째 및 마지막 프레임; 3초 이내에 주요 장면; 끝 안정화됨; 약 5초당 ≤1 전체 프레임 전환(ffmpeg -vf "select='gt(scene,0.12)'"으로 계산). moment-<id> 스틸과 그 <id>.crop.png는 동일한 id를 공유합니다: "거기에 있던 것"과 "컷이 보여주는 것"을 나란히.

5. 푸시

vos push <take> --label "<무엇을, 명령형, ≤60자>" --note "<편집한 요청; 소스 초가 포함된 비트; 드롭 및 추가한 내용>" [--folder <slug>]

기본은 vos.json에서 옵니다. 409 stale_base → vos pull, 그 위에 다시 적용하고, 다시 푸시하세요. 409 protected_conflict → 요청이 해당 노드를 지정하지 않는 한 사람의 값을 유지하세요(그 때만 --override <id>). 400은 필드와 제한을 출력합니다. 그런 다음 GET /api/vos/<id>, contentUrls.thumbnail을 따라가서 완료를 보고하기 전에 확인하세요.

6. 재편집 (사람이 확인함)

vos pull은 사람이 변경한 내용의 차이점 요약을 출력합니다("zoom z3: level 2.2→1.6; overlay c1 removed"). 이것이 데이터 자체의 언어로 된 피드백입니다. 그들의 말이 요청한 내용만 재편집하고, 그들의 손이 이미 고친 내용은 건드리지 마세요. 라운드를 세세요. "좋습니다"는 그들의 말이며 시드 유일의 종료 조건입니다.

7. 기억하기 (사람이 시드에 대해 승인한 후에만)

파일로 저장하고 규칙을 기록하세요. 숫자는 시드의 문서에 남습니다.

vos folder create "<시리즈>" --desc "<용도, ≤200자>"
vos folder move <vosId> --to <slug>
vos recipe push CUT.md --folder <slug>      # 적용 대상: takes, seed: <vos id>
vos recipe push BRAND.md --folder <slug>    # 적용 대상: any, seed: none

레시피는 CLAUDE.md처럼 대문자로 이름이 지정됩니다. 컬렉션이 무엇이든 자르기 전에 읽는 파일입니다. 당신이 저장하는 것은 어쨌든 대문자로 된 스템으로 저장되므로 터미널과 선반이 일치합니다.

CUT.md는 숫자가 말할 수 없는 것을 말합니다: 비트 어휘, 캡션을 받는 것과 절대 받지 않는 것, 유지 길이, 제목/종료 규칙, 길이 대역, 건너뛸 내용, 그리고 사람이 시드로 수정한 결정(차이점에서 읽음). BRAND.md: 타이포그래피, 팔레트, 배경, 음악, 모든 텍스트의 어조. 이후 멤버: 폴더를 풀고, 다이제스트하고, 시드에서 --style로 계획하고, CUT.md에 대해 자르고, --folder로 푸시합니다. 두 멤버에 걸쳐 반복되는 수정(또는 사람이 모든 멤버에 대해 명시한 하나)은 ## Agent notes 아래에 추가되고, 날짜가 기록되며, 그 위의 규칙이 일치하도록 다시 작성됩니다(vos recipe push <file> --asset <id>는 제자리에서 대체합니다. 이전 본문은 유지됩니다). 소유자의 줄을 조용히 다시 작성하지 마세요.

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.

관련 스킬