Communitygithub.com

kinyias/hyperframes-templates

기존 단일 주제 토킹헤드 비디오에 수정 없이 자막을 추가하거나, 주제 뒤에 삽입되는 시네마틱 자막, VFX 자막, '炸/特效/酷炫字幕' 또는 35스타일 카탈로그의 명명된 아이덴티티를 적용합니다.

hyperframes-templates란 무엇인가요?

이 스킬은 기존 단일 주제 토킹헤드 비디오에 자막을 추가하는 로컬 워크플로우를 제공합니다. 비디오 자체는 편집하지 않고, 자막만 추가합니다. 사용자는 35가지 아이덴티티(클래식 10개 + 테마 25개)가 있는 카탈로그에서 시각적 아이덴티티를 선택하며, 백엔드 엔진(Standard, Cinematic, Theme)은 내부적으로 결정됩니다. 기본적으로 'anchor' 레일(하단 자막)을 사용하며, 사용자가 명시적으로 완전한 시네마틱 처리를 요청할 때만 모든 단어를 주제 뒤에 삽입(embed)합니다. 이 워크플로우는 로컬에서 완전히 실행되며, 전사(transcription) 및 주제 매팅(subject matting)을 포함합니다. 다중 샷 영상은 적용 전에 분할해야 합니다. 마지막으로 자막이 추가된 최종 비디오를 생성합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kinyias/hyperframes-templates/tree/HEAD/.agents/skills/embedded-captions

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

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

문서

플러그인 설치: 설정 또는 업데이트 명령 전에, 이 스킬이 HyperFrames 플러그인 내부에 있을 때는 플러그인 실행 규칙을 따르십시오. 독립 설치의 경우 아래 업데이트 지침을 따르십시오.

먼저, 이 스킬을 최신 상태로 유지하십시오 — 실행 전에 사용자 확인을 받으십시오: npx hyperframes skills update embedded-captions. 모두 최신 상태이면 빠르게 아무 작업도 하지 않습니다. 그렇지 않으면 이 스킬과 그것이 의존하는 핵심 도메인 스킬을 사용하기 전에 업데이트합니다.

임베디드 캡션

하나의 카탈로그, 미리 선택 (CATALOG.md — 35가지 아이덴티티; 그 뒤에 있는 엔진은 백엔드 세부 사항입니다). 표준 (기본값)은 깨끗한 축어적 레일 (대부분의 텍스트를 전달하는 하단 자막) + 장면 뒤에 주제 뒤에 합성되는 임베드 클라이맥스를 만듭니다. 시네마틱은 순수 임베드입니다 — 레일 없이, 모든 캡션이 주제 뒤에 합성됩니다 (히어로 타이포그래피, 누적, 효과로서의 폐색). 테마는 완전한 테마 헌법입니다 — 바디 패러다임 × 히어로 세트피스 × 전면 효과 × 플레이트 반응, 레지스트리에서 구성됨 (themes/README.md): ordnance terminal neonsign stardust stomp. 대부분의 설명 / 내레이션은 표준입니다; 임베드는 드물고 얻기 힘든 정점입니다 — 모든 단어를 임베드하는 것은 일반적인 실수입니다; 테마는 VFX 수준의 요청 ("炸", "特效", "像 AE 做的")에 사용됩니다.


런타임 전제 조건

플러그인 설치의 경우, 매팅, 전사 및 렌더링을 위해 번들로 제공되고 매니페스트에 고정된 CLI를 사용합니다. 소스 체크아웃이 필요하지 않습니다. 로컬 미리보기 및 캡션 측정 도우미에는 Sharp, Puppeteer (Chromium 브라우저 포함) 및 GSAP도 필요합니다. 읽기 전용 플러그인이 아닌 캡션 프로젝트에 설치하십시오:

npm install --prefix <project> --save-dev --save-exact [email protected] [email protected] [email protected]

프로젝트의 잠금 파일을 유지하십시오. 이러한 종속성이 이미 존재하는 경우 덮어쓰지 말고 잠긴 버전을 사용하십시오. Bash와 FFmpeg/ffprobe가 PATH에 있어야 합니다. 매팅 및 전사는 처음 사용 시 자체 모델을 다운로드할 수 있습니다.

렌더링은 CLI가 성공적으로 종료될 때까지 기다린 후 합성합니다. 이전 HF_TIMEOUT_S 셸 와치독은 더 이상 사용되지 않습니다: 큰 부분 파일이 렌더링이 완료되었음을 증명하지 않습니다. 명시적 빌드 체크아웃 인수 또는 HYPERFRAMES_ROOT는 플러그인 핀 대신 기여자 CLI를 선택합니다. CLI/터미널을 통해 보통 방식으로 중단된 렌더링을 취소하십시오; 캡션 도우미는 프로세스 스냅샷에서 렌더링을 강제 종료하거나 복구하지 않습니다.

운영 흐름 (요약)

/hyperframes를 통해 라우팅되며, 의도 레이어는 입력(클립)만 확인하고 지연된 요청으로 아이덴티티 선택을 알립니다 — 후보 목록은 프로브된 클립이 필요하므로 아래 1단계에 유지됩니다; 레이어의 실행 형태 질문은 적용되지 않습니다 (영상은 손대지 않고, 검토할 스토리보드가 없습니다). BRIEF.md가 있는 경우, 확인된 입력과 사용자 메모를 전달합니다 — 먼저 읽으십시오.

아래 제작 산문은 깁니다. 파이프라인 자체는 짧습니다 — 그리고 결정적인 모든 것은 수동으로 작성되지 않고 계산되거나 컴파일됩니다:

  1. 의사 결정 게이트 (나쁜 클립 거부) → CATALOG.md에서 하나의 아이덴티티 선택 (35가지 아이덴티티; 엔진/컴파일러는 조회로 파생됨 — 모드/카테고리 질문을 표시하지 마십시오)
  2. hyperframes init (프로젝트 디렉토리가 이미 비디오와 함께 존재하는 경우 건너뜁니다 — matte.cjs/transcribe.cjs는 디렉토리의 모든 비디오를 source.mp4로 채택합니다) → bash scripts/prepare.sh <project> (매팅 ∥ 전사 ∥ 오디오 엔벨로프를 병렬로 실행한 후, 장면 팔레트/광학/조명과 함께 safe-zones v2 — 하나의 명령, 잊은 것 없음)
  3. 크리에이티브 선택의 작은 JSON 작성 (먼저 safe-zones.json 읽기): Cinematic → cinematic.json → make-cinematic.cjs (plan.json을 파생 및 컴파일); Theme → theme.json → make-theme.cjs (rail/panel/poem/takeover 패러다임; anchor는 조용한 레일 기본값)
  4. 시각적 QA: node scripts/preview-frames.cjs <project> → 약 2초/프레임의 충실한 합성 미리보기 (렌더링하지 않음). 렌더링을 수행하기 전에 § 시각적 QA를 확인하십시오.
  5. render-and-composite.sh → 게이트 (타이밍 / 폐색+히어로 / 오버플로우 / 핸드오프) → final.mp4

사람들이 놓치는 중요한 규칙:

  • 레일 (기본값) + 임베드 (승격). drop (필러, 표시되지 않음) / rail (축어적 하단 자막, 앞에, 대부분의 텍스트 전달) / embed (주제 뒤에 합성된 정점 단어). 표준 모드는 둘 다 수행하며, 정점(들)만 임베드합니다. § 캡션 모델 참조.
  • 비디오는 변하지 않고 제공됩니다 (표준/시네마틱; 테마 모드의 PLATE 예산은 유일한 허용 예외입니다 — 각 테마 DNA에 정의된 등록 게이트 반응 비트(차지-딤, 펀치, 쉐이크, 그레인)가 매트 합성 후 적용되어 주제+텍스트+플레이트가 하나의 프레임으로 움직입니다) — 캡션이 유일하게 추가되는 것입니다. 매트는 주제가 임베드 트랙을 가릴 수 있게 할 뿐입니다. 영상을 그레이딩/리컬러/스캔라인 하지 마십시오.
  • 두 가지 규칙집: 레일 → references/rail.md (얇음), 임베드 제작 → references/composition-craft.md (풍부함, 임베드 전용). 필요에 따라 훑어보십시오.

캡션 모델 — 레일 + 임베드

모든 말한 구절은 다음 세 가지 중 하나입니다:

설명표시 방법
drop필러 — 음/어, 더듬기, 자가 수정표시되지 않음
rail기본값 — 일반적인 말한 내용 (축어적)깨끗한 하단 자막, 앞, 읽기 쉬움. 강조 단어는 인라인 강조 하이라이트(액센트 컬러 / 활성 단어 팝)를 얻을 수 있음 — 레일에 유지됩니다.
embed승격된 정점 — 핵심 비트주제 뒤에 합성된 하나의 큰 단어 (매트 폐색), 디자인된 진입 및 종료

레일은 대부분의 텍스트를 전달하며, 임베드는 드물고 얻기 힘든 정점입니다. 희소성은 클립당이 아니라 비트/블록당입니다: 블록(생각)당 ≤1 히어로, 두 개가 동시에 보이지 않음, 히어로 윈도우 사이에 최소한 비트의 공기 (컴파일러는 0.6초 미만에서 경고). 짧은 클립 → 보통 1–2개; 긴 설명 → 섹션당 약 하나. 여러 히어로 중에서 가장 큰 작성된 히어로가 APEX입니다 (그것만 전체 잠금 임베드 + 너비 맞춤 상승을 얻습니다); 더 작은 히어로는 마이너 정점으로, 해당 열을 확대된 강조 라인(전경, 감쇠된 모션)으로 타고 내려갑니다 — 모든 비트가 매트 쇼케이스를 필요로 하는 것은 아닙니다. 이것이 정점을 이벤트로 유지하는 이유입니다. 모든 단어를 임베드하는 것은 여전히 일반적인 실수입니다.

레일-표면 아이덴티티는 정확히 이것을 만듭니다 (레일 = rail.html, 임베드 = index.html의 클라이맥스). 컬럼-플로우 아이덴티티는 레일을 버리고 모든 것을 임베드 스타일로 만듭니다 — 단어를 읽어야 하는 설명/내레이션에는 절대 권장하지 않고, 분위기 중심 요청에만 권장합니다 (CATALOG.md는 아이덴티티별로 인코딩합니다).


0단계 — 카탈로그에서 하나의 아이덴티티 선택

하나의 프론트엔드, 세 가지 백엔드. 사용자는 CATALOG.md에서 아이덴티티를 선택합니다 (35개 항목: 클래식 10개 + 테마 25개); 엔진, 컴파일러 및 작성 파일은 카탈로그 행에서 조회로 파생됩니다. "표준 vs 시네마틱 vs 테마"를 질문으로 표시하지 마십시오 — 이들은 백엔드 이름입니다 (제품은 여러 엔진이 있더라도 하나의 UX를 가집니다). 카탈로그는 라우팅에 필요한 모든 것을 인코딩합니다: 독해 표면, 음성, 권장 대상, 장면 요구 사항, 진정으로 가까운 쌍(loud↔ordnance, neon↔neonsign, cream↔stardust)에 대한 인접성 참고 사항.

아이덴티티 선택은 선호도 게이트입니다 (../hyperframes/references/brief-contract.md § 1): 자율 모드(놀라게 해줘/대신 결정해 줘)에서는 스스로 후보 목록에서 선택하고 질문하는 대신 한 줄 이유를 명시하십시오.

절차: 클립 프로브 → 카탈로그에서 2–3개의 아이덴티티 후보 목록 작성 → 한 줄 이유와 함께 하나 추천 → 사용자가 선택 (자율 모드: 당신이 선택하고 이유 명시) → 해당 아이덴티티의 파일 작성. 아이덴티티는 엔진에 고정됩니다 (교차 조합 없음; 하나를 여는 것은 검증 이벤트입니다 — dna/README.md 참조).

항상 추천을 제시하고 작성하기 전에 사용자가 선택하도록 하십시오. 조용히 기본값으로 돌아가지 마십시오.

(전체 아이덴티티 테이블은 CATALOG.md에 있습니다 — 라우팅의 단일 진실 소스. 아래 엔진 문서는 각 백엔드의 작성 계약을 설명합니다.)

CATALOG.md는 여기서 전체 답변 공간입니다: 이 워크플로우는 HyperFrames 컴포넌트 레지스트리를 검색하지 않습니다. 합성 워크플로우는 명명된 룩을 작성하기 전에 npx hyperframes catalog를 실행합니다. 이 워크플로우는 그렇게 해서는 안 됩니다. 그 엔진은 잠긴 컴파일러로, cinematic.json/theme.json을 소비하고 합성을 자체적으로 출력하므로 레지스트리 항목(caption-* 블록 포함)은 마운트할 대상이 없습니다. 레지스트리 블록은 디자인된 캔버스에 텍스트 스타일을 적용합니다. 이 스킬은 매트를 통해 누군가의 영상에 캡션을 입힙니다. 어떤 아이덴티티도 요청에 맞지 않으면, 카탈로그 밖으로 나가는 대신 말하고 가장 가까운 것을 선택하십시오.

추천 휴리스틱: CATALOG.md의 "후보 목록 작성 휴리스틱"을 사용하십시오 — 이는 아이덴티티 수준입니다 (예: "炸"는 ordnance/stomp/terminal/loud를 후보로 하고 무엇이 폭발해야 하는지에 따라 선택), 절대 카테고리 수준이 아닙니다. 확실하지 않으면 → anchor.

  • Cinematic → 잠긴 템플릿에 대해 cinematic.json을 작성하고, make-cinematic.cjs로 컴파일합니다.
  • Theme → themes/README.md를 읽고, theme.json을 작성하고, bash scripts/render-theme.sh를 실행합니다 (컴파일 + 렌더 + 플레이트 반응 → final_fx.mp4).

의사 결정 게이트 — 먼저 실행

비디오를 프로브하고 두 모드 중 하나를 진행하기 전에 장면을 분류하십시오.

ffprobe <video.mp4>                    # 사양
ffmpeg -ss <t> -i <video.mp4> -vframes 1 sample.png   # 20/50/80% 지점

샘플을 읽으십시오. 다음 경우 거부:

  • 여러 화자 / 하드 컷 (각 샷을 분할 및 렌더링하거나 거부)
  • 사람 주제 없음 (이 스킬은 토킹헤드용)
  • 3초 미만, 말 없음, 또는 얼굴이 명확하게 보이지 않음 — transcribe.cjs는 오디오가 거의 무음일 때 경고합니다 (Whisper는 침묵 위에 "Thank you."와 같은 단어를 환각합니다); 따르고 가짜 단어로 캡션을 만들지 말고 거부
  • 소스에 이미 하드코딩된 자막/캡션/무거운 텍스트 그래픽이 있음 — 두 번째 캡션 시스템을 추가하면 충돌이 발생하고 영상은 변경되지 않습니다 (덮기/인페인팅 없음). 하드코딩된 텍스트는 종종 클립 중간에만 나타납니다: 1fps 콘택트 시트를 샘플링하십시오 (ffmpeg -i in.mp4 -vf "fps=1,scale=160:-1,tile=10x5" sheet.png), 3개의 스팟 프레임을 신뢰하지 마십시오.
  • 전사가 쓰레기 — 비원어민/강한 악센트 음성은 자신감 있는 횡설수설로 전사될 수 있습니다. 작성 전에 transcript.json을 상식적으로 읽으십시오. 언어로 분석되지 않으면 WHISPER_MODEL=medium을 한 번 시도하고, 그렇지 않으면 거부 (가짜 단어의 축어적 레일은 캡션 없는 것보다 나쁩니다).
  • 빠른 모션이 있는 흔들리는 핸드헬드 (매트 깜박임)

사전 점검 프로브 (비용 없음, 최악의 실패 방지)

  1. 샷 컷 프로브. 20%, 50%, 80% 지점에서 프레임 샘플링. 다른 주제/장면이 나타나면 컷 전에 클립을 자릅니다.
  2. 레터박스/필러박스 프로브. 첫 번째 프레임에 검은 막대가 있습니까? 안전한 콘텐츠 사각형을 계산하고 그 안에 캡션 배치를 제한하십시오.
  3. 휘도 프로브. 캡션 영역의 평균 휘도를 샘플링하십시오 — 60 미만 → 밝은 텍스트가 그대로 읽힘, 60-180 → 글리프 스크림 추가, 180+ → 불투명 텍스트 + 스크림 (절대 밝은 텍스트를 그대로 두지 마십시오). 시네마틱 템플릿은 크림+screen이며 잠겨 있습니다 — 이 프로브를 사용하여 _적합한 아이덴티티를 선택_하십시오 (밝은 장면 → ink, 또는 불투명 레일 anchor 테마), 절대 색상을 다시 지정하지 마십시오.
  4. 분위기에 따른 아이덴티티 추천 (당신이 추천하고 사용자가 선택 — 0단계 + CATALOG.md 참조). 설명 / 인터뷰 / 단어를 반드시 읽어야 함 → 레일/패널-표면 아이덴티티; 시적 / 소셜 / "시네마틱" → 레지스터에 따른 컬럼-플로우 아이덴티티; "炸 / 特效 / VFX" / 명명된 세계 → 테마 아이덴티티. 확실하지 않으면 → anchor (단어 읽기 가능, 장면 안전) — 그러나 후보 목록을 제시하고 사용자가 선택하게 하십시오.

파이프라인 — 5단계

1. hyperframes init <project> --non-interactive --video <video.mp4> --skill=embedded-captions
2. bash scripts/prepare.sh <project>       # 매팅 ∥ 전사 (병렬) → safe-zones. 하나의 명령.
                                           #   → frames_fg/ transcript.json safe-zones.json
3. [에이전트 단계 — 유일한 창의적 단계] 작은 JSON 작성, 아래 모드 참조
   Cinematic: cinematic.json 작성 → node scripts/make-cinematic.cjs <project>
   Theme:     theme.json 작성 → bash scripts/render-theme.sh <project>   (컴파일 + 렌더 + 플레이트 효과)
4. node scripts/preview-frames.cjs <project>   # ~2초/프레임 합성 미리보기 → § 시각적 QA (렌더링 전)
5. bash scripts/render-and-composite.sh <project>  # 게이트 → final.mp4 + history/ 스냅샷
   (테마 모드: 3b/5단계 건너뛰기 — render-theme.sh가 이미 컴파일 + render-and-composite
    + _postfx.sh를 실행합니다; 결과물은 final_fx.mp4이고, final.mp4는 플레이트 반응 전 상태입니다)

1단계의 init는 설치된 스킬을 GitHub의 최신 버전과 비교하여 오래된 것이 있으면 글로벌 세트를 업데이트합니다.

3단계는 모드에 따라 다릅니다:

3단계 — 시네마틱 모드 (순수 임베드)

  1. 먼저 safe-zones.json을 읽으십시오. 내레이션 평면은 zones.hugLeft/hugRight 에 들어갑니다 — 실루엣에 인접한 깨끗한 스트립 (몸에서 먼 텍스트는 부동으로 읽히고 임베드되지 않음; 먼 모서리는 기본값이 아니라 대체 값입니다). 히어로는 기본적으로 heroAnchor/heroBands.best (주제에 중앙, ~30–55% 가려짐)에 위치합니다. recommendation:"fg"는 가독성을 위해 내레이션을 앞으로 이동시킵니다; 히어로는 heroBands.feasible이 가능할 때 항상 임베드 상태를 유지합니다 — 히어로-전경은 최후의 수단입니다.
  2. **DNA는 0단계에서 선택한 아이덴티티입니다

Individual skills in this repo

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

관련 스킬