Communitygithub.com

원테이크

프로모션, 론칭, 리캡 또는 비하인드 영상을 한 번에 제작합니다: 장면, 참고 자료, 포맷과 비율, 길이와 플랫폼 제한, 소스 저장소와 사이트, 언어, 음악, 음성 및 자막, 브랜드 등 모든 질문을 미리 한 번에 물은 후, 스토리보드, 빌드, 스코어, 모든 포맷 렌더링, 각 파일 QA를 추가 질문 없이 수행합니다. 애니메이션에 맞춰진 오리지널 합성 스코어(스템 및 효과음 포함), git에서 가져온 사실, 각 비율별로 재배치된 단일 소스, 그리고 음량, 검은색/정지/무음 프레임, 엔드 카드 유지 시간, 휴대폰에서의 텍스트 크기 및 플랫폼 안전 영역에 대한 QA 패스를 제공합니다. 공동 창작 세션이 아닌 완전한 멀티 포맷 비디오를 엔드 투 엔드로 제공하고자 할 때 사용합니다. HyperFrames 기반.

원테이크란 무엇인가요?

원테이크(one-take)는 AI 에이전트(Claude Code, Cursor, Codex 등)가 프로모션, 론칭, 리캡 또는 비하인드 영상을 한 번의 질문으로 완전 자동 제작할 수 있게 해주는 전문 기술(skill)입니다. 사용자는 처음에 장면 구성, 참고 자료, 출력 포맷 및 비율, 길이와 플랫폼별 제한 사항, 소스 저장소(git) 및 사이트 URL, 언어, 음악 스타일, 음성 해설 및 자막, 브랜드 에셋 등 모든 필수 정보를 한 번에 제공합니다. 이후 에이전트는 추가 질문 없이 스토리보드 작성, HyperFrames 기반 비디오 빌드, 오리지널 합성 스코어(스템 및 효과음 포함) 제작, 모든 포맷(예: 와이드, 스퀘어, 세로형) 렌더링, 그리고 각 파일에 대한 엄격한 QA(음량, 프레임 문제, 엔드 카드 유지, 텍스트 가독성 등)를 자동으로 수행합니다. 이 기술은 특히 공동 창작이 아닌 완전한 결과물이 필요할 때 유용합니다. 사용자가 '이 저장소의 릴리스 비디오를 만들어 줘'와 같이 명확한 요청을 하면, 원테이크는 모든 결정을 사전에 확정하고 중간에 질문을 하지 않습니다. 모든 수치는 git 로그나 사용자가 제공한 소스에서 자동으로 추출되며, 허구의 통계나 인용을 생성하지 않습니다. 음악은 장면 에너지와 큐(cue)를 기반으로 합성되어 저작권 문제가 없습니다. HyperFrames 및 관련 확장 기술(humanizer, figma, media-use)과 함께 사용할 때 최적의 성능을 발휘합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add KaranO-Dev/one-take-skill

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

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

문서

원테이크은(는) 무엇을 하나요?

모든 것을 한 번에 물어보세요. 그런 다음 전체 영화, 모든 포맷을 검사하여 추가 질문 없이 제작합니다.

이 기술은 오케스트레이션을 수행하며, HyperFrames가 렌더링을 담당합니다. hyperframes, hyperframes-core, hyperframes-animation 기술이 필요하며, hyperframes-registry, hyperframes-keyframes, media-use, figma 및 humanizer가 함께 있으면 더 좋습니다. hyperframes-core가 없으면 중단하고 설치 명령어(npx skills add heygen-com/hyperframes)를 제공하세요.

아래 SKILL_DIR은 이 기술의 폴더를 의미합니다. 스크립트는 일반 Node(≥ 22)와 ffmpeg를 사용하며, 별도 설치는 필요 없습니다.

계약 사항

  1. 한 번의 인테이크 라운드. 먼저 감지(detect)한 후, 한 번만 질문합니다(Phase 1). 답변을 받은 후에는 더 이상 질문하지 않습니다. 유일한 예외는 기본값으로 처리할 수 없는 하드 블로커(예: 존재하지 않는 파일, 로딩을 거부하는 사이트)가 있을 때입니다. 그때는 해당 질문 하나만 정확히 묻고 계속 진행합니다.
  2. 인테이크 답변은 렌더링을 승인합니다. 사용자가 명시적으로 이름을 지정하지 않은 게시, 업로드, 포스팅, 푸시 또는 다운로드를 승인하지 않습니다. 이러한 작업은 보고서 이후에 별도로 요청하세요.
  3. 사실은 계산되며, 절대 입력되지 않습니다. 화면에 표시되는 모든 숫자는 facts.json 또는 사용자가 제공한 출처에서 가져옵니다. 통계, 인용문, 로고 또는 사용후기를 절대 임의로 만들지 마세요.
  4. 화면이 소리를 결정합니다. 청취 가능해야 하는 모든 모션은 해당 순간에 T.cue()를 호출합니다. 스코어는 이러한 큐로부터 빌드되므로 사운드와 화면이 어긋나지 않습니다.
  5. 완료는 QA 통과를 의미합니다. qa.mjs가 통과하거나, 두 번의 수정 시도로도 해결할 수 없는 실패 사유가 보고서에 기록된 경우에만 파일이 전달됩니다.

Phase 0: 감지 (질문 전, 무음)

node SKILL_DIR/scripts/detect.mjs <대상 경로…> --out /tmp/one-take-detect.json
  • 현재 저장소와 사용자가 언급한 모든 경로 또는 사이트에서 실행합니다.
  • 출처별로 README 제목 및 태그라인, git 기간 및 커밋 수, 로고, 글꼴 파일 및 패밀리, 색상 토큰을 반환합니다. 또한 도구 체인(node, ffmpeg, 캐시된 hyperframes 버전, Chrome, heygen CLI, 음악 API 키 설정 여부)도 반환합니다.
  • 대상 프로젝트에 이미 take.json이 있으면 재개(resume)로 간주합니다. 이를 읽고 인테이크를 건너뛴 후, 출력이 누락된 첫 번째 단계부터 계속 진행합니다.

Phase 1: 인테이크 (한 메시지, 한 라운드)

references/intake.md를 읽으세요. 한 메시지에서:

  1. 인테이크 시트를 보여줍니다: 감지 결과나 권장 기본값으로 미리 채워진 각 필드를 한 줄씩 표시합니다. 사용자는 잘못된 부분만 수정합니다.

  2. AskUserQuestion을 한 번 호출하여 작업을 가장 많이 변경하는 네 가지 결정 사항(포맷(다중 선택), 길이, 사운드, 음성/자막)을 묻습니다. 질문 텍스트에는 시트 변경 사항이 있으면 답변에 메모로 추가하라고 안내합니다.

    AskUserQuestion을 사용할 수 없으면 동일한 네 가지를 시트 끝에 번호 선택 항목으로 넣고 한 번의 답변을 요청합니다.

그런 다음 다시 묻지 않고:

  • take.json을 작성합니다(스키마: references/take-json.md). 언어 코드, 포맷 ID, 슬러그 및 output.name은 [a-z0-9][a-z0-9._-]{0,63} 패턴(대소문자 구분 없음, .. 없음)과 일치해야 하며, 그렇지 않으면 실행이 중단됩니다. 사용자가 요청하지 않는 한 hyperframes는 포함하지 마세요. 기본 버전은 scripts/lib/platforms.mjs(HF_VERSION, 0.8.223)에 고정되어 있습니다.
  • workflow: general-video, flow: automation, storyboard: no가 포함된 HyperFrames BRIEF.md를 작성합니다. 이는 이후 /hyperframes 호출이 재인터뷰 대신 이 프로젝트를 재개함을 의미합니다.
  • BRIEF.md 본문에 답변(포맷, 사운드, 자막, 플랫폼 제한)을 기록합니다.

Phase 2: 출처

  • Git 사실. node SKILL_DIR/scripts/facts.mjs --repo <경로> [--repo …] [--since …] --out <프로젝트>/facts.json을 실행합니다. 커밋, 기간, 활동 일수, 최장 연속 활동 일수, 가장 바쁜 날, 언어별 라인 수, 추가 및 제거된 라인, 주요 커밋 단어, 첫 번째 및 마지막 커밋 제목을 수집합니다. 작성자 이름과 이메일은 기록되지 않습니다. 사용자가 허용한 사실만 사용하세요.
  • 사이트. 표시할 URL이 있으면 npx hyperframes capture <url> -o <프로젝트>/src/assets/cap을 실행합니다. ok:false 또는 BLOCKED.md가 반환되면 중단합니다. 그것은 블로커입니다.
  • 참고 자료. 각 참고 자료에 대해 STORYBOARD.md에 한 줄씩 무엇을 가져올지(페이스, 유형, 색상, 전환) 기록합니다. Figma 링크인 경우 먼저 /figma를 실행합니다.
  • 브랜드. 로고 SVG와 글꼴 파일을 src/assets/brand 및 src/assets/fonts에 복사하고, take.json fonts에 선언하며, 템플릿의 :root에 색상 토큰을 추가합니다.

Phase 3: 방향 설정 및 스토리보드

시각적인 것을 작성하기 전에 references/direction.md를 읽으세요. STORYBOARD.md를 작성합니다:

  • 방향 설정, 한 문단: 하나의 아이디어, 시그니처 무브, 유형 페어링, 팔레트, 각 선택이 나온 참고 자료.
  • 템포 먼저. 대상 길이가 정수 배수(4/4)가 되도록 bpm을 선택합니다. 그런 다음 각 장면에 길이(마디), energy(0–1, 스코어 편곡을 결정), 진입 방식(in)을 지정합니다.
  • 장면 테이블: id, 마디, 에너지, 화면에 표시될 내용, 모션, 큐, 카피.
    • 마지막 장면은 엔드 카드이며, end: true로 표시하고, 3초 이상 완전히 유지할 수 있을 만큼의 마디를 가집니다.
    • 컷다운에 사용할 수 있는 장면은 optional(1–9, 높을수록 우선)로 표시합니다.
  • 카피는 copy/<lang>.json에 키당 한 줄의 텍스트로 저장합니다. 사용 가능하면 /humanizer를 실행합니다. 헤드라인은 화면에 표시되는 시간 내에 두 번 읽을 수 있을 만큼 짧게 유지합니다.

Phase 4: 빌드

  • SKILL_DIR/templates/index.html을 <프로젝트>/src/index.html로 복사하고 스토리보드의 장면으로 다시 작성합니다.
  • references/kit.md(T.* API)와 hyperframes-core의 필수 규칙을 읽으세요. 모션에 대해서는 hyperframes-animation 규칙과 청사진을 읽으세요. 명명된 효과를 수동으로 빌드하기 전에 hyperframes-registry를 검색하세요.

모든 포맷과 QA를 정확하게 유지하는 규칙:

  • 장면은 최상위 <section class="clip scene" data-scene="id">이며, 절대 중첩되지 않고, 인라인 style을 사용하지 않습니다.
  • 디자인 px 단위의 크기는 --u(짧은 쪽의 1%)를 통해 지정합니다. 읽을 수 있는 텍스트는 --t-min(3.4u ≈ 1080에서 37px) 아래여서는 안 됩니다.
  • 읽을 수 있는 텍스트는 해당 포맷의 플랫폼 UI 영역인 .safe 안에 유지합니다.
  • 하나의 레이아웃을 확장하는 대신 .f-tall, .f-wide, .f-square, .f-portrait 규칙을 사용하여 포맷별로 재배치합니다.
  • 다음 장면의 전환이 이를 덮기 전에 현재 장면의 단어를 지웁니다(s.end 근처에서 T.sink/T.leave). 리빌 아래의 텍스트는 레이아웃 검사에 실패합니다.
  • 모든 장면은 움직입니다: 장면 전체에 T.drift 카메라를 적용합니다. 엔드 카드 전에는 아무것도 정지해 있지 않습니다.
  • 엔드 카드가 완료되는 순간 T.endCard(t)를 호출합니다. 마지막 프레임은 여전히 엔드 카드를 표시해야 합니다: 홀드 동안 페이드 아웃하지 마세요.
  • 들려야 하는 모든 것에 큐를 지정합니다(references/sound.md에 카테고리 나열). 대부분의 키트 헬퍼는 기본적으로 큐를 지정합니다. 특정 순간을 무음으로 유지하려면 cue: false를 전달합니다.
  • 숫자는 T.facts 또는 카피에서 가져옵니다. T.count는 유한한 숫자가 필요하며, 없으면 예외를 발생시킵니다. 따라서 누락된 사실이 화면에 임의의 숫자를 표시하는 대신 프로브를 중단시킵니다.
  • 스크립트를 window.__timelines["main"] = T.done();으로 종료합니다. T.done()은 모든 트윈이 추가된 후 타임라인을 한 번 등록하며, 템플릿이 해당 줄에서 이를 반복합니다. 모든 트윈을 먼저 빌드하고, font-ready 또는 다른 비동기 콜백 내부가 아닌 곳에서 빌드하세요: HyperFrames lint는 조기 등록을 거부합니다.

Phase 5: 드래프트 패스

node SKILL_DIR/scripts/run.mjs <프로젝트> --draft

이것은 포맷 × 언어별로 다음을 실행합니다: 빌드 → 프로브(헤드리스 Chrome에서 큐, 텍스트 크기, 엔드 카드 마크) → 스코어 → hyperframes check → 드래프트 렌더 → 인코딩 → QA → REPORT.md.

HyperFrames는 scripts/lib/platforms.mjs(HF_VERSION, 0.8.223)에 고정된 버전 또는 take.json의 hyperframes에서 실행됩니다. 첫 번째 실행은 npx로 가져오고, 빌드는 GSAP 3.14.2를 jsDelivr에서 ~/.cache/one-take/로 한 번 가져옵니다. GSAP 파일은 다운로드 후 및 캐시에서 읽을 때마다 고정된 sha256에 대해 확인됩니다. 일치하지 않는 파일은 절대 사용되지 않습니다: 잘못된 다운로드는 캐시되지 않으며, 잘못된 캐시 파일은 삭제되고 빌드가 중단됩니다. 새 복사본을 가져오려면 다시 실행하세요.

그런 다음:

  • 모든 *.sheet.jpg 콘택트 시트를 열고 살펴봅니다.
  • REPORT.md를 읽습니다.
  • 실패 및 잘못된 부분(겹침, 잘림, 데드 프레임, 너무 작은 텍스트, 맞지 않는 컷)을 수정합니다.

최대 두 번의 수정 패스가 허용됩니다. 각 패스는 run.mjs --draft를 다시 실행하며, 변경된 부분만 다시 실행하려면 --only <포맷>-<언어>를 사용합니다.

Phase 6: 최종

node SKILL_DIR/scripts/run.mjs <프로젝트>

이것은 모든 출력물의 전체 품질 렌더링입니다. 전달물은 renders/(또는 output.dir)에 저장됩니다. 각 출력물은 다음을 얻습니다:

  • <name>.mp4: x264 CRF 12, AAC 320k, faststart
  • .cover.jpg: 엔드 카드
  • .sheet.jpg
  • .qa.json

스코어 스템과 marks.json은 out/<포맷>-<언어>/score/에 보관됩니다.

Phase 7: 보고서

다음과 함께 응답합니다:

  • REPORT.md의 출력물 테이블(파일, 크기, 길이, 판정)
  • 주요 포맷의 콘택트 시트
  • 사운드에 대한 한 줄
  • 미해결 항목(있는 경우)

다음 단계를 수행하지 않고 제안합니다: 카피 게시, 더 많은 언어, 컷다운, 퍼블리싱. 사용자가 요청하지 않는 한 아무것도 게시되거나 푸시되지 않습니다.

사운드 모드

sound.mode설명
score (기본값)score.mjs가 장면 에너지를 기반으로 마디 그리드에 맞춰 배드, 밴드 및 드럼을 합성합니다: mood와 key의 코드 진행, 킥에 사이드체인, 모든 리프트에 라이저, 각 도착에 임팩트. fx 스템은 큐로부터 빌드되며, 각 큐 아래의 코드에 맞춰 조정되고 화면에서 발생하는 위치에 따라 팬됩니다. 믹싱, 리미팅 후 lufs(기본값 −14)로 투 패스 loudnorm, 트루 피크 −1.5. 오리지널이므로 라이선스가 필요 없습니다.
track사용자의 파일. score.mjs --analyze <file>(또는 npx hyperframes beats)로 bpm과 첫 비트를 얻고, bpm을 설정하고 해당 마디에 장면을 배치합니다. fx 스템이 그 위에서 재생됩니다.
library/media-use resolve --type bgm(heygen CLI 필요) 또는 해당 생성기. 결과는 track으로 사용되며, 라이선스는 sound.licence에 기록됩니다.
none오디오 요소가 전혀 없습니다.

음성 해설의 경우, npx hyperframes tts의 Kokoro 또는 사용자 녹음을 통해 src/assets/audio/vo.wav에 배치합니다. 스코어는 그 아래의 음악을 조정합니다(duckDb, 기본값 −9). 자막의 경우, npx hyperframes transcribe vo.wav --model <모델>에서 시간을 지정합니다. 번인 자막은 .safe 내부에 --t-cap 이상의 크기로 배치된 장면 텍스트입니다. 사이드카 자막의 경우, 동일한 트랜스크립트에서 각 출력물 옆에 <name>.srt를 작성합니다.

파일

  • scripts/detect.mjs, facts.mjs: 무엇이 있는지, 숫자
  • scripts/build.mjs: 하나의 소스 → out/<포맷>-<언어>/ HyperFrames 프로젝트. 크기, 안전 영역 및 장면 타이밍을 채우고, TAKE(카피, 사실, 장면)를 인라인하고, 키트와 GSAP 3.14.2(sha256 확인됨)를 벤더링하고, 컷다운을 위해 장면을 드롭합니다.
  • scripts/probe.mjs: 시간 경과에 따른 큐, 텍스트 크기 및 위치, 마크를 읽는 헤드리스 Chrome 패스
  • scripts/score.mjs: 합성 스코어, 스템, 믹스, 마스터, marks.json; 트랙의 템포를 위한 --analyze
  • scripts/encode.mjs, qa.mjs, report.mjs, run.mjs: 전달, 검사, 보고서 및 전체 실행
  • scripts/selftest.mjs: 도구 체인을 확인한 후, 실패하도록 제작된 파일에 대해 QA가 실패함을 증명합니다.
  • scripts/lib/: 공유 헬퍼(git, HF_VERSION 및 이름 확인이 포함된 플랫폼, WAV, DSP)
  • kit/take.js: 모션 키트(references/kit.md)
  • templates/index.html: 시작 스테이지
  • references/: intake.md, take-json.md, direction.md, sound.md, formats.md, qa.md, kit.md

관련 스킬