← 목록으로

재환님께 — UGC 대본기, 물어보신 것 재봤습니다 (2026-08-25)

한 줄 — 8/18 에 물어보신 "새로 열린 상단 밴드가 실제 seedance 출력에서 버티는지", 재봤고 버팁니다. 그리고 그 과정에서 상한 자체를 실측으로 옮겼습니다. 확인 부탁이 아니라 결과 보고입니다.

⚠️ 먼저 정정합니다. 8/21 리마인더에 제가 "립싱크는 코드가 셀 수 있는 값이 아니라 눈이 필요하다" 고 썼는데 부정확했습니다. 우리는 이미 whisper 기반 대본↔발화 정합 계측을 갖고 있었습니다(8/13 골격 데모, mlx whisper-large-v3-turbo, 임계 0.75, seedance-2.5 46줄 중 42 통과). 제가 그 자산을 못 찾고 "손이 막혔다"고 보낸 것이라, 재환님 시간을 불필요하게 잡아둔 셈입니다.


1. 물어보신 것에 대한 답

그 구간이 실제로 쓰이나 — 쓰입니다, 21%

동일 제품·조합 24판(조건 3종 × 8판) 실측:

총 글자수 밴드 (ko 15초) 비율
권고창 54~78자 18 75%
상단 신설 79~87자 5 21%
하단 신설 48~53자 1 4%

최대값 87자(밀도 5.80) — 판정 상한에 정확히 붙었습니다. 확장 전이라면 이 5판이 전부 하드 실패로 재작성을 태웠습니다.

그 구간이 버티나 — 버팁니다. 그리고 그 위까지 봤습니다

같은 골격·제품·인물로 길이만 바꿔 뽑았습니다.

총 글자수 밀도(자/초) 대사 잘림
77 · 82 · 85 5.13 · 5.47 · 5.67 0
91 · 97 · 103 6.07 · 6.47 · 6.87 0

한 제품만으로는 상한을 못 정하므로 제품 형태·골격·훅·상황이 전부 다른 두 조합으로 일반화도 확인했습니다.

제품 골격 총 글자수 밀도 잘림
아우라 보태닉스 (튜브) mystery_box_reveal + beauty_filter_glitch + daylight_kitchen 97자 6.47 0
네이처스 하베스트 (지퍼봉지) camera_pov + receipt_roll_unspool + jjimjilbang 96자 6.40 0

3제품 · 3골격 · 5편 전부 전 줄 발화 확인 (사람 확인, 2026-08-25).


2. 그래서 상한을 실측으로 옮겼습니다

종전 87자는 density_tol 0.12 라는 튜닝값에서 파생된 숫자였고, 코드 주석 자체가 "실측 상수가 아니다"라고 밝히고 있었습니다. 실측해보니 그보다 16자 위까지 멀쩡합니다.

전:  총 글자수 상한 초과 → hard 재작성 (LLM 재호출, 최대 6라운드)
후:  총 글자수 상한 초과 → soft 경고

하한도 함께 내렸습니다 — 새로 넣은 PERFORMANCE 절이 대사 사이 침묵을 시선·미세동작으로 점유하므로, "짧으면 영상 모델이 지어낸 말로 채운다"는 근거가 사라졌습니다.

결과: 총 글자수는 더 이상 재작성 사유가 아닙니다. 남는 hard 는 문장 수 창(2~6)과 문장당 3~28자뿐이고, 후자는 "한 줄 안에서 발화가 밀린다"는 별개 근거를 갖습니다(총량이 아니라 한 줄의 문제라 위 실측이 덮지 않습니다).

⚠️ 105자 이상은 안 봤습니다. 되돌리거나 다시 조일 일이 생기면 그 위를 먼저 뽑아야 합니다. 되돌리는 법은 주석에 남겼습니다.


3. 같이 들어간 것 — 레퍼런스 프롬프트 흡수

업계 레퍼런스 프롬프트를 우리 SPEC 과 항목 단위로 대조해, 우리에게 아예 없던 절 셋을 넣었습니다.

하는 일
PERFORMANCE 대사별 의도·전술(작성기) + 시선·깜빡임·미세동작 안전줄(코드)
TEXTURE 모공 단위 피부 사실성·보정 금지 — AI 티의 1순위인데 절 자체가 없었습니다
REFERENCE SCOPE @Image1 은 외모+연기 / @Image2 는 외모만 — 제품 사진이 포즈를 끌고 오는 것을 차단

동기: 0단계 실측에서 말투가 뒤섞인 대본이 게이트 4겹을 그대로 통과했습니다("그거 진짜 그렇게 마셔?" + 존댓말 3줄). 게이트는 문체·연기·질감을 보지 않습니다.

그리고 최종 프롬프트를 정본 10절 순서로 재조립했습니다 — 종전엔 뒤에 덧붙이기만 해서 @Image 목록이 두 절에 나뉘고 연기가 대사에서 멀리 떨어졌습니다. 한 사실이 두 자리에 나뉘면 어느 쪽을 따를지 모르고, 이 파이프라인 사고가 전부 그 형태였습니다(#5098 말투 재진술, #339 글자수 이중출처).

골격 9종은 바이트 그대로 뒀습니다 — 감사 PASS 판정분이라 본문 수정 = 재감사입니다. 재배치는 조립 시점에 코드가 합니다.

🩸 박제 — 연기 빈칸만 넣었을 때 공정이 두 배로 망가졌습니다 (2회 재현)

상태 1라운드 통과 평균 라운드 최악 평균 초
흡수 전 6/8 1.25 2 49s
연기 빈칸만 추가 2/8 · 1/8 2.25 · 2.12 5 86s · 84s
역할 분담 명시 후 7/8 1.12 2 48s

라운드1 실패 전수에서 진동이 나왔습니다: 93자(한 문장 45자) → hard → 46자 → hard → 73자. 걸린 문장이 전부 서사형이었습니다. 원인은 역할 분담을 안 알려준 것 — 레퍼런스 구조는 짧은 대사 + 풍부한 연기인데 우리는 긴 대사 + 연기가 됐습니다. "연기가 드라마를 맡으니 대사는 담백해도 된다"를 적자 하드 사유가 10건 → 2건으로 줄고 흡수 전보다 좋아졌습니다.


4. 옛 결함 재현 — 3세트

2026-08 배치 기록에서 실제로 이상했던 판 3건을 골라 같은 브리프로 다시 돌렸습니다. 인물·제품 사진 동일.

세트 옛 결함 지금
원두 봉지 대사 5줄 전부 반말 · 15초에 갈기→드리퍼→물붓기 전 공정 · 슬롯 누출 잔재 존댓말 4줄 · 1라운드 · 경고 0
크림 (말투) 완전 반말 · 나 이거 계속 쓸 듯 획일 마무리 존댓말 · 획일 마무리 없음
크림 (광고문구) 보습, 영양, 이게 한 번에 다 되네 · 심사 6라운드 소진 같은 결함 재현

세 번째가 가장 값진 케이스였습니다. 브리프의 효용이 "피부 보습과 영양을 한 번에 해결하는 올인원 스킨케어"이미 광고 카피입니다. 심사역 지침에 같은 제품·같은 문구 실측이 박혀 있습니다(이렇게 준 판은 6라운드 3/3 전부 태우고 못 넘겼고, 같은 제품을 겪은 일로 쓴 판은 3/3 통과).

그래서 오늘은 6라운드를 안 태우고 2라운드에서 멈추고 "사용자에게 되물어라"로 돌립니다. 다만 그러면서도 출력이 대본에 반려 도장을 찍고 있었습니다 — 시스템은 "작성기 잘못이 아니다"라고 판단해놓고 호출자에겐 "대본이 심사에서 반려됐다"로 보이는 상태였습니다. 사용자가 준 문구를 충실히 옮긴 대본을 벌하는 셈이라 그 자리를 끊었습니다: 입력 문제로 멈출 때는 판정을 싣지 않고 되묻기 안내 하나만 남깁니다.


5. 재환님 8/18 리뷰 지적 — 전수 대조

지적 상태
[major] 골격 소진 경로가 {{LINE_N}} 잔여를 안 잡는다 반영 · 재환님 「승인」
[minor] hangul-integrity.ts NUL 바이트 반영 · 「확인」
[배포위생] exp8-tmp.ts 딸려옴 삭제 + gitignore · 「확인」
[minor] typicalSyl 이중출처 SPEC/LANG_SPEC 승격 · 「확인」
[minor] 예산 ↔ short_ratio 상충 shortHi 계산 · 「확인」
[nit] totalLo/Hi 반올림 불일치 ceil/floor · 「확인」
[nit] 소진 심사 inputInsufficient 미복제 반영
[minor] KSX1001 오탐 「별건 이관 동의」 → creagen-space#362 (조건부 파킹, 실오탐 관측 시 재개)
dev/alpha 가 리뷰 반영 전 커밋 8/18 재동기 완료 (#5205 · #5206)

미해결은 상단 밴드 관측 하나였고, 위가 그 답입니다.


6. 검증

tsc --noEmit                        0 에러
vitest .../ugc-director/            14파일 210 통과   (작업 시작 시점 13파일 190)

기존 테스트가 계약 변경을 여섯 번 먼저 잡았습니다 — 골격 판 연기 지시 미기입, 하한 hard→soft, 상한 hard→soft 등. 전부 새 계약으로 갱신했습니다.

실험 스크립트는 exp*-tmp.*(gitignore)로 두어 커밋에서 배제했습니다 — pion-bot#5180 리뷰의 exp8-tmp.ts 사고 재발 방지, git check-ignore 로 확인했습니다.


7. PR

pion-bot#5281 — base=main 이라 사람 게이트입니다. 커밋 5개:

d5ab7b673  작성기 주입 가능화 — 모델·온도·추론 A/B 경로
3873c5416  레퍼런스 흡수 Phase 1 — PERFORMANCE·TEXTURE·REFERENCE SCOPE
d48bb076e  최종 프롬프트 정본 재조립 + 글자수 하한 soft 강등
e9bb0c9b5  총 글자수 상한 soft 강등 — 실측으로 재작성 루프 제거

8. 부수로 뗀 이슈

부수 확정 하나: structured output 을 쓰는 동안 추론은 켤 수 없습니다. 게이트웨이가 bedrock·anthropic·vertexAnthropic·bedrock(system) 4경로 전부에서 400 (Thinking may not be enabled when tool_choice forces tool use.) — 기존 주석의 주장이 추측이 아니라 사실로 확인됐습니다.