글에서 웹툰까지 — StoryMaker로 웹소설 한 편이 세로 스크롤 웹툰이 되는 전 과정
20화 9만 자 웹소설을 AI와 함께 집필하고, 회차를 18~50컷 콘티로 분석하고, 이미지를 렌더링하고, 말풍선을 얹어 세로 스크롤 웹툰으로 출력하기까지. 그림 작업 없이 웹툰 한 편이 완성된 실제 과정을 단계별 스크린샷과 함께 기록합니다.
작성 — NEXUS AI Labs

웹툰 한 편이 만들어지려면 보통 글 작가, 콘티 작가, 선화 · 채색 담당, 식자 담당이 팀을 이뤄 움직입니다. 우리는 이 팀 전체를 소프트웨어 하나로 대체할 수 있는지 확인하고 싶었습니다. 그래서 실험을 설계했습니다 — StoryMaker만으로, 그림 작업 없이, 웹소설 한 편을 완성된 세로 스크롤 웹툰으로 만든다. 이 글은 그 실험의 전 과정 기록입니다.
StoryMaker는 Wails v2 + React 19 기반의 macOS 데스크톱 앱입니다. 집필 에디터, 인물 · 세계관 · 플롯 · 복선 관리, 콘티 분석, 이미지 렌더링, 말풍선 오버레이, 웹툰 출력까지 — 웹소설이 웹툰이 되는 데 필요한 모든 단계가 한 앱 안에 있습니다. 모든 데이터는 로컬 SQLite에 저장되고, AI 호출은 OpenRouter를 경유해 Claude를 포함한 멀티 LLM을 상황별로 골라 씁니다.
Step 0 — 라이브러리: 작품이 사는 곳
시작점은 라이브러리입니다. 작품 단위로 프로젝트가 만들어지고, 각 작품 아래에 회차 · 인물 · 세계관 · 콘티 · 렌더링 산출물이 매달립니다. 이번 실험을 위해 새 작품을 하나 만들었습니다 — 현대 판타지 장르의 『회귀한 연구원이 마법을 공학으로 푼다』(가제). 이하 모든 스크린샷은 이 작품의 실제 제작 화면입니다.

Step 1 — 세계관과 인물: 일관성의 뿌리를 먼저 심는다
집필 전에 세계관과 인물부터 등록했습니다. 이 순서가 중요합니다. StoryMaker에서 인물 · 세계관 · 플롯 · 복선은 단순 메모가 아니라 집필과 콘티 분석 양쪽에 주입되는 구조화된 컨텍스트이기 때문입니다. 주인공의 외형 묘사는 나중에 콘티의 캐릭터 시트가 되고, 세계관 규칙은 집필 AI가 설정 오류를 내지 않게 잡아주는 가드레일이 됩니다.
- 인물 — 이름, 역할, 성격, 말투, 그리고 외형 묘사. 외형 필드는 웹툰 렌더링 단계에서 캐릭터 일관성의 기준이 되므로 머리 색, 복장, 체형까지 구체적으로 적었습니다.
- 세계관 — 마법 체계의 규칙, 시대 배경, 주요 지명. 집필 중 AI가 이 규칙을 어기면 바로 드러나기 때문에, 규칙은 서술형이 아니라 조항형으로 등록했습니다.
- 플롯 · 복선 — 20화 전체의 기승전결과 회차별 복선 회수 지점. 복선 관리 보드는 ‘심은 화’와 ‘회수 예정 화’를 추적합니다.
Step 2 — 집필: AI와 함께 20화, 9만 자
집필은 회차 단위로 진행됩니다. 회차마다 플롯 요약을 먼저 쓰고, AI에게 초안을 요청하고, 마음에 들지 않는 문단을 지정해 다시 쓰게 하는 흐름입니다. 문체 유지가 관건인 장면은 Claude 계열, 빠른 아이디어 분기가 필요한 장면은 다른 모델 — OpenRouter 멀티 LLM이라 회차 안에서도 모델을 바꿔 탈 수 있다는 점이 실제 작업에서 가장 유용했습니다.

20화 · 9만 자를 채우는 데 걸린 시간은 약 사흘. 순수 집필보다 오래 걸린 것은 재미 진단이었습니다. StoryMaker의 스토리 분석 기능은 회차별 긴장도 곡선, 대사 비율, 인물 등장 밸런스를 진단해 줍니다. 7화에서 긴장도가 꺼진다는 진단을 받고 사건 하나를 앞당겨 배치했는데, 이 결정은 나중에 콘티 단계에서 그대로 컷 밀도 차이로 확인됐습니다. 글의 리듬이 곧 웹툰의 리듬이 됩니다.
Step 3 — 콘티 분석: 회차 하나가 18~50컷이 되는 순간
여기서부터가 StoryMaker의 진짜 엔진입니다. 회차 텍스트에서 콘티 분석 버튼을 누르면, AI가 회차 전체를 읽고 장면 단위로 쪼갠 뒤 컷별 명세를 만들어냅니다. 회차 분량과 사건 밀도에 따라 컷 수는 18~50개 사이에서 자동으로 결정됩니다. 각 컷에는 다음 정보가 구조화되어 담깁니다.
- 장면 묘사 — 이미지 렌더링 프롬프트의 원천이 되는 시각 명세. 등장 인물, 배경, 시간대, 카메라 구도(클로즈업 · 와이드 · 부감)까지 지정됩니다.
- 대사 · 내레이션 — 원문에서 추출된 대사와, 지문을 요약한 내레이션. 어떤 인물의 말풍선인지, 생각 풍선인지 외침인지 유형이 붙습니다.
- 효과음 — “쿵”, “스윽” 같은 SFX 텍스트와 배치 힌트.
- 감정 톤 — 컷의 분위기 태그. 렌더링 스타일과 말풍선 모양 선택에 반영됩니다.
{
"cut": 12,
"shot": "close-up",
"scene": "지하 실험실, 푸른 마법진 위로 몸을 숙인 주인공. 안경에 도식이 반사된다",
"characters": ["이도현"],
"dialogue": [
{ "speaker": "이도현", "type": "thought", "text": "마나 감쇠 곡선이… 지수함수가 아니야" }
],
"narration": "10년의 회귀가 처음으로 의미를 갖는 순간이었다",
"sfx": [{ "text": "웅──", "hint": "마법진 주변" }],
"mood": "tension-discovery"
}콘티 품질은 사람이 눈으로만 판단하지 않습니다. StoryMaker에는 콘티 품질 평가 하네스가 내장되어 있어, 대사 유실률(원문 대사가 콘티에 빠짐없이 실렸는가), 장면 커버리지(사건 누락은 없는가), 컷 밀도 균형을 자동 채점합니다. 이번 실험에서 1차 분석 결과가 기준을 넘지 못한 회차는 20화 중 3개였고, 재분석으로 전부 통과시켰습니다.
Step 4 — 이미지 렌더링: 콘티가 그림이 된다
콘티가 확정되면 컷별 장면 묘사가 이미지 생성 프롬프트로 컴파일됩니다. 이때 Step 1에서 등록한 인물 외형 명세가 모든 컷의 프롬프트에 자동 주입됩니다. 주인공이 3컷에서는 은발이었다가 15컷에서 흑발이 되는 사고를 막는 장치입니다. 감정 톤 태그는 조명과 색감 지시로 변환됩니다 — tension 계열 컷은 대비가 강해지고, 일상 컷은 채도가 올라갑니다.


한 회차 30컷 기준 렌더링에는 수 분이 걸립니다. 실패하는 컷도 물론 있습니다 — 구도가 묘사와 다르거나 인물이 명세를 벗어나는 경우, 컷 단위로 재렌더링을 돌립니다. 전체 파이프라인을 다시 도는 것이 아니라 문제 컷만 다시 굽는 구조라서, 20화 전체에서 재렌더링 비용은 체감상 크지 않았습니다.
Step 5 — 식자: 말풍선 · 내레이션 · 효과음 오버레이
그림 위에 글을 얹는 식자는 웹툰 제작에서 가장 손이 많이 가는 공정 중 하나입니다. StoryMaker는 콘티의 대사 명세를 근거로 말풍선 위치와 모양을 자동 배치합니다. 일반 대사는 둥근 풍선, 생각은 구름 풍선, 외침은 톱니 풍선 — 콘티 단계에서 붙인 대사 유형이 그대로 풍선 스타일이 됩니다. 내레이션은 컷 상 · 하단의 박스로, 효과음은 배치 힌트를 따라 그림 위에 스타일된 텍스트로 얹힙니다.

자동 배치가 인물의 얼굴을 가리는 경우가 회차당 두어 컷 나옵니다. 이때는 편집 화면에서 풍선을 드래그해 옮기면 끝입니다. 전 공정을 통틀어 사람 손이 가장 많이 개입한 지점이 바로 이 풍선 위치 미세 조정이었는데, 그래봐야 회차당 몇 분 수준이었습니다.
Step 6 — 출력: 세로 스크롤 웹툰
모든 컷의 식자가 끝나면 회차를 세로 스크롤 웹툰 HTML로 출력합니다. 컷 간 여백은 장면 전환 강도에 따라 달라집니다 — 같은 장면의 연속 컷은 좁게, 시간 · 장소가 바뀌는 지점은 넓게. 인쇄 만화의 페이지 넘김이 하던 호흡 조절을 세로 스크롤에서는 여백이 대신하기 때문입니다. 출력물은 브라우저에서 바로 열리는 단일 HTML이라 공유도 검수도 간단합니다.

결과 — 그리고 정직한 한계
실험 결과: 웹소설 20화 전체가 회차별 세로 스크롤 웹툰으로 완성됐습니다. 사람이 한 일은 플롯 설계, AI 초안의 퇴고, 콘티 검수, 풍선 위치 조정이 전부입니다. 그림은 단 한 장도 직접 그리지 않았습니다. 글 작가 한 사람이 웹툰 스튜디오 하나의 산출물을 내는 구조가 실제로 동작한다는 것을 확인했습니다.
한계도 분명히 기록해 둡니다. 액션이 여러 컷에 걸쳐 이어지는 연속 동작 시퀀스는 아직 컷 간 동선이 어색해지는 경우가 있고, 군중 장면에서는 조연 외형의 일관성이 주연만큼 단단하지 않습니다. 두 문제 모두 콘티 명세에 동작 연결 정보를 추가하는 방향으로 개선 중입니다.
기술 아키텍처 — 왜 Wails v2 + SQLite인가
StoryMaker를 처음 설계할 때 가장 많이 고민한 것은 데이터 주권입니다. 작가의 원고, 인물 설정, 미공개 플롯은 클라우드에 올라가면 안 됩니다. Go + Wails v2 데스크톱 앱으로 만든 이유가 여기 있습니다 — AI 호출은 네트워크를 타지만 원고와 모든 메타데이터는 100% 로컬 SQLite에 머뭅니다.
-- 작품 단위 루트
CREATE TABLE works (
id TEXT PRIMARY KEY, -- ulid
title TEXT NOT NULL,
genre TEXT,
created_at INTEGER NOT NULL
);
-- 회차: 원고(content) + AI 생성 콘티(storyboard_json) 함께 저장
CREATE TABLE episodes (
id TEXT PRIMARY KEY,
work_id TEXT REFERENCES works(id),
episode_no INTEGER NOT NULL,
title TEXT,
content TEXT, -- 집필 원문
storyboard_json TEXT, -- JSON 배열 — 컷 명세
render_status TEXT DEFAULT 'pending'
);
-- 인물: 외형 묘사가 렌더링 프롬프트에 자동 주입됨
CREATE TABLE characters (
id TEXT PRIMARY KEY,
work_id TEXT REFERENCES works(id),
name TEXT NOT NULL,
appearance TEXT, -- 이미지 생성 프롬프트의 앵커
personality TEXT
);SQLite가 충분한 이유는 읽기 패턴 때문입니다. 집필 중 가장 자주 하는 쿼리는 '이 작품의 등록된 인물 목록 조회'와 '이전 회차 콘티 불러오기' — 둘 다 단순 SELECT이고 동시 접근 걱정이 없습니다. 대신 SQLite의 장점인 단일 파일 이식성이 큽니다. 작업물 전체를 ZIP으로 묶어 백업하거나 다른 Mac으로 옮기는 게 cp StoryMaker.db 한 줄입니다.
LLM 선택 전략 — 작업마다 최적 모델이 다르다
이번 실험에서 OpenRouter를 통해 총 세 가지 모델을 섞어 썼습니다. 단순히 '가장 좋은 모델' 하나를 쓰지 않는 이유는 비용과 속도의 트레이드오프 때문입니다.
- Claude Sonnet (집필 · 퇴고) — 문체 일관성과 문학적 표현력이 필요한 장면. 가격 대비 품질 최상. 이번 실험의 주력 모델.
- Gemini Flash (콘티 분석) — 1만 자 이상의 긴 회차 텍스트를 한 번에 읽고 구조화된 JSON을 뱉어야 하는 작업. 컨텍스트 윈도우가 크고 속도가 빠름.
- Qwen2.5 72B via OpenRouter (아이디어 발산) — 플롯 분기, 복선 아이디어 같이 빠르게 여러 초안이 필요한 작업. 응답 레이턴시가 낮아 즉각적인 피드백에 적합.
전통 방식 vs StoryMaker — 숫자로 보는 차이
같은 20화 웹소설 IP를 기준으로, 전통적인 팀 제작 방식과 이번 StoryMaker 실험을 비교했습니다. 물론 AI 생성물과 숙련 작가/작화가의 결과물은 '퀄리티'라는 축에서 직접 비교하기 어렵습니다. 여기서 비교하는 것은 처음 세상에 내보낼 수 있는 1차 산출물을 만드는 데 드는 자원입니다.
비용 면에서, 이번 실험에서 OpenRouter API 비용으로 지출된 금액은 약 $23 USD (20화 집필 + 콘티 분석 + 재분석 3회 포함). 이미지 렌더링(이미지 생성 API)이 별도로 발생하지만, 20화 전체를 합쳐도 $30~50 수준입니다. 플랫폼에 연재 계약이 성사될 경우 첫 회차 원고료만으로 회수되는 투자입니다.
콘티 품질 평가 하네스 — AI가 AI를 채점한다
콘티 분석이 끝나면 평가 하네스가 자동으로 실행됩니다. 단순히 '컷이 18개 이상인가'를 체크하는 것이 아니라, 원문과 콘티를 AI에게 함께 제시해 세 축으로 채점합니다.
- 대사 유실률 — 원문의 대사가 콘티에 100% 포함됐는가. 캐릭터 발언이 하나라도 누락되면 -10점.
- 장면 커버리지 — 기승전결 사건 흐름이 모두 컷으로 표현됐는가. 건너뛴 사건은 독자 맥락 단절을 일으킴.
- 컷 밀도 균형 — 액션 장면과 감정 장면이 적절히 분배됐는가. 감정 장면만 몰리면 웹툰이 '정적'으로 느껴짐.
채점 결과는 0~100 점수로 반환됩니다. 이번 실험 기준: 1차 통과 기준점(80점 이상) 달성 회차는 20화 중 17화였고, 3화가 재분석을 거쳤습니다. 재분석 시에는 실패 사유(예: '7화 클라이막스 직전 대사 2개 유실')가 다음 분석 프롬프트에 교정 지시로 주입됩니다.
이야기를 가진 사람과 그것을 웹툰으로 만들 수 있는 사람 사이의 거리 — StoryMaker가 줄이려는 것은 결국 그 거리입니다.
— NEXUS AI Labs
StoryMaker는 GitHub에 공개되어 있으며, OpenRouter API 키 하나로 이 글의 전 과정을 직접 재현할 수 있습니다. 다음 실험은 완성된 웹툰 회차를 RED STUDIO에 넘겨 움직이는 웹툰(모션 코믹)까지 이어보는 것입니다. 파이프라인은 아직 끝나지 않았습니다.
