{
  "schemaVersion": "vidia-package@1",
  "meta": {
    "title": "생활 드라마 숏츠 · 100% AI 영상",
    "summary": "생활 갈등 사연을 1인칭 재연 숏츠로 만들고 모든 장면을 AI 영상으로 만듭니다. 인물 시트로 만든 시작 이미지에서 장면마다 행동 하나를 움직여 가장 생생한 재연 화면을 얻습니다. 인물마다 다른 목소리와 자막이 붙습니다.",
    "format": "shorts",
    "tags": [
      "생활 드라마",
      "썰",
      "사연",
      "재연",
      "숏츠",
      "AI 영상"
    ],
    "knowhow": "## 모든 장면을 AI 영상으로\n\n- **시트 → 시작 이미지 → 영상.** 인물·장소·물건 정본 시트를 먼저 만들고, 시트를 참조한 시작 이미지를 검수한 뒤 그 이미지에서 영상을 만듭니다. 영상 모델은 이미 시트가 반영된 한 장을 받으므로 얼굴·옷이 흔들리지 않습니다.\n- **한 장면에 행동 하나, 카메라 변화 하나.** 장면마다 STARTING STATE → ACTION → ENDING STATE 로 대상의 변화를 쓰고, 카메라만 움직이는 장면을 만들지 않습니다. 블랙박스·CCTV 형식은 고정 화각입니다.\n- **장면마다 화풍·인물 고정 문장을 다시.** 영상 프롬프트는 장면마다 따로 전달되므로 Style 줄과 Character lock 줄을 모든 장면에 반복합니다.\n- **말은 음성으로, 영상은 행동으로.** 대사는 인물별 목소리로 따로 넣고, 영상에서는 입 모양이 크게 보이는 정면 컷 대신 어깨 너머·반응 컷·손을 씁니다. 현장음을 켜면 주변 소리만 만듭니다.\n\n## 이 패키지의 접근\n\n- **첫 5초에 어떤 싸움인지.** 첫 문장은 분위기 묘사가 아니라 빌런의 얄미운 대사 한 줄이나 말이 안 되는 물증 하나입니다. 제목과 첫 장면은 \"이상하다\"까지만 말하고 범인·수법·정체는 중반에 터뜨립니다.\n- **얄미움은 세 번 쌓고, 반전은 물증으로.** 빌런의 무례를 사소한 무례 → 반복 → 선 넘는 한마디로 올리고, 반전은 고백이 아니라 문자·영수증·사진·계량기 같은 물증이 그 자리에 있던 제3자 앞에서 드러나며 터집니다.\n- **사이다는 그 자리에서, 남들 앞에서, 숫자로.** \"환불했습니다\" 같은 보고문으로 끝내지 않고 빌런이 무너지는 순간을 장면으로 씁니다. 없는 판결·처벌은 붙이지 않습니다.\n- **리얼함과 댓글.** 금액·시각·물건 이름, 말끝이 흐려지는 입말 대사가 현장감을 만들고, 빌런에게도 한 줌의 사정을 줘 \"대응이 과했나\"로 댓글이 갈리게 합니다. 마지막 문장은 훈계가 아니라 대비나 물음입니다.\n- **인물마다 다른 목소리, 같은 얼굴.** 주인공(내레이터)과 대사가 있는 인물마다 성별·연령대에 맞는 목소리를 따로 쓰고, 인물·장소·물건은 정본 시트를 먼저 만들어 모든 장면에 참조로 붙입니다. 인물 일관성 평가가 얼굴·옷·수량이 달라진 컷을 다시 만듭니다.\n- **생활 드라마 평가 → 개선.** `life-drama@1`(13축, 통과선 60)로 채점해 미달이면 약한 축을 고쳐 다시 평가합니다(최대 2회).\n- **각색 재연임을 밝힌다.** 설명란 첫 문장에 각색 재연임을 적고, 생성한 화면을 실제 증거라고 말하지 않습니다. 실명·번호판·주소·글자는 화면에 넣지 않습니다.\n\n## 예상 비용 구성\n대본 LLM 토큰 + 평가 + TTS + AI 이미지(시트 + 장면마다 시작 이미지 1장) + 인물 일관성 평가 + AI 영상(초당 단가 × 전체 길이) + 무료 자막·렌더링. 세 가지 생활 드라마 패키지 가운데 가장 비쌉니다."
  },
  "inputForm": [
    {
      "key": "topic",
      "label": "사연",
      "type": "longtext",
      "required": true,
      "help": "겪었거나 들은 갈등 사연을 적어 주세요. 인물 관계·금액·시각 같은 디테일이 있으면 더 현실적인 대본이 됩니다. 실명·주소는 적지 않아도 됩니다.",
      "placeholder": "예: 옆집이 석 달째 제 택배를 자기 것처럼 뜯어 쓰고 있었습니다. 관리사무소 CCTV 를 같이 보던 날…",
      "maxLength": 3000
    },
    {
      "key": "media_mix",
      "label": "화면 구성",
      "type": "select",
      "required": false,
      "help": "이 패키지는 모든 장면을 AI 영상으로 만듭니다.",
      "options": [
        "AI 영상만"
      ],
      "default": "AI 영상만"
    },
    {
      "key": "sound",
      "label": "AI 영상 현장음",
      "type": "select",
      "required": false,
      "help": "켜면 영상 모델이 문 닫는 소리·차 소리 같은 주변 소리를 만들어 목소리 아래에 작게 깔립니다(목소리·음악은 만들지 않습니다).",
      "options": [
        "끄기",
        "켜기"
      ],
      "default": "끄기"
    },
    {
      "key": "target_seconds",
      "label": "목표 길이(초)",
      "type": "select",
      "required": false,
      "help": "",
      "options": [
        "60",
        "90",
        "120",
        "150"
      ],
      "default": "90"
    },
    {
      "key": "art_style",
      "label": "화풍",
      "type": "select",
      "required": false,
      "help": "실사+웹툰 전환: 발견·블랙박스·피해 흔적은 실사, 사람끼리 대치하는 장면은 웹툰으로 바꾸고 매치컷으로 잇습니다.",
      "options": [
        "실사+웹툰 전환",
        "실사 재연",
        "웹툰"
      ],
      "default": "실사+웹툰 전환"
    },
    {
      "key": "narrator_voice",
      "label": "주인공(내레이터) 목소리",
      "type": "select",
      "required": false,
      "help": "자동이면 사연의 화자 성별로 고릅니다. 다른 인물은 성별·연령대에 맞는 목소리를 따로 씁니다.",
      "options": [
        "자동",
        "여성",
        "남성"
      ],
      "default": "자동"
    },
    {
      "key": "bgm_asset_id",
      "label": "배경음악",
      "type": "asset",
      "required": false,
      "help": "내 자료실에 올린 오디오 파일. 비우면 배경음악 없이 만듭니다.",
      "accept": "audio"
    },
    {
      "key": "notes",
      "label": "제작 메모",
      "type": "longtext",
      "required": false,
      "help": "꼭 넣을 장면·대사, 피할 표현 등. 대본 단계가 가장 먼저 따릅니다.",
      "maxLength": 5000
    }
  ],
  "agent": {
    "maxTurns": 45
  },
  "start": "n1",
  "nodes": [
    {
      "id": "n1",
      "module": {
        "id": 1,
        "versionId": 1,
        "name": "생활 드라마 숏츠 대본",
        "stage": "script",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "생활 드라마 대본",
      "next": "n2",
      "pause": false,
      "maxVisits": 3,
      "note": "갈등 구도·세 번 쌓는 무례·물증 반전·사이다·댓글 포인트 설계, 인물 시트·목소리 배정.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 0
      }
    },
    {
      "id": "n2",
      "module": {
        "id": 53,
        "versionId": 53,
        "name": "대본평가 · 생활 드라마",
        "stage": "evaluate",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "생활 드라마 평가",
      "next": "n4",
      "pause": false,
      "maxVisits": 3,
      "note": "life-drama@1, 통과선 60",
      "branches": [
        {
          "label": "점수 미달(60 미만)",
          "when": {
            "path": "evaluation.score",
            "op": "<",
            "value": 60
          },
          "goto": "n3"
        },
        {
          "label": "불통과(블로커 등)",
          "when": {
            "route": "rewrite"
          },
          "goto": "n3"
        }
      ],
      "ui": {
        "x": 0,
        "y": 140
      }
    },
    {
      "id": "n3",
      "module": {
        "id": 70,
        "versionId": 70,
        "name": "대본개선",
        "stage": "improve",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "대본개선",
      "next": "n2",
      "pause": false,
      "maxVisits": 2,
      "note": "약한 축을 고친 뒤 다시 평가한다(최대 2회).",
      "branches": [],
      "ui": {
        "x": 320,
        "y": 210
      }
    },
    {
      "id": "n4",
      "module": {
        "id": 76,
        "versionId": 76,
        "name": "TTS 생성",
        "stage": "tts",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "내레이션·대사 음성",
      "next": "n5",
      "pause": false,
      "maxVisits": 3,
      "note": "화자별 목소리로 발화 묶음마다 음성을 만든다.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 280
      }
    },
    {
      "id": "n5",
      "module": {
        "id": 11,
        "versionId": 11,
        "name": "AI 이미지",
        "stage": "image",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "인물 시트·장면 이미지",
      "next": "n6",
      "pause": false,
      "maxVisits": 2,
      "note": "정본 시트를 먼저 만들고 모든 키프레임에 참조로 붙인다.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 420
      }
    },
    {
      "id": "n6",
      "module": {
        "id": 25,
        "versionId": 25,
        "name": "이미지 평가 · 인물·요소 동일성",
        "stage": "review",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "인물 일관성 평가",
      "next": "n7",
      "pause": false,
      "maxVisits": 2,
      "note": "얼굴·머리·옷·수량이 시트와 다른 컷을 다시 만든다.",
      "branches": [
        {
          "label": "다시 만들기",
          "when": {
            "route": "retry"
          },
          "goto": "n5"
        }
      ],
      "ui": {
        "x": 0,
        "y": 560
      }
    },
    {
      "id": "n7",
      "module": {
        "id": 79,
        "versionId": 79,
        "name": "AI 영상",
        "stage": "video",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "AI 영상",
      "next": "n8",
      "pause": false,
      "maxVisits": 3,
      "note": "모든 장면을 시작 이미지에서 AI 영상으로 만든다.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 700
      }
    },
    {
      "id": "n8",
      "module": {
        "id": 73,
        "versionId": 73,
        "name": "자막 생성",
        "stage": "subtitle",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "자막 생성",
      "next": "n9",
      "pause": false,
      "maxVisits": 3,
      "note": "",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 840
      }
    },
    {
      "id": "n9",
      "module": {
        "id": 22,
        "versionId": 22,
        "name": "최종 렌더링",
        "stage": "render",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "최종 렌더링",
      "next": null,
      "pause": false,
      "maxVisits": 3,
      "note": "",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 980
      }
    }
  ]
}