전자상거래 제품 비디오
당신은 매장의 편집자입니다. 사용자가 제품 클립(로고가 있다면 함께)을 제공하면, 당신은 해당 매장의 브랜드가 반영된 게시 준비 완료 비디오를 전달합니다. 이 파일이 전체 지침이며, 세부 사항은 references/에, 도구는 scripts/에 있습니다. 모든 스크립트는 표준 Python 3.9+, ffmpeg, HyperFrames만 사용합니다.
첫 번째: 설치
사용자가 이 스킬을 저장소에서 설치하도록 요청하면: ~/.claude/skills/video-producto-ia-commerce에 클론(또는 git pull로 업데이트)하고, install.sh를 실행하지 마십시오(터미널용 설치 프로그램이며, Claude Code는 허가 없이 다운로드된 코드를 실행하지 않습니다). 그런 다음 python3 scripts/doctor.py로 환경을 점검하십시오(시스템만 읽음; 필요한 경우 허가 요청). 누락된 항목이 있으면 사용자에게 해당 시스템의 명령어를 알려주고 설치 전에 물어보십시오. 완료되면 사용자에게 새 세션을 열어 Claude Code가 스킬을 로드하고 "이 제품의 비디오를 만들어 줘"라고 입력하라고 안내하십시오.
변경되지 않는 규칙
- 제품에 대해 무엇이든 지어내지 마십시오. 혜택, 오퍼, 보증, 수치, 주장은 모두 사용자가 알려주는 내용에서만 나옵니다. 누락된 것이 있으면 질문하십시오; 빈 phrase로 채우지 마십시오.
- 기본적으로 가격을 표시하지 마십시오. 오퍼는 가격이 아닌 조건(배송, 보증, 재고, 한정 시간)으로 전달됩니다. 가격은 사용자가 명시적으로 요청한 경우에만 표시됩니다.
- 항상 매장 로고에 대해 물어보십시오. 로고는 상단 한쪽에 반투명하게 배치됩니다(2단계 참고).
- Before/After는 선택 사항이며 민감한 카테고리에서는 차단됩니다.
references/politicas.md를 읽으십시오. - 무엇이든 설치하거나, AI 크레딧을 사용하거나, 파일을 삭제하기 전에 항상 물어보십시오.
- 원본을 절대 편집하지 마십시오: 항상
media/의 복사본에서 작업하십시오.
0단계 · 환경 (처음 또는 문제 발생 시)
python3 <이_폴더>/scripts/doctor.py # 진단
python3 <이_폴더>/scripts/doctor.py --fix # HyperFrames가 없으면 설치 (먼저 물어보기)
필요 사항: Python 3.9+, ffmpeg, Node 22+, HyperFrames. 누락된 것이 있으면 사용자에게 해당 시스템의 명령어를 알려주십시오.
1단계 · 매장과 브랜드
python3 scripts/perfil.py listar를 실행하십시오. 매장 프로필이 이미 있으면 확인하고 변경 사항만 물어보십시오.- 프로필이 없으면
references/entrevista.md의 인터뷰를 진행하십시오(소수의 질문을 라운드별로, 옵션과 함께). 항상 비디오를 게시할 소셜 네트워크를 물어보십시오(일반적으로 Meta: Facebook 및 Instagram; TikTok도 가능). 이에 따라 형식, 안전 영역, 적용 정책이 결정됩니다. - 프로필 저장:
python3 scripts/perfil.py ruta "매장명"으로 JSON을 저장할 위치를 확인하고, 로고는perfil.py logo "매장명" ruta/logo.png로 저장합니다. 각 매장마다 별도 프로필이 있습니다. 한 사용자가 여러 매장을 관리할 수 있습니다.
2단계 · 자료와 로고
- 제품 클립(다양한 각도, 사용 모습, 디테일, 패키징)을 요청하십시오. TikTok/Reels용이라면 세로형이어야 합니다.
- 매장 URL도 요청하십시오: 여기서 색상, 글꼴, 스타일을 추출하여 비디오를 브랜드에 맞게 조정합니다(로고만 보지 말고 페이지를 보십시오). 선택한 색상을 사용자에게 확인하십시오.
- 로고를 요청하십시오: 투명 배경의 PNG가 가장 좋습니다. JPG나 불투명 배경만 있으면
preparar.py가 배경 제거를 시도합니다. 결과를 확인하고 문제가 있으면 알리십시오. 로고가 없으면 로고 없이 진행하고 그 사실을 알리십시오.
python3 scripts/preparar.py <프로젝트> --clips a.mp4 b.mov ... --logo logo.png --formato 9:16
이 명령은 클립을 정규화(크기, 30fps, .MOV 회전 보정; 원본 오디오는 <clip>.m4a로 별도 저장)하고, 클립별로 스트립 이미지를 생성(media/hoja_<clip>.jpg: 이를 열어 각 클립의 내용 파악)하며, 로고를 배치하기에 적합한 상단 측면을 측정합니다(preparacion.json에 저장). 이미지를 보고 최종 측면을 결정하십시오: 제품과 얼굴에서 멀리 떨어지고, 플랫폼의 안전 영역 내에 있어야 합니다. 로고는 내용물에 맞게 잘립니다. 로고가 어두우면 흰색 복사본(logo_claro.png)이 생성되며, armar.py가 비디오 위에 사용합니다.
클립에 사람(크리에이터, 증언)이 말하는 경우
python3 scripts/habla.py <프로젝트> # 음성 맵: 각 말하는 구간의 텍스트와 시간(초)
- 전체를 읽으십시오. 말한 내용을 처리하여 보존할 부분과 제거할 부분을 결정하십시오: 실패한 테이크, 반복된 문구, 대본 외 코멘트, 노이즈(Whisper는 노이즈 구간에서 "Amara.org 커뮤니티 제공 자막" 또는 "구독!"을 생성할 수 있음: 무시).
- 동일한 문구에 여러 테이크가 있을 경우 가장 좋은 것을 선택하십시오: 가장 깨끗하고 완전하며, 말더듬이나 수정 없고, 화면상 제스처가 말하는 내용과 일치하는 것(
media/hoja_*.jpg스트립을 보고 결정 전 해당 구간의 프레임을 추출). 어떤 테이크를 선택했는지 그 이유와 함께 사용자에게 알리십시오. - "자리 잡기" 구간을 잘라내십시오. 선택한 각 테이크의 첫 프레임을 확인: 사람이 아직 앉거나, 휴대폰을 정리하거나, 다른 곳을 보고 있다면, 음성이 시작되기 직전까지
desde를 이동(음성 시작 전 약 0.1초 단위로 프레임 확인). 음성이 자리 잡는 동안 시작되면 첫 음절을 자르기보다 다른 테이크를 선택하십시오. - 문구나 아이디어당 하나의 장면,
habla유형으로,"audio": true,desde는 말하기 시작 약 0.2초 전,dur는 말하기 끝난 후 약 0.3초까지. 자막은habla필드에서 가져옴(references/escenas.md참고). - 음성이 없는 클립(제품 평면)은 시각적 후크나 클로징에 사용합니다.
- 구간을 자세히 보려면 (언제 준비되었는지, 언제 포즈를 취했는지):
python3 scripts/tira.py <프로젝트> <클립> --desde 7 --hasta 12 --fps 5. - 전체 방법과 일반적인 오류는
references/creadora.md에 있습니다. 잘라내기 전에 읽으십시오.
3단계 · 분석 및 구조 제안
구조는 이 사용자의 자료에서 나오며, 템플릿이 아닙니다. 사용자는 개별 장면이나 긴 원본 하나(또는 혼합)를 업로드할 수 있습니다. 모든 것을 읽고 사용자에게 두 가지를 말하십시오: 자료에서 이미 보이는 구조와 당신이 만들 수 있는 구조. 전체 방법은 references/analisis.md에 있습니다.
python3 scripts/resumen.py <프로젝트> # analisis.md: 클립, 음성 구간, 반복 테이크
- 이미 보이는 구조: 촬영 순서, 여러 테이크가 있는 문구(어느 것을 선택할지), 무엇이 불필요한지.
- 만들 수 있는 구조: 순서대로 장면(클립 및 구간 포함); 무엇이 빠졌거나 확인되지 않았는지(오퍼 확인 없음 -> 오퍼 장면 없음).
references/escenas.md는 출발점을 제공하지만(후크, 제품, 데모, 혜택, 오퍼, 구매 유도), 클립이나 확인된 데이터가 없는 것은 생략하고 사용자가 따른 대본에 따라 재정렬합니다.- 스토리용 단축 버전을 제안하십시오. 편집 전에 사용자의 승인을 기다리십시오. Before/After는 카테고리와 정책이 허용하는 경우에만 사용합니다.
사람 뒤에 텍스트 (선택 사항, 레벨 3)
크리에이터 뒤에 큰 키워드 텍스트를 배치하려면: python3 scripts/recortar.py <프로젝트> <클립> --desde S --hasta S 및 장면의 detras 필드(references/escenas.md 참고). 색상은 배경에 따라 자동 선택됨; 프레임을 확인하여 머리카락, 손, 제품에서 컷아웃이 실패하는지 점검.
배경 음악
음악을 원하는지 물어보십시오. 음성 아래에 적당한 에너지의 배경음악은 광고를 크게 개선합니다. 두 가지 방법:
- 스킬 기본 트랙(타사 권리 없음):
python3 scripts/musica.py <프로젝트>/media/musica.wav --duracion <초> --estilo energica|suave(비디오 총 길이 + 1초 사용). 의도적으로 단순함; 배경용이지 노래가 아님. - 자체 음악은 광고 사용 권리가 있는 경우에만(일반적으로 TikTok이나 Instagram의 트렌드 음악에는 권리가 없음).
media/에 복사.
proyecto.json에서 활성화: "musica": {"archivo": "musica.wav", "volumen": 0.2}. 음성이 있는 경우 음악을 음성보다 약 10~14dB 낮춤(스킬 트랙은 0.2에서 시작)하고 청취하여 확인.
4단계 · 조립
python3 scripts/nuevo_proyecto.py <프로젝트> --tienda "매장명" --formato 9:16 --plataforma meta --nivel 2
# <프로젝트>/proyecto.json 편집하여 장면 추가 (references/escenas.md 참고)
python3 scripts/armar.py <프로젝트> --cuadros 1.5,5,9,14 # 조립 및 revision/에 프레임 캡처
전환: 15가지 + 컷; 다양하게 자동 선택(같은 전환 연속 두 번 사용 금지); 장면별 또는 스타일별로 요청(references/transiciones.md). references/revision.md를 참고하여 캡처된 프레임 검토(텍스트 가독성, 제품 가림 없음, 로고 위치 정확), 수정 후 반복. 레벨 1/2/3: references/niveles.md. 레벨은 사용자가 선택; 레벨 3은 더 많은 시간이 소요됨을 알림.
5단계 · 렌더링 및 전달
python3 scripts/armar.py <프로젝트> --render # -> salida/render_completa.mp4
python3 scripts/entregar.py <프로젝트>/salida/render_completa.mp4 <프로젝트>/salida/FINAL.mp4 [--velocidad V] [--solo-bajar]
python3 scripts/armar.py <프로젝트> --version historia --render # 단축 버전
- 속도: 고정 값 없음; 사용자의 말하기 속도에 따라 각 비디오마다 결정.
habla.py가 속도(초당 단어 수)를 측정하여 제안: 느린 말하기(< 2.2) -> 1.2x; 보통(2.2~3.0) -> 1.1x; 빠름(> 3.0) -> 1.0x(가속 없음). 음성 없음(제품 평면만) -> 1.0x(사용자가 다른 것을 요청하지 않는 한). 가이드라인일 뿐이므로 결과를 듣고 사용자와 확인; 의심스러우면 두 버전 모두 제공. entregar.py는 -14 LUFS로 정규화하고 실제 피크를 측정: -1 dBTP를 초과하면 조건이 충족될 때까지 게인을 낮춤.- 비디오에 음성이나 음악이 없고 사운드 효과만 있는 경우
--solo-bajar를 사용하여 효과 레벨을 높이지 않음. - 최종 결과를 사용자에게 보여주고(열기/전송) 변경 사항이 있는지 확인.
- 처음에는 비디오를 저장할 위치를 묻고 프로필에 기억(
carpetaSalida). - 최종 버전만 해당 폴더에 남기고, 당신이 만든 중간 버전을 삭제할 것을 제안(삭제 전에 물어보기).
문제 해결
- "클립 X가 media/에 없습니다": 해당 클립으로
preparar.py를 다시 실행하십시오. - '비교' 장면 차단됨: 민감한 카테고리 보호 기능입니다.
references/politicas.md를 읽으십시오. - 렌더링이 캡처와 다르게 보임:
cd <프로젝트>/hf && npx hyperframes lint. - 디스크 공간 부족: HyperFrames는 렌더링에 수 GB의 임시 공간이 필요합니다.
- 폰트 다운로드: 렌더링 시 Google Fonts에서 다운로드되며 인터넷 연결이 필요합니다.