zip 묶음 — 카드+모듈+이미지 동봉 — 풀어서 개별 임포트
조회 1371 · 2026-06-26
백문이 불여일견
일단 영상을 보자
귀하의 브라우저는 html5 video를 지원하지 않습니다.
그렇다. 대사창이 나온다.
아주 굿.
플러그인은 JSON 아웃풋을 고려하고 만들었다.
이런 느낌
{"scene":[
{"chars": [{"id": "choi yoo-jin", "img": "choi yoo-jin surprised"}], "text": "최유진은 태블릿 위를 미끄러지던 전자 펜을 멈칫했습니다."},
{"speaker": "choi yoo-jin", "text": "고은비... 주임 말씀이신가요?"},
{"speaker": "choi yoo-jin", "text": "잠시만요. 손녀분이라고요...?"},
{"text": "그녀는 평소의 철저한 포커페이스가 살짝 무너진 채, 당신과 등록처 안쪽 파티션 너머를 번갈아 바라보았습니다."},
{"chars": [{"id": "choi yoo-jin", "img": "choi yoo-jin default"}, {"id": "go eun-bi", "img": "go eun-bi default"}], "text": "마침 한가득 서류 뭉치를 품에 안고 안쪽 복도에서 걸어 나오던 익숙한 인영이 보입니다."},
JSON이 잘 인식되면 이렇게 나온다
```json 으로 시작해서 ```로 끝나야 인식된다.
짧은 예시
```json
{
"scene": [
{
"speaker": "유즈",
"text": "나는 그들의 얼굴을 천천히 훑었다.",
"chars": [
{ "id": "이슈마엘", "img": "ishmael_smile", "pos": "left" },
{ "id": "오티스", "img": "otis_angry", "pos": "right" }
]
},
{
"speaker": "유즈",
"text": "누구도 먼저 입을 열지 않았다."
},
{
"speaker": "오티스",
"text": "…뭘 그렇게 보지?"
}
]
}
```
.
하지만 상당히 범용성이 떨어지기에 그냥 평소 챗붕이들이 보는 소설모드도 지원은 한다.
'지원은' 한다.
예시 영상
귀하의 브라우저는 html5 video를 지원하지 않습니다.
소설모드에서는 화자는 에셋 이름 및 분위기로 알잘딱깔쎈으로 추측하기에 다인봇에서는 찐빠가 많다.
단일봇에서는 상당히 쓸만할듯 하지 않을까 싶다.
그리고 소설모드에서는 인물이 하나씩 뜨는게 최선이다.
화자도 이상하게 지정될때가 많음.
대사 앞에 에셋 기준 이름을 붙여달라고 하면 인식률이 올라간다.
작가의 노트에
에셋 이름 기준으로 대사 앞에 이름 출력
예시를 들자면 'Choi Yoo-jin : "안녕하세요"'
같은 내용을 넣어두면 무거운 프롬도 제법 반영해준다.
그래두 다인봇에서는 JSON 을 쓰는게 낫지 않을까?
나도 잘 모름 ㅎ; 내가 한건 오푸스한테 징징대는것밖에 안함
플러그인 설정 설명
show_name
이름표가 찐빠가 좀 심하다. 그래서 그냥 없애는 설정도 넣었다.
불똥이가 되어버린 싱클레어.
이와 같은 희생자를 줄일 수 있다.
accent_color/box_color
이건 뭐, HEX 코드를 넣으면 색을 바꿔준다. 기본 테마가 마음에 안들 챗붕이를 위해 형식으로나마 넣었다.
sprite_bg
기본적으로 대부분 봇들의 에셋이 흰 배경이다.
그래서 기본 뒷 배경도 흰색으로 해두었지만... 완벽하게 흰색이 아닌 에셋들이 존재한다.
살짝 경계선이 보인다.
설정값을 chroma 로 바꾸면 경계선이 옅어진다.
하지만 흰색에 비스무리한것들을 다 뭉개기때문에 흰색이 많은 에셋은 이상해진다.
너무 하얘진 로쟈
알아서 잘 써먹도록 하자.
force_json
json 출력을 프리필로 출력해서 강제한다는데. 플러그인 단에서 그게 되나? 안 써봐서 모르겟우
max_chars
3명을 넘어가면 화면을 벗어나서 넣어둠. 모바일 환경에서는 한명으로 고정이다..
max_outputs
vn 플러그인이 읽어들이는 아웃풋 갯수. 장기챗 들어가면 무한로딩 걸리는 불상사 방지용
JSON 프롬프트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
[Output Format — Visual Novel]
End EVERY response with a SINGLE ```json code block in the schema below.
Write nothing after that block.
```json
{
"scene"
: [
{
"bg"
:
"<background asset name or https URL — optional>"
,
"speaker"
:
"<id of who speaks this beat>"
,
"text"
:
"<exactly ONE sentence>"
,
"chars"
: [
{
"id"
:
"<character id>"
,
"img"
:
"<asset name or https URL>"
,
"pos"
:
"left|center|right"
}
]
}
]
}
```
Rules:
1.
One sentence per array element (
=
one click). Split long narration or dialogue into several elements.
2.
Use the EXACT additional‑asset names
for
"img"
and
"bg"
. Never invent names that
do
not exist on the card.
3.
Write
"bg"
and
"chars"
only when they CHANGE; omit them to keep the previous beat
's stage (saves tokens).
- Same scene, dialogue only → write just "speaker" and "text".
- Re‑list "chars" only to change an expression or to add/remove a character.
4. Write "bg" only if a real background asset exists; otherwise omit it.
→ Default is a white background, and sprites'
white backgrounds are removed automatically.
5.
"speaker"
must equal one of the SAME beat
's chars[].id for that character to be highlighted.
6. Narration / stage directions → leave "speaker" empty ("" or omit). Shown with no name tag.
7. An off‑screen speaker (first‑person view, voice off‑screen) is NOT placed in "chars".
8. The number of on‑stage characters is free (1..N) via the "chars" length.
9. Keep "id" stable: the same character uses the same id in every beat.
Output the JSON block only — no commentary outside it.
````
---
## Examples (sample content — keep your own language)
**Dialogue + expression change + narration**
```json
{
"scene": [
{
"bg": "council_hall",
"text": "촛불이 흔들리는 회의장. 무거운 침묵이 흘렀다.",
"chars": [
{ "id": "이슈마엘", "img": "ishmael_neutral", "pos": "left" },
{ "id": "오티스", "img": "otis_angry", "pos": "right" }
]
zip 59,547B · 원본 Download 2026-08-07T04-45-45-976Z.zip