{
  "schemaVersion": "vidia-package@1",
  "meta": {
    "title": "롱폼 다큐 제작 패키지 · 실제 자료 + 스톡 + AI",
    "summary": "사건·역사·경제·과학 주제를 6~10분 가로(16:9) 롱폼 내레이션 영상으로 만듭니다. 핵심가치 계약과 사실 원장 → 원고 작성·평가·개선 → 장면·화면 저작 → 제작 전 패키지 검수로 원고를 확정한 뒤, 회원이 올린 실사진·실제 영상, 권리를 확인한 실사진, 무료 스톡 영상, AI 이미지(재연·설명 도해), AI 영상을 섞어 렌더링합니다.",
    "format": "longform",
    "tags": [
      "롱폼",
      "다큐멘터리",
      "내레이션",
      "실사진",
      "실제 영상",
      "스톡 영상",
      "AI 영상",
      "16:9"
    ],
    "knowhow": "## 이 패키지의 접근\n\n- **쓰기 전에 잠근다(0차).** 후보 3개를 채점해 핵심가치(무엇을 통해 무엇을 보여 주고 어떤 인식을 남기나), 제목이 약속하는 질문, 첫 30초의 약속, 60~90초마다 드러날 부분 답을 계약으로 잠급니다. 이후 원고·평가·검수가 모두 이 계약을 기준으로 합니다.\n- **사실에 등급을 붙인다(1차).** 근거자료로 확정·주장·추정·불명 사실 원장을 만들고, 원고는 확정·주장만 단정합니다(주장은 누가 말했는지로). 모르는 수치는 지어내지 않습니다.\n- **원고부터 확정한다(2~5차).** 설정 오프닝(누구·언제·어디·결과·제목 질문을 첫 30초에), 원인·정답은 30% 이후, 소주제 2개 이상, 존댓말 구어체, 쉬운 말로 원고를 쓰고, 장면을 나누기 전에 `longform-eval@4`(통과선 65)로 평가·개선합니다(최대 3회, 개선이 멈추면 경고와 함께 진행).\n- **화면은 가장 직접적인 것으로.** 실제 자료 > AI 영상 > AI 설명 도해 > 스톡 영상 > AI 재연 이미지 순서로 고릅니다. 목표 구성은 실제 자료 약 25%(자료가 있을 때), 스톡 약 20%, AI 영상은 상한(기본 6장면) 안에서 앞쪽에, 나머지는 AI 이미지(절반 안팎은 단면·배치·지형 도해)입니다. 스톡은 일반 장면에만 쓰고 실제 사건 화면처럼 말하지 않습니다.\n- **실제 자료는 직접 연결된 것만.** 회원이 올린 실사진·실제 영상은 모두 알맞은 장면에 한 번씩 배치하고, 인터넷 실사진은 권리 확인을 체크했을 때만 사건과 직접 연결된 장면(실제 인물·정확한 현장·당시 장면·핵심 물증)에 가져옵니다. 실사진은 검색 → 출처 거르기 → 직접 연관성 8문항 검수를 거쳐 7점 이상만 채택하고, 찾지 못한 장면은 AI 이미지로 대체합니다.\n- **스톡은 프레임을 보고 고른다.** 관련도·길이·해상도로 거른 뒤 실제 프레임을 검수해 글자·로고·엉뚱한 나라·시대가 보이는 영상을 빼고, 가장 쓸 만한 구간을 장면 길이만큼 잘라 씁니다.\n- **만들기 전에 검수한다(6차).** 원고와 설계도를 문장 단위로 대조해 누락·읽기 글 오류·화면 불일치·권리·안전 결함을 코드로 기록하고, 막는 결함이 있으면 장면 저작으로 한 번 되돌린 뒤 유료 생성에 들어갑니다.\n- **정지 화면이 멈춰 보이지 않게.** 모든 이미지·사진 장면에 켄번즈·팬을 번갈아 입히고, 13초가 넘는 이미지 장면은 두 컷으로 나눕니다. 소주제가 바뀌면 페이드로 넘깁니다.\n\n## 예상 비용 구성\n기획·원고·장면 저작 LLM 토큰(롱폼은 원고와 설계도가 길어 숏츠의 수 배) + 원고 평가(회당, 원고 길이 비례) + TTS(8분 기준 약 3,200자) + 실사진 검색(해당 장면당 최대 2회)·검수 + 스톡 프레임 검수(장면당 1~3회) + AI 이미지(시트 + AI 장면 + 자료를 못 찾은 장면) + 이미지 평가 + AI 영상(장면 수 × 초당 단가) + 무료 스톡·자막·렌더링."
  },
  "inputForm": [
    {
      "key": "topic",
      "label": "주제",
      "type": "longtext",
      "required": true,
      "help": "예: 1912년 타이타닉호는 왜 구명보트를 절반만 싣고 떠났을까?",
      "maxLength": 5000
    },
    {
      "key": "brief",
      "label": "제작 의도",
      "type": "longtext",
      "required": false,
      "help": "어떤 관점으로, 왜 만들고, 시청자가 무엇을 이해하고 어떤 느낌으로 떠나기를 바라는지. 비우면 후보 3개를 채점해 가장 좋은 방향을 고릅니다.",
      "maxLength": 3000
    },
    {
      "key": "facts",
      "label": "근거자료",
      "type": "longtext",
      "required": false,
      "help": "기사·논문·백과·보고서 요약, 연표, 수치를 붙여 넣으면 사실 원장과 원고·평가가 이 내용을 최우선 기준으로 씁니다.",
      "maxLength": 20000
    },
    {
      "key": "target_minutes",
      "label": "목표 길이(분)",
      "type": "select",
      "required": false,
      "help": "",
      "options": [
        "6",
        "8",
        "10"
      ],
      "default": "8"
    },
    {
      "key": "visual_style",
      "label": "화풍",
      "type": "select",
      "required": false,
      "help": "AI 이미지·영상의 화풍. 경제·과학은 깔끔한 3D 렌더, 성취·산업은 시네마틱 CG, 역사·전쟁은 매트 페인팅, 사건·재판은 연필 스케치가 잘 맞습니다.",
      "options": [
        "실사 다큐 재현",
        "깔끔한 3D 렌더",
        "시네마틱 CG",
        "매트 페인팅",
        "연필 스케치"
      ],
      "default": "실사 다큐 재현"
    },
    {
      "key": "real_photos",
      "label": "실사진(내 자료)",
      "type": "asset",
      "required": false,
      "help": "직접 찍었거나 사용 권리가 있는 실사진. 알맞은 장면에 한 장씩 배치합니다.",
      "accept": "image",
      "multiple": true,
      "max": 20
    },
    {
      "key": "real_videos",
      "label": "실제 영상(내 자료)",
      "type": "asset",
      "required": false,
      "help": "직접 찍었거나 사용 권리가 있는 실제 영상(현장·기록 화면 등). 알맞은 장면에 한 번씩 배치하고 장면 길이에 맞춰 자릅니다. 쓰고 싶은 구간만 잘라 올리면 더 정확합니다.",
      "accept": "video",
      "multiple": true,
      "max": 10
    },
    {
      "key": "real_media_note",
      "label": "올린 자료 설명",
      "type": "longtext",
      "required": false,
      "help": "자료마다 한 줄씩 '파일 이름: 무엇을 찍은 자료인지' 로 적으면 알맞은 장면에 배치합니다.",
      "placeholder": "lifeboat_photo: 구조선에서 찍은 구명보트 사진\nharbor_clip: 출항 항구의 현재 모습을 찍은 영상",
      "maxLength": 5000
    },
    {
      "key": "photo_rights_confirmed",
      "label": "인터넷 실사진 사용 권리를 확인했습니다",
      "type": "boolean",
      "required": false,
      "help": "체크하면 사건과 직접 연결된 실사진을 인터넷에서 찾아 가져옵니다. 저작권·초상권은 회원 책임입니다. 체크하지 않으면 해당 장면은 AI 이미지로 대체합니다.",
      "default": false
    },
    {
      "key": "video_budget",
      "label": "AI 영상 장면 수(최대)",
      "type": "number",
      "required": false,
      "help": "대상 자체가 변하는 장면(붕괴·흐름·작동)에만 앞쪽에 몰아 씁니다. AI 영상은 초당 과금이라 0 이면 가장 쌉니다.",
      "min": 0,
      "max": 15,
      "default": 6
    },
    {
      "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": 60
  },
  "start": "n1",
  "nodes": [
    {
      "id": "n1",
      "module": {
        "id": 12,
        "versionId": 12,
        "name": "롱폼 핵심가치·자료조사",
        "stage": "script",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "핵심가치·자료조사",
      "next": "n2",
      "pause": false,
      "maxVisits": 3,
      "note": "0차 핵심가치 잠금 + 1차 사실 원장·화면 자료 단서.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 0
      }
    },
    {
      "id": "n2",
      "module": {
        "id": 14,
        "versionId": 14,
        "name": "롱폼 원고 작성",
        "stage": "script",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "원고 작성",
      "next": "n3",
      "pause": false,
      "maxVisits": 3,
      "note": "2~5차: 이야기 설계 → 초고 → 서사 편집 → 쉬운 말 → 독립 최종본.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 140
      }
    },
    {
      "id": "n3",
      "module": {
        "id": 13,
        "versionId": 13,
        "name": "롱폼 원고 평가",
        "stage": "evaluate",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "원고 평가",
      "next": "n5",
      "pause": false,
      "maxVisits": 4,
      "note": "longform-eval@4, 통과선 65. 개선이 멈추면 경고와 함께 진행.",
      "branches": [
        {
          "label": "개선 필요",
          "when": {
            "route": "rewrite"
          },
          "goto": "n4"
        }
      ],
      "ui": {
        "x": 0,
        "y": 280
      }
    },
    {
      "id": "n4",
      "module": {
        "id": 17,
        "versionId": 17,
        "name": "롱폼 원고 개선",
        "stage": "improve",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "원고 개선",
      "next": "n3",
      "pause": false,
      "maxVisits": 3,
      "note": "지적된 문장·문단만 고친다(최대 3회).",
      "branches": [],
      "ui": {
        "x": 320,
        "y": 350
      }
    },
    {
      "id": "n5",
      "module": {
        "id": 15,
        "versionId": 15,
        "name": "롱폼 장면·화면 저작",
        "stage": "script",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "장면·화면 저작",
      "next": "n6",
      "pause": false,
      "maxVisits": 2,
      "note": "원고 → 장면 분할, 실제 자료·스톡·AI 이미지·AI 영상 배정, 게시 후보.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 420
      }
    },
    {
      "id": "n6",
      "module": {
        "id": 16,
        "versionId": 16,
        "name": "롱폼 패키지 검수",
        "stage": "review",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "패키지 검수",
      "next": "n7",
      "pause": false,
      "maxVisits": 2,
      "note": "6차: 원고↔설계도 문장 대조, 결함이 있으면 한 번 되돌린다.",
      "branches": [
        {
          "label": "결함 수정",
          "when": {
            "route": "fix"
          },
          "goto": "n5"
        }
      ],
      "ui": {
        "x": 0,
        "y": 560
      }
    },
    {
      "id": "n7",
      "module": {
        "id": 76,
        "versionId": 76,
        "name": "TTS 생성",
        "stage": "tts",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "TTS 생성",
      "next": "n8",
      "pause": false,
      "maxVisits": 3,
      "note": "",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 700
      }
    },
    {
      "id": "n8",
      "module": {
        "id": 19,
        "versionId": 19,
        "name": "실사진 확보",
        "stage": "media",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "실사진 확보",
      "next": "n14",
      "pause": false,
      "maxVisits": 3,
      "note": "권리 확인 시 사건과 직접 연결된 실사진만 검색·검수해 확보(못 찾으면 AI 이미지로 대체).",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 840
      }
    },
    {
      "id": "n14",
      "module": {
        "id": 72,
        "versionId": 72,
        "name": "스톡 영상 확보",
        "stage": "media",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "스톡 영상 확보",
      "next": "n9",
      "pause": false,
      "maxVisits": 3,
      "note": "일반 장면용 스톡 영상을 검색·프레임 검수하고 장면 길이로 잘라 확보.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 980
      }
    },
    {
      "id": "n9",
      "module": {
        "id": 11,
        "versionId": 11,
        "name": "AI 이미지",
        "stage": "image",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "AI 이미지",
      "next": "n10",
      "pause": false,
      "maxVisits": 2,
      "note": "요소 시트 → AI 장면·자료를 못 찾은 장면의 키프레임.",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 1120
      }
    },
    {
      "id": "n10",
      "module": {
        "id": 38,
        "versionId": 38,
        "name": "이미지 평가",
        "stage": "review",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "이미지 평가",
      "next": "n11",
      "pause": false,
      "maxVisits": 2,
      "note": "",
      "branches": [
        {
          "label": "다시 만들기",
          "when": {
            "route": "retry"
          },
          "goto": "n9"
        }
      ],
      "ui": {
        "x": 0,
        "y": 1260
      }
    },
    {
      "id": "n11",
      "module": {
        "id": 79,
        "versionId": 79,
        "name": "AI 영상",
        "stage": "video",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "AI 영상·장면 클립",
      "next": "n12",
      "pause": false,
      "maxVisits": 3,
      "note": "AI 영상 장면만 영상 생성, 사진·스톡·실제 영상·이미지는 길이 맞춤 클립(무료).",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 1400
      }
    },
    {
      "id": "n12",
      "module": {
        "id": 73,
        "versionId": 73,
        "name": "자막 생성",
        "stage": "subtitle",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "자막 생성",
      "next": "n13",
      "pause": false,
      "maxVisits": 3,
      "note": "",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 1540
      }
    },
    {
      "id": "n13",
      "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": 1680
      }
    }
  ]
}