# malfoy-meme-kit - 「악역영애 말포이」 밈 쇼츠 5편(V1 S랭크 뽑기·V2 에이전트 쇼케이스·V3 로판 오프닝·V4 하이퍼 에디트·V5 로판 오프닝 영어판)을 만든 재료 일체 - 실제로 적용된 최종 프롬프트(이미지·Flow·음악·TTS·효과음) + 파이프라인 정의·상태 공간(State) + 실제로 돌린 스크립트 사본 - 내려받아 프롬프트만 재사용하거나, 같은 순서로 파이프라인을 다시 돌리는 용도 ## 폴더 구조 ``` malfoy-meme-kit/ ├── README.md 이 문서 ├── KIT-PLAN.md 키트 구성 계약(각 파일 형식 정의) ├── prompts/ 실제 적용 프롬프트(기계가 읽는 형식) │ ├── README.md 프롬프트 폴더 설명 │ ├── verify_prompts.py 프롬프트 파일 형식·내용 검사 │ ├── images.jsonl codex $imagegen(gpt-image-2) 이미지 프롬프트 + 참조 이미지 + 최종 파일명 │ ├── flow_jobs.jsonl Google Flow(Gemini Omni Flash) 영상 잡: 모드·첫/끝 프레임·프롬프트·크레딧·판정 │ ├── audio/ │ │ ├── music.json 편별 채택 곡 composition_plan 원문 + 자르기·이어붙이기 기록 │ │ ├── tts.jsonl 대사별 보이스·설정·태그 포함 텍스트 │ │ └── sfx.jsonl 효과음 프롬프트·길이 │ └── templates/ 조립 공식(고정 블록·가변 블록·꼬리) 템플릿 + fill.py + examples/ ├── pipeline/ 파이프라인 정의와 상태 공간 │ ├── pipeline.yaml 노드·엣지·사용자 반려 되돌림(interrupts)·예산 │ ├── state_schema.json State 전체 JSON Schema(키별 쓰는 노드·읽는 노드) │ ├── state.py LangGraph TypedDict + reducer │ ├── graph.py LangGraph StateGraph 골격(`python graph.py --dry-run` = 구조만 출력, 외부 호출 없음) │ ├── verify.py 파이프라인 정의 검사 │ └── STATE.md 상태 키 표 + 노드별 읽기/쓰기 행렬 + 상태 전이도(Mermaid) └── tools/ 실제로 돌린 스크립트 사본(설명·필요 환경은 tools/README.md) ├── _tools/ imagegen_runner.py · heavy.sh · matte_queue.sh · render-win.sh · RENDER-FAST.md ├── 05_matte/ matte.sh + bin/(keyer.py · aimask_dml.py 등) ├── 07_render/ v2/tools/comp.py · v4/tools/comp4.py · edl.py · shots.py └── 04_audio/_work/ analyze.py · gen_music.py · tts.py · sfx.py ``` ## 재실행 순서 | # | 단계 | 쓰는 것 | 키트 파일 | |---|---|---|---| | 1 | 리서치 | 밈 확산 경로·Flow 공식 문서(단가·워터마크·9:16)·레퍼런스 분류 | pipeline/pipeline.yaml | | 2 | 스토리보드 | 편별 컷·대사·박자 설계 | pipeline/STATE.md | | 3 | codex 이미지 | 캐릭터·의상·배경 원화(블루 #1E3CFF 배경) | prompts/images.jsonl, tools/_tools/imagegen_runner.py | | 4 | 내용 대조 | 생성 이미지가 프롬프트·설정과 맞는지 검수, 어긋나면 재생성 | prompts/images.jsonl(final_file) | | 5 | Flow 영상(Aside 브라우저) | 이미지를 첫 프레임·재료로 넣어 720p 9:16 클립 생성, 동시 5개 안팎 | prompts/flow_jobs.jsonl | | 6 | 매팅 | 블루 배경 클립 → 알파 webm(색차 키 + isnet-anime 가이드) | tools/05_matte/, tools/_tools/matte_queue.sh | | 7 | 오디오 | 음악·TTS·효과음 생성 → 비트 분석 | prompts/audio/, tools/04_audio/_work/ | | 8 | 배경 블록 | HyperFrames로 배경·타이포·플레이트 렌더 | tools/_tools/RENDER-FAST.md, render-win.sh | | 9 | 합성 | 배경 + 알파 캐릭터 + 가상 카메라 + 오버레이·효과 | tools/07_render/ | | 10 | 판정 | 컨택트 시트·QC로 반려 여부 결정, 반려 시 해당 노드로 되돌림 | pipeline/pipeline.yaml(interrupts) | | 11 | render | 최종 mp4 + 오디오 mux | tools/07_render/, tools/_tools/heavy.sh | - 원칙: 텍스트만으로 Flow 영상 생성 금지 → 반드시 codex 이미지를 Flow 에셋으로 넣고 시작 - 사람 확인 지점: 스토리보드 승인, 이미지 내용 대조, 최종 판정 ## 필요한 계정·도구 | 항목 | 용도 | 비고 | |---|---|---| | codex CLI(로그인) | `$imagegen` = gpt-image-2 이미지 생성 | 병렬 스폰은 imagegen_runner.py | | Google Flow PRO | Gemini Omni Flash 영상 클립 | 크레딧 필요, 한국 계정은 워터마크 강제 | | ElevenLabs Creator | Music·TTS(eleven_v4)·Sound Effects | env `ELEVENLABS_API_KEY` | | Aside 브라우저 | Flow 웹 UI 조작(제출·다운로드) | Flow는 API 아닌 웹 UI | | HyperFrames | 배경·타이포 블록 렌더 | `npx hyperframes render` | | ffmpeg / ffprobe | 디코드·인코드(VP9 알파)·mux | | | python3 | numpy·opencv-python·rembg·librosa·onnxruntime(-directml) | tools/README.md 참고 | | GPU(선택) | 매팅 AI 가이드 가속(AMD·NVIDIA, Windows DirectML) | 없으면 CPU 또는 `--fast` | ## 비용 실적(5편 합계) | 서비스 | 사용량 | 내역 | |---|---|---| | Google Flow | **386 크레딧**(1,050 → 664) | 테스트 10 + V1 88 + ref 88 + extra 71 + V3 59 + V4 70 | | ElevenLabs | **약 19,475**(character_count) | V1 3,101 + V3 9,938 + V4 1,324 + V5(영어판) 5,112 | ## 주의 - **해리포터 2차 창작물**: 캐릭터·세계관 권리는 원저작권자에 있음. 개인·비상업 밈 용도로만 쓰고 **상업 이용 금지 권고** - **IP 단어 프롬프트 금지 원칙**: 해리포터·말포이·슬리데린·호그와트 같은 IP 단어는 codex·Flow 프롬프트·노래 가사에 안 씀(자막·VO에서만). 외형·의상·분위기 묘사로만 생성, Flow 잡은 스크립트로 IP 단어 0건 검사 - 제목 표기는 "Fem Malfoy" / "악역영애 말포이". "Malfoid"는 비하어 기원이라 자막 메인 금지 - **Flow 한국 계정 워터마크**: 우하단 ✦ 반투명 워터마크가 강제로 박힘 → 이번엔 매팅 단계의 가비지 매트로 지워짐(캐릭터와 겹치면 남을 수 있음) - 비밀값 없음: API 키·토큰·이메일은 키트에 포함하지 않음, 환경변수명만 표기 - 스크립트 경로는 원래 작업 폴더(`/mnt/d/malfoy-meme`) 하드코딩 그대로 → 실행 전 자기 경로로 바꿀 것 ## 문서 - 제작 과정·프롬프트 원문 해설·파이프라인 그래프·도구별 상세는 사이트 문서 참고