# prompts/ — 실제로 적용된 최종 프롬프트 (기계 판독용) - 범위: 영상 5편(1편 S-RANK PULL · 2편 AGENT SHOWCASE · 3편 로판 OP · 4편 HYPER EDIT · 5편 로판 OP EN)에서 **최종 결과물에 실제로 쓰인** 프롬프트만 - 원문은 원본 파일에서 그대로 복사(요약·의역·수정 0), `verify_prompts.py`로 바이트 대조 - 경로 기준: 모든 경로는 `/` 기준 상대경로(원본 프로젝트 폴더). 키트에는 이미지·영상·음원 파일이 없음 - 비밀값 없음: API 키는 환경변수 `ELEVENLABS_API_KEY` 이름만. voice_id·song_id는 공유 라이브러리·생성 기록의 공개 식별자 ## 파일 | 파일 | 행 수 | 내용 | |---|---|---| | `images.jsonl` | 33 | codex `$imagegen`(gpt-image-2) 이미지 프롬프트. 캐릭터 정본 3 · 1편 프레임 7 · 의상 7 · S6 재생성 1 · 3편 장면 15 | | `flow_jobs.jsonl` | 35 | Google Flow(Gemini Omni Flash) 영상 잡. 첫 프레임 32(v4 10 포함) · 첫+끝 프레임 1 · 참조(Ingredients) 2 | | `audio/music.json` | 5편 | 편별 채택 곡 요청 원문(`composition_plan` 전체) + 후처리(자르기·이어 붙이기) 기록. 2편은 1편 곡 재사용 | | `audio/tts.jsonl` | 9 | ElevenLabs `eleven_v4` 대사. 1편 4줄 + 3편 5줄(5편이 같은 파일 재사용) | | `audio/sfx.jsonl` | 48 | ElevenLabs `eleven_text_to_sound_v2` 효과음. 1편 19 · 3편 21 · 4편 8 | | `templates/` | — | 조립 공식 템플릿 + 블록 원문 카탈로그 + 채운 예시(아래) | | `verify_prompts.py` | — | 무결성 검사 스크립트 | ## 주요 필드 - `images.jsonl`: `id` · `batch` · `used_in`(편·컷) · `model` · `size` · `quality` · `refs`(참조 이미지, 1번 = 머리 정본 · 2번 = 의상 정본) · `prompt` · `final_file`(**지금 실제 파일명**) · `generated_as`(생성 당시 output_path) · `rename` · `source`(원본 파일·줄) - `flow_jobs.jsonl`: `id` · `batch` · `mode`(first_frame | first_last | ingredients) · `first_frame` · `last_frame` · `refs` · `video_ref` · `seconds` · `resolution` 720p · `aspect` 9:16 · `model` · `prompt` · `result_file` · `credits`(재생성 포함 실사용) · `verdict`(LOG 판정) · `used_in` · `source` - 재생성 3건(`R1`·`R4`는 제외됨, `V3_F4_C12` 포함): 같은 프롬프트로 다시 제출, `result_file`은 채택된 `_r2`, 1차 탈락 사유는 `regenerated` - 참조 모드 프롬프트의 첫 단어 `@Malfoy`는 Flow 캐릭터 칩(`02_frames/turnaround.png` 등록)으로 바뀌어 들어감 - `tts.jsonl`: `line_id` · `used_in`(편·렌더 배치 시각) · `voice_name` · `voice_id` · `model` · `settings`(stability · similarity_boost 0.8 · seed) · `text_with_tags` · `raw_take`(API 출력) · `final_file`(렌더가 쓴 파일) · `postprocess` · `text_source` - `S3_hmph` 원문 끝 공백 1칸(`"[smug] Hmph. "`)은 실제 명령 인자 그대로 - `sfx.jsonl`: `id` · `episode` · `prompt` · `duration` · `prompt_influence` · `final_file` · `used_in` · `source` - `music.json`: 편마다 `adopted` · `request`(원본 `*.request.json` 파싱 객체 그대로) · `request_sha256` · `raw_output` · `final_file` · `song_id` · `measured` · `postprocess[]`(단계·내용·근거 스크립트) ## 포함 기준과 제외 개수 | 단계 | 전체 | 포함 | 제외 | 제외 내역 | |---|---|---|---|---| | 이미지 | 프롬프트 35 | 33 | 2 | `B_slick`(올백 시안, 정본 머리 3종에서 빠짐, 참조·Flow 사용 0) · `S6_point`(1편 S6이 드레스+드릴 `S6_rococo`로 바뀌어 사용 0) | | Flow | 생성 46회(360p 테스트 2 + 본편 잡 41 + 재생성 3) | 잡 35 | 테스트 2 · 1차 탈락 3회 · 렌더 미사용 잡 6 | 테스트 `T1`·`T2`(360p, jobs json 원문 없음, 본편 미사용) / 1차 탈락 `R1`·`R4`·`V3_F4_C12`(배경 붕괴, 같은 프롬프트로 r2) / 판정은 채택이나 1~5편 최종 렌더 미사용: `X_O4_laugh`·`X_O1_pout`·`X_S4_walk`·`R1_orbit_blue`·`R4_refmotion_blue`·`V4_S4_hairflip`(`07_render` 전체 검색 → v4 `shots.json` 후보 풀에만 있고 `edl.json`·build 목록에 없음) | | 곡 | 후보 44곡(1편 7 · 3편 21 · 4편 4 · 5편 12) | 채택 5곡(요청 원문 4종) | 39 | 3편은 `song_K9` 본체 + `song_K5` 꼬리, K9·K5·K3 요청은 바이트 동일 → 원문 1개 | | TTS | 오디션·테이크·재시도 다수 | 렌더 사용 9줄 | 1편 예비·대안 4 · `_rejected` 3 · `hmph_try` 재시도 13 중 렌더 미사용 11 · 오디션 5 / 3편 `vo/` 15테이크 중 미사용 10(렌더에서 뺀 `V5 흥!` 3 seed 포함) · Anna Kim 대안 10 · `_rejected` 12 · 오디션 6 | 탈락 이유: `[scoffs]`·`[sighs]`가 웃음·한숨으로 바뀜, 「gems」가 「gens」로 들림, `흐, 흥!` 반복 생성 (`설명/_prompts/P3_오디오.md` §3.2) | | SFX | 48 | 48 | 0 | 탈락 없음. 변형 2개씩 만들고 편집 때 골라 씀(`_01` 위주) | ## 파일명 교정 반영 (`final_file`) - 원인: 이미지 러너가 codex 공용 폴더에서 "가장 최근·미회수 PNG"를 집어 감 → 4개 병렬일 때 이름 엇갈림 → 메인이 컨택트시트로 내용 대조 후 교정 - 근거: `설명/_prompts/P1_이미지.md` §1-1~1-6, `설명/03_파이프라인_그래프.md`(결과 파일명·⑥ 함정 표) | 배치 | 처리 | `final_file` | |---|---|---| | `design_r1` | 생성 당시 `r1_.png` → 내용 기준 개명 | `D_pony`→`canon_pony` · `C_drill`→`canon_drill` · `A_straight`→`canon_straight` (`rename.applied: true`) | | `frames_r1` | S3_closeup·S5a_fan·turnaround 내용 교환 후 교정, 현재 파일명 = 프롬프트 id | id 이름 그대로 | | `outfits_r1` | O2↔O5, O6↔O7 교정, 현재 파일명 = 프롬프트 id | id 이름 그대로 | | `s6_r2` | 단독 실행, 교정 없음 | id 이름 그대로 | | `v3_images` | 15장 중 8장 교정됐으나 **어느 8장인지 목록 없음** | 생성 당시 이름 + `"rename_unknown": true` | ## templates/ - 조립 공식 = 블록을 공백 1칸으로 이은 것. 빈 블록은 건너뜀(`fill.py text`) | 파일 | 자리 | 채운 예시 (원본과 바이트 동일 확인) | |---|---|---| | `image_template.txt` | `{STYLE} {CHARACTER} {HAIR} {OUTFIT} {POSE} {BACKGROUND} {TAIL}` | `examples/image_example.*` = `V3_C18_idol` | | `image_runner_wrapper.txt` | `{SIZE}` `{QUALITY}` `{PROMPT}` — 러너가 프롬프트를 감싸 codex에 넣는 문구(`_tools/imagegen_runner.py`, 참조 이미지 있을 때 2번째 줄 붙음) | — | | `image_blocks.json` | 블록별 실제 문구(화풍 2 · 캐릭터 2 · 머리 3 · 의상 2 · 블루 배경 · 글자 금지 꼬리 · 소년 뒷모습 문장) | 각 문구가 출처 프롬프트에 그대로 있는지 생성 시 검사 | | `flow_template.txt` | `{CAMERA} {ACTION} {BACKGROUND} {LOCK} {STYLE} {TAIL} {CREST}` | `examples/flow_example.*` = `V1_S4` | | `flow_blocks.json` | 블루 배경 · 카메라 고정 · 화풍 2 · 꼬리 · 문장 고정 · 카메라 예 | 위와 같음 | | `music_plan_template.json` | 청크 `{TEXT}` `{DURATION_MS}` `{POSITIVE_STYLES}` `{NEGATIVE_STYLES}` + 규칙(`_chunk_rules`) | `examples/music_plan_example.*` = `bgm_A_swing` 요청 | | `tts_template.txt` + `tts_request_template.json` | `[{TAG}] {LINE}` / `{TEXT}` `{STABILITY}` `{SEED}` `{VOICE_ID}` | `examples/tts_example.*` · `tts_request_example.json` = 3편 `V3_father` | - 사용 예 - `python3 templates/fill.py text templates/image_template.txt my_vars.json` - `python3 templates/fill.py music templates/music_plan_template.json my_chunks.json` - `python3 templates/fill.py tts templates/tts_request_template.json my_tts.json` - 규칙(프롬프트 밖): IP 단어(해리포터·말포이·슬리데린·호그와트) 쓰지 않음, 이미지에 글자 넣지 않음, Flow는 텍스트만으로 생성 금지(항상 codex 이미지 기반), Flow 매번 `x1`·`720p` 확인 ## 검증 결과 (`python3 verify_prompts.py --root `) - 결과 PASS: jsonl 전 행 `json.loads` OK, 이미지 33 · Flow 35 · SFX 48 원문 바이트 동일, 곡 4개 요청 sha256·값 일치(K5·K3 요청 바이트 동일 포함), 모든 `final_file`·`result_file`·참조 경로 존재, 템플릿 예시 4종 재조립 = 원본 - TTS: 4줄(`V1`·`V2`·`V3`·`V6`)은 `04_audio/v3/_work/vo_lines*.tsv` 원본과 바이트 동일. 나머지 5줄(1편 4 · `V4_shutup`)은 대사가 파일이 아닌 `tts.py` 명령줄 인자였음 → 키트 생성 때 세션 실행 기록의 명령과 대조, 5/5 바이트 일치(텍스트·stability·seed). 세션 기록 자체는 키트에 넣지 않음 - 비밀값·이메일·서명 URL·절대경로 패턴 스캔 0건