Communitygithub.com

robertomanfroi/videos-opus

세로 녹화(카메라를 보며 말하는 사람)를 '직접 핸드폰으로 편집한' 느낌의 Reel로 편집합니다 — 한 번에 한 단어씩 자막, 머리 위 생(raw) 스크린샷, 작은 제목, 무자른 컷, 일시정지나 반복 없음, 최대 90초. `editar` 스킬이 '셀룰러 스타일'로 위임하거나, 학생이 '셀룰러 스타일', '생(raw) 스타일', '인스타그램에서 편집한 것처럼' 요청할 때 사용합니다. 잡지 스타일은 에디토리얼 스타일, 뉴스/설명은 설명형 스타일, 광고는 광고 스타일을 사용하세요.

videos-opus란 무엇인가요?

이 스킬은 세로 방향 녹화 영상(사람이 카메라를 보며 말하는)을 마치 크리에이터 본인이 인스타그램 편집기에서 직접 편집한 것처럼 보이는 Reel 형식으로 변환합니다. 주요 특징은 한 번에 한 단어씩 나타나는 자막, 머리 위에 배치된 생(raw) 스크린샷, 작은 크기의 제목, 컷 편집(페이드/슬라이드/줌 없음), 모든 일시정지와 반복 제거, 최대 90초 길이입니다. 이 스타일은 '셀룰러 스타일', '생(raw) 스타일', '인스타그램에서 편집한 것 같은' 요청에 적합합니다. 스킬은 Claude Code, Cursor, Codex 등 주요 AI 에이전트 플랫폼에서 사용할 수 있도록 설계되었습니다. 작동 방식은 먼저 `novo-projeto.mjs`로 프로젝트를 생성하고, `keeps.json`에서 컷할 구간을 선택한 후 `cortar.mjs`로 영상을 자릅니다. 그런 다음 `transcrever.mjs`로 정확한 자막을 추출하고, `montar.mjs`로 최종 영상을 조립하며 `hyperframes`로 검증합니다. 모든 명령은 전용 런처 `$K`를 통해 실행되어 일관된 작업 흐름을 보장합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-celular

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

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

문서

셀룰러 스타일 (Estilo Celular)

유일한 규칙: 보는 사람이 크리에이터 본인이 인스타그램 편집기로 직접 편집했다고 느껴야 합니다. 절대 에이전시나 AI처럼 보여서는 안 됩니다. 의심스러우면 덜 하고, 더 생(raw)하게, 더 작게 합니다. 예쁜 모션 그래픽은 여기서 오류입니다.

시작하기 전에 ../perfil-criadora.md를 읽고 루트에 있는 perfil.json을 로드(또는 생성)하세요.

비주얼 — 절대 타협 불가

요소규칙
스크린샷(Prints)학생의 내 스크린샷 폴더에 있는 실제 스크린샷(프로필 헤더, 인사이트, 좋아요/댓글/저장, 조회수, DM, 댓글, 게시물). 자르기는 생(raw): 직각 모서리, 테두리 없음, 그림자 없음, 프레임 없음, 둥근 카드 없음. 머리 위에 배치.
머리 위 텍스트제목 글꼴(.tit), 흰색, 작게 — 제목 48–70px, 레이블 40–48px (1080 너비 기준). 스크린샷 왼쪽 가장자리에 왼쪽 정렬. 강조 색상(.y)은 가끔 한 단어에만 사용. 산세리프(.sans)는 "나쁨 / 좋음 / 바이럴" 같은 레이블에만 사용.
그림자뒤에 벽이 밝은 경우에만(.sh). 텍스트 뒤에 상자, 배경, 유리 절대 금지.
모션없음. 요소는 무자른 컷(show()/hide())으로 들어오고 나갑니다. 페이드, 슬라이드, 줌, 바운스 없음.
이모지템플릿에 실제 문자(✅ ❌ 🔥 ❤️ 👇 🚨 …); montar.mjs가 Twemoji 아트로 교체합니다. 절대 아이콘을 직접 그리지 마세요.
자막한 번에 한 단어씩, 54px, 흰색에 부드러운 그림자(외곽선 절대 금지). 가슴 중앙, 턱 바로 아래에 정렬(reel.json의 capTop). 단어별 무자른 컷.
고정 제목주제 제목은 위에서 스크린샷이 바뀌는 동안 오랫동안 화면에 유지될 수 있습니다.
목록이모지 + 단어 체크리스트(✅ 자막 / ❌ 제목), 말하는 단어에 따라 항목별로 공개.
목업(Mockups)사용 자제. 실제 스크린샷을 사용하세요. 스크린샷이 없고 학생이 요청한 경우에만 목업을 그리세요.

컷 규칙

  • 호흡이나 일시정지 없음: -30dB 미만이 0.15초 이상 지속되면 모두 제거됩니다(cortar.mjs가 자동 처리).
  • 모든 반복, 잘못된 시작, 다시 말한 부분을 제거하세요. 가장 깔끔한 마지막 버전을 유지하세요.
  • 전사 도구는 반복을 숨기고 타이밍을 잘못 맞춥니다. 자른 후에는 항상 clean.mp4를 다시 전사하고, 처음부터 끝까지 읽으며 이중으로 된 문장, 잘린 단어, 누락된 동사를 찾으세요. 깔끔해질 때까지 다시 자르세요.
  • 최대 90초. 학생이 다른 것을 요청하지 않는 한. 전달 시 무엇이 제외되었는지 알려주세요.
  • J/L 컷은 기본적으로 켜져 있음(--jl 6 더 부드럽게, --no-jl 끄기).

속도 규칙 (학생의 PC가 느릴 수 있음 — 아래 단계보다 우선함)

  • novo-projeto.mjs의 전사는 이미 --rapido입니다(가벼운 모델, 컷 선택 용도). clean.mp4의 재전사(자막용)는 정밀 모델을 사용합니다 — 컷 버전당 한 번만 실행하고, 조정할 때마다 실행하지 마세요.
  • 모든 이음새는 한 번의 호출(모델 로드 한 번)로 확인하세요: $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,… (타임라인의 시간). 절대 창(window)별로 하지 마세요.
  • 프레임만 보려고 초안 전체를 렌더링하지 마세요. 대신 $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots (요소가 변경될 때마다 한 번)을 사용하고 PNG를 확인하세요. 스냅샷이 올바를 때 한 번 비디오를 렌더링하세요. 요청된 변경 사항이 있을 때만 다시 렌더링하세요.
  • raw.mp4 / clean.mp4의 인코더는 자동으로 선택됩니다(NVIDIA / Intel / AMD / Apple, 없으면 CPU). 변경하지 마세요.
  • 각 느린 단계 전에, 실행 중인 작업과 몇 분 정도 걸릴 수 있음을 포르투갈어로 한 줄 짧게 알리세요("동영상을 전사하는 중입니다 — PC에서 몇 분 정도 걸릴 수 있습니다."). 대기가 멈춘 것처럼 보이지 않도록 하세요.

워크플로우 (모든 명령은 런처 $K를 통해)

M=.claude/skills/_motor · K = videos-opus 스킬 런처: "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit, 여기서 <VO>는 videos-opus 스킬 폴더입니다(이 가이드를 읽으라고 보낸 SKILL.md가 있는 폴더). 런처는 휴대용 프로그램을 경로에 추가하고 키트 작업 폴더에서 실행합니다($K pasta로 확인 가능; 프로젝트는 <pasta>\video-projects\<slug>에 있습니다). $K --em <subpasta> …는 해당 하위 폴더 내에서 실행됩니다. npx, Python, 또는 단독 node는 사용하지 마세요. 모든 것은 $K를 통해 실행됩니다.

  1. 프로젝트 + 빠른 전사: $K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular → video-projects/<slug>/에 assets/raw.mp4(1080×1920, 30 fps), assets/raw.json, assets/palavras.txt, 폰트 및 src/index.template.html 생성. slug는 짧고, 소문자이며, 하이픈 사용(promo-engrene).
  2. 프레이밍(Framing): raw의 접촉 스냅샷 생성($K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contato.png) 확인: 머리 꼭대기와 턱의 위치는? 요소는 y≈100과 머리 꼭대기 사이에 위치; 자막은 턱 아래 → 프로젝트 루트에 reel.json 작성: {"capTop": <px>}(기본값 1380).
  3. 컷 선택: assets/palavras.txt를 읽고 assets/keeps.json 작성 ({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]}). 각 why는 남긴 부분과 이유를 포르투갈어로 설명.
  4. 컷: assets/ 내에서: $K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs → clean.mp4 + edit-decisions.json 생성.
  5. 확인: 프로젝트 루트에서: $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<프로필 용어>". 반복이나 잘린 단어 발견 → 3단계로 돌아가기. 잘못 들은 단어 발견 → assets/caption-fixes.json ({"cloud":"Claude"}). $K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null - → 일시정지가 남아 있으면 안 됨.
  6. 스크린샷: 프로필의 pasta_prints 폴더에 있는 이미지 목록(최신순)을 보고 사용하기 전에 각 후보를 확인하세요. ffmpeg으로 assets/prints/에 자르기(-vf crop=w:h:x:y), 원본을 assets/prints/ORIGEM.md에 기록. 적합한 스크린샷이 없으면 어떤 화면이 도움이 될지 말하고 스크린샷 없이 진행(학생이 나중에 조정으로 요청 가능). 절대 스크린샷을 만들어 내지 마세요.
  7. 구성: src/index.template.html 편집 — ELEMENTOS 블록의 요소와 TEMPOS 블록의 시간. 시간은 $K --em video-projects/<slug> node ../../$M/ancoras.mjs "문장" "다른 문장"(프로젝트 루트)에서 가져오며, 말하는 단어 기준. 무자른 컷만.
  8. 조립 + 확인: $K --em video-projects/<slug> node ../../$M/montar.mjs → $K --em video-projects/<slug> hyperframes lint → 각 요소 변경 시 스냅샷 ($K --em video-projects/<slug> hyperframes snapshot --at …) 확인: 얼굴이 절대 가려지지 않음, 텍스트 읽기 쉬움, 스크린샷이 제목과 정렬됨. 그런 다음 렌더링 및 전달(런처를 통해, 키트 작업 폴더에서): $K node $M/renderizar.mjs <slug> — 잠금 확인, 백그라운드 렌더링, 검증 후 prontos/로 복사. 출력 3 = 아직 렌더링 중: $K node $M/renderizar.mjs <slug> --esperar를 실행하여 PRONTO가 나올 때까지 대기. 절대 $K --em video-projects/<slug> hyperframes render를 직접 실행하거나 prontos.mjs를 수동으로 실행하지 마세요.
  9. 전달: 포르투갈어로 짧게 응답: 비디오 위치, 잘린 부분, 사용된 스크린샷, 의문점. 절대 게시하거나 아무데도 보내지 마세요.

전달 후 조정

"가격 부분 빼줘" → keeps.json 편집, 4–5단계 반복, ancoras.mjs로 잘린 부분 이후의 모든 TEMPOS 재계산 후 8단계 반복. "자막 더 아래로" → reel.json 편집 후 8단계 반복. "스크린샷 바꿔" → 6–8단계만. 학생이 변경 요청하지 않은 부분을 처음부터 다시 작업하지 마세요.

Individual skills in this repo

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

관련 스킬