{
  "schemaVersion": "vidia-package@1",
  "meta": {
    "title": "공학 숏츠 제작 패키지 · 100% AI 영상",
    "summary": "공학·건설·기계 원리를 60초 안팎 세로 숏츠로 만듭니다. 모든 장면을 AI 영상으로 만들고, 공학 평가 팩으로 대본을 채점해 60점 미만이면 고쳐 다시 평가하고, 키프레임 이미지를 검수한 뒤 AI 영상·자막·렌더링까지 자동으로 이어집니다.",
    "format": "shorts",
    "tags": [
      "공학",
      "숏츠",
      "원리 해설",
      "건설",
      "기계"
    ],
    "knowhow": "## 이 패키지의 접근\n\n- **질문 하나로 연다.** 공학 숏츠는 \"왜 이렇게 만들었을까?\" 하나를 끝까지 끌고 가야 봅니다. 대본작성 단계가 구체 대상 + 이상한 점 + 결과로 첫 3초를 열고, 마지막 장면에서 같은 대상으로 돌아와 답합니다.\n- **원리는 인과 사슬로.** 조건 → 작동 → 다음 변화 → 결과. 부품 이름을 부르는 것은 설명이 아니라서, 가장 긴 장면을 작동 원리에 줍니다.\n- **평가 → 개선 루프.** `engineering@1`(18축, 통과선 60)로 채점해 60점 미만이거나 사실 위반이 있으면 대본개선 → 재평가를 최대 2번 반복합니다. 반복 한도 이후에도 미달이면 제작을 중지하고 수정할 내용을 안내합니다.\n- **모든 장면 AI 영상.** 정지 이미지 + 켄번즈 장면 없이 모든 장면을 AI 영상으로 만듭니다. AI 영상은 한 번에 최대 15초라 장면마다 낭독 글을 15초 안에 맞추고, 길면 장면을 나눕니다. 비용을 줄이려면 AI 영상 + AI 이미지 패키지를 쓰세요.\n- **같은 물체는 같은 모습으로.** 반복 등장하는 장치·구조물은 요소 시트를 먼저 만들고 모든 키프레임에 참조로 붙입니다. 이미지 평가가 7점 미만 컷을 다시 만들고, 그래도 안 되면 이미지 단계로 한 번 되돌립니다.\n- **내 사진을 쓰면 더 싸고 더 믿음직하다.** 직접 등록한 이미지는 장면 화면으로 그대로 쓰고(켄번즈), 그 장면은 AI 이미지를 만들지 않습니다. 대본작성 단계가 사진 설명·파일 이름을 보고 알맞은 장면에 배치하며, 사진에 보이는 것만 말합니다.\n\n## 예상 비용 구성\n대본 LLM 토큰 + 평가(회당 수 포인트) + TTS(약 400~500자) + 키프레임 이미지(요소 시트 + 장면 수 − 직접 등록한 이미지 장면) + 이미지 검수 + AI 영상(전체 길이 × 초당 단가) + 무료 자막·렌더링.",
    "visualMix": "ai-video"
  },
  "inputForm": [
    {
      "key": "topic",
      "label": "주제",
      "type": "longtext",
      "required": true,
      "help": "예: 엘리베이터 줄이 전부 끊기면 정말 바닥까지 떨어질까?",
      "maxLength": 5000
    },
    {
      "key": "tone",
      "label": "말투",
      "type": "select",
      "required": false,
      "help": "",
      "options": [
        "친근",
        "단정",
        "유머"
      ],
      "default": "친근"
    },
    {
      "key": "video_ratio",
      "label": "AI 영상 비율",
      "type": "select",
      "required": false,
      "help": "이 패키지는 모든 장면을 AI 영상으로 만듭니다(직접 등록한 사진 장면만 사진 그대로). 비용을 줄이려면 같은 이름의 'AI 영상 + AI 이미지' 패키지를 쓰세요.",
      "options": [
        "100%"
      ],
      "default": "100%"
    },
    {
      "key": "user_images",
      "label": "직접 등록할 이미지",
      "type": "asset",
      "required": false,
      "help": "직접 찍었거나 사용 권리가 있는 사진을 고르면 AI 이미지 대신 그 사진을 장면 화면으로 씁니다(장면당 1장, 최대 6장, 켄번즈 움직임). 여기서 바로 올릴 수도 있습니다.",
      "accept": "image",
      "multiple": true,
      "max": 6
    },
    {
      "key": "user_images_note",
      "label": "등록한 이미지 설명",
      "type": "longtext",
      "required": false,
      "help": "사진마다 한 줄씩 '파일 이름: 무엇을 찍은 사진인지' 로 적으면 알맞은 장면에 배치합니다. 비우면 파일 이름으로 판단합니다.",
      "placeholder": "교량받침: 다리 상판 아래 고무 받침을 가까이서 찍은 사진\n신축이음: 다리 이음부 톱니 모양 철판",
      "maxLength": 5000
    },
    {
      "key": "facts",
      "label": "근거자료",
      "type": "longtext",
      "required": false,
      "help": "수치·사례의 출처가 되는 글을 붙여 넣으면 대본과 평가가 이 내용을 기준으로 사실을 판단합니다.",
      "maxLength": 5000
    },
    {
      "key": "evaluation_pack",
      "label": "평가 팩(고급)",
      "type": "text",
      "required": false,
      "help": "대본 평가 기준. 기본 engineering@1(공학·건설 해설 숏츠).",
      "maxLength": 300,
      "default": "engineering@1"
    }
  ],
  "agent": {
    "maxTurns": 30
  },
  "start": "n1",
  "nodes": [
    {
      "id": "n1",
      "module": {
        "id": 71,
        "versionId": 71,
        "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": 69,
        "versionId": 69,
        "name": "대본평가",
        "stage": "evaluate",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "대본평가",
      "next": "n4",
      "pause": false,
      "maxVisits": 3,
      "note": "engineering@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": "TTS 생성",
      "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": "AI 이미지",
      "next": "n6",
      "pause": false,
      "maxVisits": 2,
      "note": "",
      "branches": [],
      "ui": {
        "x": 0,
        "y": 420
      }
    },
    {
      "id": "n6",
      "module": {
        "id": 38,
        "versionId": 38,
        "name": "이미지 평가",
        "stage": "review",
        "versionNo": 1,
        "ownerId": 1,
        "price": 0,
        "contentPublic": true
      },
      "label": "이미지 평가",
      "next": "n7",
      "pause": false,
      "maxVisits": 2,
      "note": "7점 미만은 한 번 다시 만들고, 그래도 미달이면 이미지 단계로 되돌린다.",
      "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": "",
      "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
      }
    }
  ]
}