Appearance
[스튜디오] 디렉터 툴 — 감정·상태값 여러 캐릭터 일괄 적용 PRD
Triage 단계 산출물. 무엇을 만들지·왜 만들지·핵심 제품 정책을 정의한다. 화면별 디테일(컴포넌트·상태·인터랙션)과 데이터 스키마는 추후 spec/개발 설계로.
Status: draft Created: 2026-06-15 Last updated: 2026-07-10 Linear Issue: DEE-440Linear Project: 없음 (Triage 이슈) Author: agent (prd-writer) 앱/웹/스튜디오: 스튜디오
1. 목표 및 배경
1.1 문제 / 사용자 니즈
- 사용자 정의: Frontia Studio에서 등장인물이 많은 대형 에피소드를 제작하는 디렉터.
- 상황: 동일한 감정·상태값을 여러 캐릭터에 부여하려는데, 현재는 캐릭터마다 하나하나 개별 등록해야 한다. 본 작업(이미지 생성 등) 전 단계인 감정·상태값 세팅에만 과도한 시간이 든다.
- 고객 원문 (Discord, 2026-06-14): "캐릭터가 15명이고 감정도 각각 최대 15개씩 들어갑니다. 동일한 감정을 모든 캐릭터에게 부여하려는데 감정을 하나하나 추가해야 해서 시간이 꽤 걸립니다. 각 감정을 먼저 추가하고 캐릭터들에게 일괄 적용할 수 있는 시스템이 있으면 좋겠습니다. 캐릭터 상태값도 동일하게(15×3=45개) 버튼 하나로 일괄 적용할 수 있으면 좋겠습니다."
- 미충족 needs: 공통 상황·감정·상태값을 먼저 정의해 둔 뒤, 여러 캐릭터에 반복 입력 없이 일괄 적용(복사) 하고, 캐릭터별 세부값만 조정하고 싶다.
- 신규 캐릭터 공백 문제: 현재 Studio에서 캐릭터를 새로 만들면 감정·상태값이 비어 있는 상태로 생성돼, 디렉터가 매번 처음부터 다시 세팅해야 한다. 대부분의 캐릭터가 에피소드 공통 정의를 공유하는데도 신규 캐릭터마다 반복 입력이 발생한다.
1.2 As-is / To-be
- As-is: 디렉터가 캐릭터별로 상황·감정·상태값을 개별 등록해야 함. 캐릭터 수 × 감정/상태 수에 비례해 작업량이 폭증한다(예: 15명 × 15감정, 15명 × 3상태 = 45건). 신규 캐릭터는 값이 빈 채로 생성돼 매번 다시 세팅.
- To-be: 감정·상황 값을 먼저 정의한 뒤 (1) 각 캐릭터 카드의
[값 일괄 적용]팝업에서 정의된 값을 한 번에 선택·적용(값을 하나씩 추가하지 않음)하고, (2) 신규 캐릭터는 생성 시 최신 저장값으로 자동 초기화되며, 캐릭터별 세부값만 조정하면 되는 흐름.
1.3 잠재 영향
등장인물이 많은 대형 에피소드에서 반복 입력 부담이 줄어 제작 진입장벽이 낮아지고, 본 작업(이미지/씬 생성)으로 더 빨리 진입해 콘텐츠 생산성이 올라간다.
1.4 요청 빈도
동일/유사 요청 1건, 출처 Discord. (Triage 단계 — 우선순위·임팩트는 검토 필요.)
2. 사용자 시나리오
- 디렉터가 에피소드에 공통으로 쓸 감정·상황 값을
감정 및 상황 설정에서 한 번 정의한다(예:미소,분노,평상시…). - 캐릭터 카드에서
[값 일괄 적용]을 열어, 정의된 값 중 이 캐릭터에 넣을 것들을 한 번에 선택(전체 선택 가능)해 적용한다 — 값을 하나씩 추가하지 않는다. - 적용 후, 캐릭터별로 달라야 하는 세부값(예: 캐릭터별 초기값)만 개별 조정한다.
- (신규 캐릭터) 디렉터가 에피소드에 캐릭터를 새로 추가하면, 빈 값 대신 현재 편집 맥락의 최신 저장 감정·상황 값으로 자동 초기화된 상태로 생성된다(§4.4). 이후 캐릭터별 세부값만 조정한다.
카드 단위 값 일괄 적용 (구체 UI — §4.6)
- 디렉터가 캐릭터 이미지 카드의 감정·상황값 표에서 (1,1) 셀에 있는
[값 일괄 적용]버튼을 누른다. - 팝업에
감정 및 상황 설정의 감정·상황 목록이 뜬다. 이 카드에 이미 있는 값은 체크, 없는 값은 미체크 상태다. - 원하는 값을 체크/해제한다. 감정·상황 각 유형별 최대 개수에 도달하면 미선택 항목은 더 체크할 수 없다.
적용을 누른다. 기존 값/사진을 체크 해제한 게 있으면 삭제 확인 알림이 한 번 더 뜨고, 없으면 즉시 반영된다.
3. 범위 (Scope)
3.1 포함 (In scope)
- 감정·상황 값의 캐릭터 단위 일괄 적용: 이미 정의된 감정·상황 값(
감정 및 상황 설정)을 캐릭터 카드의[값 일괄 적용]팝업에서 체크박스로 선택/해제해 이 캐릭터에 한 번에 적용(§4.6).@캐릭터::상태자동완성 및 상태별 캐릭터 에셋 선택을 구동하는 값이 대상. - 팝업 내 전체 선택/해제: 팝업에서 감정·상황 값을 한 번에 전체 선택하거나 전체 해제할 수 있다(§4.6).
- 적용은 복사·독립: 적용 후 캐릭터 인스턴스는 독립적으로 수정 가능.
- 신규 캐릭터 기본 초기화: Studio에서 캐릭터를 새로 생성할 때, 빈 값 대신 최신 저장 감정·상황 값으로 자동 초기화한다(§4.4). 이는 팝업 적용과 별개의 기본값 복사(default-copy) 동작.
- 삭제 확인: 기존 값/사진을 체크 해제해 삭제가 생기는 경우에만 삭제 확인 알림(§4.6/§5).
- 중복/충돌 처리 정책(§5).
- 적용 후 캐릭터별 세부값 오버라이드.
3.2 제외 (Out of scope)
- 이미지/에셋의 일괄 생성(이미지 생성 자체) — 본 PRD는 정의·상태값 세팅 단계만 다룸.
- 런타임/플레이 동작·프롬프트 변경 — MVP는 제작 단계 반복 입력 절감에 한정.
- 앱/웹 사용자 표면 변경.
- 권한/역할 확장 — 기존 Studio 인증·편집 권한 범위 내에서만 동작.
- 데이터 스키마·API 계약 상세 설계(개발 설계 영역).
- 값 일괄 적용 팝업(§4.6)에서의 감정·상황 값(정의) 신규 생성·삭제 — 팝업은 이미 정의된 값의 캐릭터 적용/해제만. 정의 관리는 기존
감정 및 상황 설정에서. - 캐릭터 플레이 상태값(플레이어 향 호감도/감정 등) 일괄 적용 — 이번 범위 제외. 이 PRD는 감정·상황 값만 다룬다(§9 결정).
- 여러 캐릭터 동시 적용(다중 선택 표면) — 현재는 카드 단위로 반복. 한 번에 여러 캐릭터에 적용하는 별도 표면은 추후 검토(§9).
4. 요구사항
4.1 일괄 적용 흐름
- 이미 정의된 감정·상황 값을, 캐릭터 단위로 한 번에 적용할 수 있어야 한다(값을 하나씩 추가하는 대신 팝업에서 여러 값을 한 번에 선택·적용 — §4.6).
- 적용은 복사(copy) 개념으로, 적용 후 각 캐릭터 인스턴스는 독립적으로 수정 가능해야 한다.
한 액션으로 여러 캐릭터를 동시에 적용하는 표면(다중 선택)은 현재 범위 밖 — 카드 단위로 반복한다(추후 별도 표면 검토, §9).
4.2 "최신 저장값"의 정의
- 최신 저장값: 해당 에피소드/프로젝트의 Studio 편집 맥락 안에서 가장 최근에 저장된 캐릭터 상황·감정·상태값을 뜻한다. 일괄 적용과 신규 캐릭터 초기화는 모두 이 값을 소스로 한다.
- 편집 맥락은 현재 작업 중인 에피소드/프로젝트 범위로 한정한다(다른 에피소드/프로젝트의 값은 소스로 쓰지 않음).
4.3 안전성
- 현재 상태 확인: 팝업의 초기 체크 상태가 카드의 현재 감정·상황 값을 그대로 보여주므로, 무엇이 적용/제거되는지 별도 미리보기 화면 없이 확인할 수 있다.
- 기존 값을 명시적 선택 없이 덮어쓰거나 삭제하지 않는다. 값 제거(삭제)는 체크 해제 → 삭제 확인을 거친 경우에만.
- 기존 정의 제한·검증 규칙(예: 감정·상황 최대 개수)을 그대로 존중한다. 팝업은 최대 도달 시 미선택 항목 체크를 비활성화해 상한을 넘지 않는다.
- 삭제 확인: 기존 값/사진을 체크 해제해 삭제가 발생하는 경우에만 삭제 확인 알림을 거친다. 삭제가 없으면(적용·유지만) 즉시 적용한다(§4.6).
4.4 신규 캐릭터 기본 초기화
- Studio에서 캐릭터를 새로 생성하면, 빈 값 대신 §4.2의 최신 저장값으로 초기화된 상태로 만든다.
- 이는 일괄 적용과 별개의 기본값 복사(default-copy) 동작이다 — 생성 시점에 소스 값을 새 캐릭터에 복사할 뿐, 기존 다른 캐릭터의 값을 건드리지 않는다. 따라서 §4.3의 무음 덮어쓰기 금지 규칙과 충돌하지 않는다(새 캐릭터는 갱신할 기존 커스텀 값이 없다).
- 복사된 초기값은 생성 후 캐릭터별로 자유롭게 수정 가능하다(복사본 독립).
4.5 적용 후 조정
- 일괄 적용 후 캐릭터별 세부값(초기값 등)을 개별 수정할 수 있어야 한다.
- 일괄 적용이 이후 캐릭터별 개별 수정을 막지 않아야 한다(복사본은 독립).
4.6 캐릭터 카드 [값 일괄 적용] 진입점 및 팝업
요청자가 구체화한 카드 단위 적용 UI. 이 팝업은 카드(캐릭터) 하나를 대상으로 한다. 팝업에서는 이미 정의된 감정·상황 값을 이 캐릭터에 적용(체크)하거나 해제(체크 해제)하는 것만 가능하다 — 감정·상황 값(정의)을 새로 만들거나 정의 자체를 삭제하지 않는다(정의 관리는 기존 감정 및 상황 설정에서).
- 진입점: 각 캐릭터 이미지 카드의 감정·상황값 표에서 현재 비어 있는 (1,1) 셀 위치에
[값 일괄 적용]버튼을 둔다. 클릭하면 값 일괄 적용 팝업이 뜬다. - 팝업 구성:
감정 및 상황 설정에 정의된 것과 동일한 목록을 감정/상황으로 나눠 보여주며, 각 항목을 체크박스로 선택한다. (예: 감정 — 갈망·궁금·당황·무표정·미소·부끄러움·분노·붉은눈·슬픔·애정 / 상황 — 상의탈의·짐승화·평상시.) - 초기 체크 상태: 해당 카드에 이미 있는 값은 체크된 상태, 없는 값은 미체크 상태로 표시한다.
- 전체 선택/해제: 팝업에 [전체 선택] / [전체 해제] 컨트롤을 두어 감정·상황 값을 한 번에 모두 체크/해제할 수 있다(전체 선택은 유형별 최대 개수 한도 내에서 동작). 컨트롤 형태(버튼 또는 마스터 체크박스)는 spec에서 확정. 전체 해제 후
적용시 기존 값이 삭제되면 아래 삭제 확인을 거친다. - 최대 개수 제한: 감정·상황 각 유형별 최대 개수만큼 체크되면 남은 미선택 항목의 추가 체크를 비활성화한다. 이미 체크된 항목의 체크 해제는 언제나 가능하며, 해제하면 다시 다른 항목을 체크할 수 있다. (현재 화면 기준 최대치는 유형별 20 — 감정 10/20·상황 3/20 표기. 정확한 상한은 §9.)
- 적용:
적용버튼을 누르면 팝업의 체크 상태가 이 캐릭터에 반영된다 — 새로 체크한 값은 이 캐릭터에 적용, 체크 해제한 값은 이 캐릭터에서 제거. (감정·상황 값의 정의 자체는 생성·삭제하지 않는다.) - 삭제 확인: 기존에 값/사진(에셋)이 있던 항목의 체크를 해제한 채
적용을 누르면, 실제 제거 전 삭제 확인 알림 팝업을 한 번 더 노출한다(이 캐릭터에서 값·사진을 내리는 것 — 정의는 유지). 제거되는 항목이 하나도 없으면(적용·유지만 있는 경우) 확인 없이 즉시 적용한다.
캐릭터 상태 개수 상한, 정의 항목(이름/조건/표시 여부/대표값/초기값 등)의 구체 필드와 저장 방식, (1,1) 셀·팝업의 픽셀 단위 레이아웃은 spec/개발 설계에서 확정. 본 PRD는 정책·동작 의도만 고정한다.
5. 예외 / 정책
| 상황 | 처리 방향 |
|---|---|
| [카드 팝업] 이미 있는 값(체크된 상태) | 유지 — 재적용·중복 생성 없음 (체크된 채 적용하면 그대로 둔다) |
| [카드 팝업] 감정·상황 각 유형별 최대 개수 도달 | 미선택 항목 추가 체크 비활성화. 이미 체크된 항목의 해제는 항상 가능 |
[카드 팝업] 기존 값/사진 있는 항목 체크 해제 후 적용 | 실제 삭제 전 삭제 확인 알림 팝업 노출 후 삭제. 삭제 대상이 없으면(적용·유지만) 확인 없이 즉시 적용 |
| 적용 시 감정·상황 최대 개수 상한 초과 | 카드 팝업에선 최대 도달 시 추가 체크가 막혀 상한 초과가 원천 차단 |
| 기존 캐릭터별 초기값/대표값 충돌 | 명시적 선택 없이 덮어쓰지 않음. 값 삭제는 체크 해제 → 삭제 확인을 거친 경우에만 |
| 일부만 성공/일부 실패 | 부분 성공 결과를 명확히 알리고, 실패 항목은 재시도 가능하게 |
| 전체 해제 후 적용(다수 값 삭제) | 삭제 대상이 있으므로 삭제 확인 알림을 거친다(단건 삭제와 동일) |
| 신규 캐릭터 생성 | 빈 값이 아니라 최신 저장값으로 초기화(기본값 복사). 기존 캐릭터 값은 미변경 — 무음 덮어쓰기 금지 규칙과 무관 |
| 최신 저장값이 아직 없음(첫 캐릭터/정의 미저장) | 초기화할 소스가 없으므로 빈 값으로 생성(기존 동작 유지) |
6. 성공 지표
| 지표 | 방향 | 측정 방법 |
|---|---|---|
| 감정·상태값 세팅 소요 시간 | 감소 | 정의→캐릭터 반영까지 걸린 시간(일괄 적용 사용 시 vs 개별 등록) |
| 일괄 적용 기능 사용률 | 유의미한 사용 | 일괄 적용 실행 디렉터·에피소드 비율 |
| 등장인물 多 에피소드의 제작 완주율 | 유지 또는 개선 | 캐릭터 수 구간별 에피소드 발행 도달률 |
- 메인 지표: 감정·상태값 세팅 단계 소요 시간 감소.
- 가드레일: 일괄 적용으로 인한 잘못된 덮어쓰기/데이터 손실 0건.
베이스라인 수치는 출시 직전 PM/데이터 담당이 확정. 본 PRD는 측정 항목과 방향만 정의.
7. 로깅 / 분석
컨벤션은 기존 Studio 이벤트 규약 따름. 기존 재사용 우선 → 없으면 신규.
| 후보 이벤트 | 용도 | 비고 |
|---|---|---|
| 값 일괄 적용 실행 | 팝업에서 감정·상황 값을 캐릭터에 적용 | 적용/제거된 값 수, 항목 종류(감정/상황), 삭제 확인 발생 여부 |
| 값 일괄 적용 팝업 열림 | 카드에서 팝업 진입 | 진입 빈도·사용률 분석 |
| 적용 후 캐릭터별 수정 | 복사본 개별 조정 발생 | 일괄 적용이 실제 작업을 줄였는지 검증 |
- 일괄 적용이 개별 등록 대비 입력 횟수를 얼마나 줄였는지 검증 가능해야 한다.
- 이벤트명·파라미터(Required/Type)는 spec 단계에서 확정.
8. Ubiquitous Language
| Term | Korean | Definition | Do Not Confuse With |
|---|---|---|---|
| Character Status / Emotion 정의 | 감정·상태 정의 | 캐릭터의 감정/상태 항목(이름·조건·표시 여부 등). @캐릭터::상태 자동완성과 상태별 에셋 선택을 구동 | 캐릭터 플레이 상태값 |
| Character Play Status | 캐릭터 플레이 상태값 | 플레이어를 향한 호감/감정/상태 등, 캐릭터별 초기값을 갖는 상태값 | 감정·상태 정의(에셋용) |
| 값 일괄 적용 (카드 팝업) | 값 일괄 적용 | 캐릭터 카드 (1,1)의 [값 일괄 적용] 버튼으로 여는 팝업(§4.6). 정의된 감정·상황 값을 한 번에(하나씩이 아니라) 이 캐릭터에 적용/해제. 체크=적용/유지, 해제=삭제(삭제 확인 거침) | 일괄 생성(이미지 생성) |
| Latest values | 최신 저장값 | 해당 에피소드/프로젝트의 Studio 편집 맥락에서 가장 최근에 저장된 캐릭터 상황·감정·상태값. 일괄 적용·신규 캐릭터 초기화의 소스 | 다른 에피소드/프로젝트의 값 |
| Default-copy 초기화 | 신규 캐릭터 기본 초기화 | 캐릭터 생성 시 최신 저장값을 새 캐릭터에 복사하는 기본 동작. 기존 캐릭터 값은 미변경 | 일괄 적용(기존 캐릭터 대상, 명시적 액션) |
범위 결정(2026-07-10): 이 PRD는 에셋용 감정·상황 값(
감정 및 상황 설정)만 다룬다. 캐릭터 플레이 상태값(호감도 등)은 이번 범위에서 제외 — 위Character Play Status행은 구분을 위한 참고 정의일 뿐 이번 기능 대상이 아니다.
9. Open Questions / 검토 필요
- [x] 적용 대상 범위 (결정됨, 2026-07-10): 이번 기능은 감정·상황 값(
감정 및 상황 설정, 이미지/에셋용)만 다룬다. 캐릭터 플레이 상태값(호감도 등)은 이번 범위 제외(§3.2). - [x] 카드 단위 vs 다중 캐릭터 (결정됨, 2026-07-10):
[값 일괄 적용]팝업은 카드(캐릭터) 1개 대상 확정. 여러 캐릭터 동시 적용은 이 팝업으로 하지 않고 추후 별도 표면으로 검토(아래 참조). - [ ] 다중 캐릭터 동시 적용 표면 (추후): "여러 캐릭터에 한 번에"(원래 고객 요청)는 별도 표면으로 추후 검토. 수요·설계 — PM/디자이너
- [x] 중복 처리 기본 정책 (결정됨, 2026-07-10): 카드 팝업(§4.6)에서 이미 있는 값은 체크된 채 유지(중복 생성 없음), 없는 값은 체크 시 추가, 기존 값/사진을 체크 해제하면 삭제 확인 알림 후 삭제. 무음 덮어쓰기·무음 삭제 없음.
- [x] 감정·상황 최대 개수 (결정됨, 2026-07-10): 팝업의 최대 개수는 기존
감정 및 상황 설정의 유형별 상한과 동일(별도 신규 상한 없음, 현재 화면 관찰상 유형별 20 — 감정 10/20·상황 3/20). 팝업은 최대 도달 시 미선택 항목 체크를 비활성화한다. - [x] 적용 단위 (결정됨, 2026-07-09): 최신 저장값을 소스로 하며, 신규 캐릭터 초기화에서는 캐릭터별 초기값까지 함께 복사한다(이후 개별 수정 전제, §4.4). 기존 캐릭터 대상 일괄 적용에서 기존 커스텀 값 갱신은 디렉터의 명시적 덮어쓰기 선택이 있을 때만(§4.3).
- [ ] 우선순위/임팩트: 동일 요청 1건(Triage). 대형 에피소드 제작 빈도 대비 우선순위 — PM
10. References
- Linear Issue: DEE-440 — [개선] 디렉터 툴 — 감정·상태값을 여러 캐릭터에 일괄 적용
- 고객 요청 출처: Discord, 2026-06-14 10:42:15
- 위키: Frontia Studio 작성 에디터 —
frontia-wiki/wiki/client/studio-authoring-editor.md(Status 탭: 플레이어/캐릭터 상태 정의,@캐릭터/@캐릭터::상태자동완성은 Status 페이지 정의 선행 필요) - 위키: 캐릭터 상태값은 플레이어를 향한 감정/상태 추적용. 항목은 이름·설명/조건·캐릭터별 초기값·대표값·표시 여부 포함. (상한은 구현 전 현재 한계 확인)