{
  "schemaVersion": "vidia-package@1",
  "meta": {
    "title": "생활 드라마 숏츠 · AI 이미지",
    "summary": "이웃·가족·직장에서 벌어진 갈등 사연을 주인공이 1인칭으로 들려주는 60~150초 세로 재연 숏츠입니다. AI 영상 없이 AI 이미지만으로 장면마다 1~3컷을 이어 보여 줘 제작비가 가장 적게 듭니다. 인물마다 다른 목소리를 쓰고, 정본 시트로 같은 얼굴을 유지합니다.",
    "format": "shorts",
    "tags": [
      "생활 드라마",
      "썰",
      "사연",
      "재연",
      "숏츠",
      "AI 이미지",
      "비용 절감"
    ],
    "knowhow": "## AI 이미지만으로 만드는 방법\n\n- **움직이지 않아도 이야기가 읽히게.** 7초가 넘는 장면은 키프레임을 2장, 11초가 넘으면 3장으로 나눠 행동의 전후·반응 컷을 시간순으로 보여 주고, 컷마다 켄번즈·팬을 번갈아 입힙니다.\n- **AI 영상 비용 0.** 생성 비용은 이미지(시트 + 장면 컷)와 음성뿐이라 같은 길이의 영상 패키지보다 훨씬 쌉니다.\n\n## 이 패키지의 접근\n\n- **첫 5초에 어떤 싸움인지.** 첫 문장은 분위기 묘사가 아니라 빌런의 얄미운 대사 한 줄이나 말이 안 되는 물증 하나입니다. 제목과 첫 장면은 \"이상하다\"까지만 말하고 범인·수법·정체는 중반에 터뜨립니다.\n- **얄미움은 세 번 쌓고, 반전은 물증으로.** 빌런의 무례를 사소한 무례 → 반복 → 선 넘는 한마디로 올리고, 반전은 고백이 아니라 문자·영수증·사진·계량기 같은 물증이 그 자리에 있던 제3자 앞에서 드러나며 터집니다.\n- **사이다는 그 자리에서, 남들 앞에서, 숫자로.** \"환불했습니다\" 같은 보고문으로 끝내지 않고 빌런이 무너지는 순간을 장면으로 씁니다. 없는 판결·처벌은 붙이지 않습니다.\n- **리얼함과 댓글.** 금액·시각·물건 이름, 말끝이 흐려지는 입말 대사가 현장감을 만들고, 빌런에게도 한 줌의 사정을 줘 \"대응이 과했나\"로 댓글이 갈리게 합니다. 마지막 문장은 훈계가 아니라 대비나 물음입니다.\n- **인물마다 다른 목소리, 같은 얼굴.** 주인공(내레이터)과 대사가 있는 인물마다 성별·연령대에 맞는 목소리를 따로 쓰고, 인물·장소·물건은 정본 시트를 먼저 만들어 모든 장면에 참조로 붙입니다. 인물 일관성 평가가 얼굴·옷·수량이 달라진 컷을 다시 만듭니다.\n- **생활 드라마 평가 → 개선.** `life-drama@1`(13축, 통과선 60)로 채점해 미달이면 약한 축을 고쳐 다시 평가합니다(최대 2회).\n- **각색 재연임을 밝힌다.** 설명란 첫 문장에 각색 재연임을 적고, 생성한 화면을 실제 증거라고 말하지 않습니다. 실명·번호판·주소·글자는 화면에 넣지 않습니다.\n\n## 예상 비용 구성\n대본 LLM 토큰 + 평가(회당 수 포인트) + TTS(약 500~1,000자) + AI 이미지(시트 6~12장 + 장면 컷 15~30장) + 인물 일관성 평가 + 무료 켄번즈·자막·렌더링."
  },
  "inputForm": [
    {
      "key": "topic",
      "label": "사연",
      "type": "longtext",
      "required": true,
      "help": "겪었거나 들은 갈등 사연을 적어 주세요. 인물 관계·금액·시각 같은 디테일이 있으면 더 현실적인 대본이 됩니다. 실명·주소는 적지 않아도 됩니다.",
      "placeholder": "예: 옆집이 석 달째 제 택배를 자기 것처럼 뜯어 쓰고 있었습니다. 관리사무소 CCTV 를 같이 보던 날…",
      "maxLength": 3000
    },
    {
      "key": "media_mix",
      "label": "화면 구성",
      "type": "select",
      "required": false,
      "help": "이 패키지는 모든 장면을 AI 이미지(장면당 1~3컷 + 켄번즈)로 만듭니다.",
      "options": [
        "AI 이미지만"
      ],
      "default": "AI 이미지만"
    },
    {
      "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": 40
  },
  "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": "장면 클립(켄번즈)",
      "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
      }
    }
  ]
}