셀룰러 스타일 (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를 통해 실행됩니다.
- 프로젝트 + 빠른 전사:
$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). - 프레이밍(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). - 컷 선택:
assets/palavras.txt를 읽고assets/keeps.json작성 ({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]}). 각why는 남긴 부분과 이유를 포르투갈어로 설명. - 컷:
assets/내에서:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs→clean.mp4+edit-decisions.json생성. - 확인: 프로젝트 루트에서:
$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 -→ 일시정지가 남아 있으면 안 됨. - 스크린샷: 프로필의
pasta_prints폴더에 있는 이미지 목록(최신순)을 보고 사용하기 전에 각 후보를 확인하세요. ffmpeg으로assets/prints/에 자르기(-vf crop=w:h:x:y), 원본을assets/prints/ORIGEM.md에 기록. 적합한 스크린샷이 없으면 어떤 화면이 도움이 될지 말하고 스크린샷 없이 진행(학생이 나중에 조정으로 요청 가능). 절대 스크린샷을 만들어 내지 마세요. - 구성:
src/index.template.html편집 —ELEMENTOS블록의 요소와TEMPOS블록의 시간. 시간은$K --em video-projects/<slug> node ../../$M/ancoras.mjs "문장" "다른 문장"(프로젝트 루트)에서 가져오며, 말하는 단어 기준. 무자른 컷만. - 조립 + 확인:
$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를 수동으로 실행하지 마세요. - 전달: 포르투갈어로 짧게 응답: 비디오 위치, 잘린 부분, 사용된 스크린샷, 의문점. 절대 게시하거나 아무데도 보내지 마세요.
전달 후 조정
"가격 부분 빼줘" → keeps.json 편집, 4–5단계 반복, ancoras.mjs로 잘린 부분 이후의 모든 TEMPOS 재계산 후 8단계 반복. "자막 더 아래로" → reel.json 편집 후 8단계 반복.
"스크린샷 바꿔" → 6–8단계만. 학생이 변경 요청하지 않은 부분을 처음부터 다시 작업하지 마세요.