disaster-broadcast-studio 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -3
- package/dist/cli.js +2 -1
- package/dist/load.js +3 -4
- package/dist/scenario.d.ts +17 -4
- package/dist/scenario.js +40 -35
- package/dist/timeline.d.ts +62 -0
- package/dist/timeline.js +18 -1
- package/dist/video/Alerts.js +15 -31
- package/dist/video/Broadcast.js +74 -64
- package/dist/video/Bulletin.d.ts +1 -2
- package/dist/video/Bulletin.js +11 -20
- package/dist/video/Chat.d.ts +9 -0
- package/dist/video/Chat.js +34 -0
- package/dist/video/Information.d.ts +0 -6
- package/dist/video/Information.js +32 -36
- package/dist/video/Map.js +2 -2
- package/dist/video/TimeJump.d.ts +8 -0
- package/dist/video/TimeJump.js +42 -0
- package/dist/video/layout.d.ts +5 -0
- package/dist/video/layout.js +2 -0
- package/dist/video/transitions.d.ts +58 -11
- package/dist/video/transitions.js +0 -9
- package/dist/video/useBundledFonts.js +1 -1
- package/package.json +1 -1
- package/skills/scenario-writing/SKILL.md +10 -3
- package/skills/scenario-writing/references/README.md +4 -4
- package/skills/scenario-writing/references/audio.md +6 -0
- package/skills/scenario-writing/references/direction.md +31 -7
- package/skills/scenario-writing/references/format.md +52 -10
- package/skills/scenario-writing/references/news-writing.md +10 -0
- package/skills/scenario-writing/references/status-systems.md +4 -2
package/package.json
CHANGED
|
@@ -19,17 +19,23 @@ description: 재난방송실을 이용하는 창작 AI가 한국형 재난방송
|
|
|
19
19
|
- [표준문안 전문](references/disaster-sms-templates.md): 해당 재난 유형과 행동 단계에 맞는 실제 문장.
|
|
20
20
|
- [민방위 경보](references/civil-defense.md): 발령·전달, 사이렌·방송·자막·문자 사이의 차이.
|
|
21
21
|
- [기상·지진·홍수·산사태 정보](references/hazard-information.md): 시간·단계·관측값의 의미.
|
|
22
|
-
- [상황 지표](references/status-systems.md):
|
|
22
|
+
- [상황 지표](references/status-systems.md): 상태바에 사용할 실재하는 공식 체계의 명칭·단계·적용 범위와 공개 근거.
|
|
23
23
|
- [뉴스 표현](references/news-writing.md): 발표 주체, 확인된 사실, 후속 갱신의 문체.
|
|
24
24
|
|
|
25
25
|
공식 문안과 새 창작 문장을 구별한다. 원문 사례나 사용자 예시를 의무적인 플롯으로 삼지 않는다. 자료의 판본보다 과거를 배경으로 하면 해당 시기의 제도를 확인하고, 확인되지 않은 사실을 실제 규정이라고 쓰지 않는다.
|
|
26
26
|
|
|
27
27
|
## 집필과 연출
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
현황판은 공개된 재난문자와 뉴스를 모아 라이브 스트리밍하는 서비스다. 각 요소는 그 작성 주체가 당시 알 수 있는 정보, 처한 환경, 권한·책임, 전달 목적과 수신자를 기준으로 쓴다. 작가가 아는 사건의 전모가 기관·기자·운영자·채팅 참여자 모두에게 주어진 것은 아니다.
|
|
30
|
+
|
|
31
|
+
재난문자는 발송기관이 위험과 필요한 조치를 판단해 국민·주민에게 알리는 공적 안내다. 기관의 책임과 발송 목적에 맞춰 대상자에게 필요한 내용을 선별한다. 뉴스는 기자가 취재·확인한 범위에서 절제해 보도하며 속보·후속 보도·현장 연결의 성격을 구별한다. 즉각적인 반응과 일상적 중계는 주로 채팅이 맡는다. 현황판의 표시와 방송 안내는 서비스 운영자가 공개 정보와 송출 상태를 전달할 수 있는 범위에 둔다.
|
|
32
|
+
|
|
33
|
+
상태바에는 작품의 배경시대에 실재하는 공식 체계의 단계·발령 상태만 표시한다. 공식 자료에서 체계의 명칭·단계·발령 주체·적용 범위를 확인하고, 작품 안에서 공개된 정보에 따라 갱신한다. 일반적인 상황 요약이나 개별 대응 조치는 뉴스 등 목적에 맞는 매체로 전달하며, 임의의 체계·단계·상태명을 만들지 않는다. 근거를 확인하지 못한 항목은 표시에서 제외한다.
|
|
34
|
+
|
|
35
|
+
화면과 소리는 영상을 보는 시청자의 관점에서도 성립해야 한다. 정보와 소리가 어떤 경로로 방송에 들어왔으며 시청자가 누구의 경험이나 어떤 상황으로 받아들일지 판단한다. 연출 의도와 실제로 전달되는 의미가 맞아야 한다. 세부 판단 기준은 [방송으로 보여주는 연출](references/direction.md), 음향의 적용은 [음원 제작](references/audio.md)을 따른다.
|
|
30
36
|
|
|
31
37
|
1. 사용자가 정한 소재·길이·분위기·매체를 바탕으로 사건의 흐름을 설계한다. 미정인 창작 선택은 작품에 맞춰 결정하되 이미 합의한 조건을 바꾸지 않는다.
|
|
32
|
-
2. 사건 내용과
|
|
38
|
+
2. 사건 내용과 각 주체가 정보를 얻고 전달하는 과정을 설계한다. 사건 발생·상황 파악·판단·발령·취재·보도·수신 시각이 다르면 그 차이를 반영한다. 모든 과정을 화면에 설명할 필요는 없지만 전달 시점과 내용에는 근거가 있어야 한다.
|
|
33
39
|
3. 문자의 대상·행동·발신자와 뉴스의 발표 주체·확인 범위를 구별한다. 발신기관과 발송 대상을 혼동하지 않으며, 모든 문자에서 본문·지역 코드·지도 범위를 맞춘다. 도 전역이면 소속 시군 전체를 조회한다. 수신 시 채우기가 부드럽게 나타났다 사라지는 지도 강조는 기본 기능이며 필요하면 끈다.
|
|
34
40
|
4. 상태·방송 안내·등급별 문자 알림음은 엔진 기본 기능을 쓰며 작품별로 중복 제작하지 않는다. 뉴스는 기본 무음으로 두고 필요한 경우에만 소리를 명시한다. 이벤트의 `sound`로 끄거나 교체한다. [Tone.js 음원 제작](references/audio.md)의 실행 가능한 예제를 활용해 필요한 소리를 만든다. 기존 로컬 음원도 사용할 수 있으며 출처·사용권을 기록한다.
|
|
35
41
|
5. 내용과 함께 등장·퇴장·지도 이동·강조·음향·침묵·전환의 시점을 작성한다. 컷 내부 시간은 현실과 1:1로 흐르게 하고, 시간 생략은 명시적 컷 경계의 `clockTransition`으로 표현한다. 기존 상단 시계의 강조·숫자 이동·도착 시각 유지가 읽힌 뒤 새 정보를 배치한다.
|
|
@@ -46,5 +52,6 @@ description: 재난방송실을 이용하는 창작 AI가 한국형 재난방송
|
|
|
46
52
|
- 전달 묶음은 시나리오·필수 자산·재생성 코드·출처 안내로 구성하고 임시 검토·통계 파일은 제외한다.
|
|
47
53
|
|
|
48
54
|
- 내용·시점·공간·기관의 관계가 의도와 일치하는지 확인한다. 의도된 허구 속 모순을 실수로 없애거나, 조사 실수를 의도된 모순으로 포장하지 않는다.
|
|
55
|
+
- 각 문장·표시·소리가 해당 주체의 정보·입장·목적과 전달 경로에 맞고, 시청자가 그 출처와 의미를 이해할 수 있는지 확인한다. 문자가 상황 중계로, 뉴스가 채팅 반응으로, 현황판이 비공개 관제 화면으로 변하지 않았는지 본다.
|
|
49
56
|
- 실제 규정의 문안과 작품에서 새로 작성한 내용이 참고자료에서 뒤섞이지 않게 한다.
|
|
50
57
|
- 출력 파일의 실제 상태와 미검증 항목을 구분해 전달한다. 영상에는 허구임을 알리는 표기를 포함하고, 출력과 함께 생성한 `.credits.txt`의 출처를 게시 설명에 포함한다. 실제 송출이나 외부 게시·업로드는 별도 요청 없이 수행하지 않는다.
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
| 재난 유형별 기관·명칭·90자/157자 표준문안 전체 163항목 | [재난문자 표준문안](disaster-sms-templates.md) |
|
|
9
9
|
| 민방위 발령·전달 체계, 사이렌·음성·TV자막·CBS 문안 | [민방위 경보와 공식 방송문안](civil-defense.md) |
|
|
10
10
|
| 기상특보·지진·홍수·산사태의 단계·시간·관측값 구분 | [위험정보의 실제 체계](hazard-information.md) |
|
|
11
|
-
|
|
|
12
|
-
| Tone.js
|
|
13
|
-
|
|
|
14
|
-
|
|
|
11
|
+
| 상태바에 쓸 실재하는 공식 체계의 확인 기준, 위기경보·동원령·비상근무·대비태세의 구별 | [상황 지표의 실제 체계](status-systems.md) |
|
|
12
|
+
| 소리의 출처·시청 환경과 전달 의미, Tone.js 코드·오프라인 WAV·로컬 샘플 | [음원 제작](audio.md) |
|
|
13
|
+
| 작성 주체의 정보·입장·목적, 현황판과 시청자의 관점, 매체별 역할·시간차·호흡 | [방송 연출](direction.md) |
|
|
14
|
+
| 기자의 취재 환경·확인 범위, 속보·후속·현장 보도와 실제 표현 사례 | [뉴스 표현 참고](news-writing.md) |
|
|
15
15
|
|
|
16
16
|
재난문자는 예규 제361호(2026-02-04 시행), 민방위는 예규 제355호(2026-01-05 시행)를 기준으로 본문·표·문안을 재구성했다. 기상청의 2026-05-15 재난성호우 및 2026-05-28 지진현장경보 개편은 재난문자 운영 자료의 후속 변경 절에 구분했다. 원문 파일을 중복 보관하지 않고 각 문서에 공식 출처와 시행일을 연결했다. 표의 병합 관계와 문장 선택지를 풀어 적었으며, PDF 표준문안의 열 맞춤 줄바꿈은 문장 단위로 연결했다.
|
|
17
17
|
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
`dbs audio`는 창작자가 작성한 JavaScript 모듈을 Chromium의 Web Audio `Tone.Offline` 안에서 실행해 **PCM16 WAV**로 저장한다. Python이나 별도 Tone.js 설치는 필요 없다. Tone.js는 도구 의존성에 고정되어 있다. 완성 WAV를 일반 `assets`와 `audio` 이벤트에 연결하므로 영상 출력 때 합성 코드를 다시 실행하지 않는다.
|
|
4
4
|
|
|
5
|
+
## 소리의 출처와 시청자
|
|
6
|
+
|
|
7
|
+
소리를 추가하기 전에 서비스의 알림음, 방송에 포함된 현장·취재 음성, 작품의 배경음 중 무엇인지 정한다. 방송 속 소리는 누가 어디서 내며 어떤 경로로 송출에 포함되는지, 배경음은 장면에서 어떤 정서와 의미를 만드는지 맞춘다. 각 소리의 역할이 화면의 정보와 충돌하지 않아야 한다.
|
|
8
|
+
|
|
9
|
+
시청자는 재생 기기와 자신의 주변 환경에서 영상을 듣는다. 시청자가 소리의 출처와 의미를 어떻게 받아들일지 검토하고, 작중 상황·서비스 동작·시청자의 실제 환경 사이의 관계가 연출 의도에 맞는지 확인한다. 기본음에도 같은 기준을 적용하며 작품의 맥락에 따라 이벤트의 `sound`로 끄거나 교체한다. 합성한 파일만 듣지 말고 실제 화면과 함께 재생해 판단한다.
|
|
10
|
+
|
|
5
11
|
## 실행 가능한 시작점
|
|
6
12
|
|
|
7
13
|
상태 변경·방송 안내·등급별 문자 수신음은 엔진 기본 기능이며 작품마다 생성하지 않는다. 뉴스는 기본 무음이며 `sound: default` 또는 사용자 음원을 명시한 경우에만 소리를 재생한다. 상태 변경음은 화면 교체 시작에 같은 높이로 두 번 울리는 0.3초의 짧은 전자음이다. 안전안내는 0.55초의 휴대폰 진동형 수신음, 긴급재난은 2.4초의 반복 경보, 위급재난은 4.2초의 더 강한 반복·지속 경보다. 긴급·위급은 EAS풍의 불협화음으로 합성했다. `alert`, `status`, `news`, `bulletin`에서 `sound: false`로 끄거나 `{asset, duration, volume}`으로 다른 음원을 연결한다. 기본음과 별도 `audio` 이벤트를 중복하지 않는다. `silence`는 기본음도 음소거한다.
|
|
@@ -2,13 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
이 문서는 창작·연출 조언이다. 실제 발송 규정과 엔진 요구사항이 아니다. 소재·분량·구조는 작품에 맞춰 결정한다.
|
|
4
4
|
|
|
5
|
+
## 전달 주체와 시청자의 자리
|
|
6
|
+
|
|
7
|
+
현황판은 공개된 재난문자와 뉴스를 모아 라이브 스트리밍하는 서비스다. 운영자는 공개 정보의 수신·정리·표시와 송출을 맡는다. 화면의 정보 범위는 이 서비스가 정보를 얻고 공개할 수 있는 경로에 맞춘다. 시청자는 그 방송을 보고 있으며, 작품 속 피해 주민·취재기자·운영자와 같은 장소나 정보를 공유한다고 가정하지 않는다.
|
|
8
|
+
|
|
9
|
+
문장을 쓰거나 효과를 넣기 전에 다음 관계를 맞춘다. 이를 별도 설정표로 제출할 필요는 없지만 결과물에서는 일관되게 성립해야 한다.
|
|
10
|
+
|
|
11
|
+
- **주체와 환경:** 누가 작성·발언하는가. 기관의 담당자, 편집국 기자, 현장 취재기자, 주민은 지금 어디에 있고 무엇을 확인할 수 있는가.
|
|
12
|
+
- **정보와 판단:** 언제 어떤 경로로 알았으며 어디까지 확인했는가. 관측·제보·기관 판단·공표가 구별되는가.
|
|
13
|
+
- **입장과 목적:** 그 주체는 어떤 권한과 책임으로, 누구에게 무엇을 알리거나 요청하려 하는가. 주민 보호, 보도, 서비스 공지, 개인 반응에 맞는 내용인가.
|
|
14
|
+
- **전달과 수용:** 그 정보나 소리가 어떤 경로로 현황판에 실리는가. 시청자는 무엇의 변화로 받아들이며, 화면에서 읽거나 들을 근거가 있는가.
|
|
15
|
+
|
|
16
|
+
### 매체별 작성 기준
|
|
17
|
+
|
|
18
|
+
| 요소·작성 주체 | 당시 정보와 전달 목적 | 표현의 기준 |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| 재난문자·발송 권한이 있는 행정기관·지자체 등 | 상황을 파악하고 위험을 판단해 대상 국민·주민에게 알림 | 기관의 책임과 발송 목적에 따라 위험 정보·적용 지역·필요한 조치 등을 선별해 공적으로 안내 |
|
|
21
|
+
| 뉴스·언론사 기자와 편집국 | 취재·제보·기관 발표를 확인하고 공익적 중요성에 따라 보도 | 확인 주체와 범위를 밝히는 절제된 문장. 속보의 긴급성과 불확실성, 후속 기사의 설명, 현장 연결의 관찰 범위를 구별 |
|
|
22
|
+
| 채팅·스트리밍 시청자 | 방송을 보거나 자신의 생활권에서 경험한 것을 말함 | 질문·즉각적 반응·목격담·추측·일상 중계. 각자의 지역·접속 환경·정보 차이와 대화 흐름을 반영 |
|
|
23
|
+
| 지도·상태 표시·현황판 운영자 | 수신한 공개 정보의 위치·범위·발표 상태를 정리 | 정보 출처와 갱신 시점에 맞춰 표시. 서비스가 자체적으로 위험이나 대응 단계를 판정한 것처럼 쓰지 않음 |
|
|
24
|
+
| 방송 안내·서비스 운영자 | 자신의 서비스 운영·정보 수신·송출 상태를 시청자에게 알림 | 수신 지연·점검·송출 중단처럼 운영자가 알리고 책임질 내용. 재난 대응 지휘나 주민 대피 명령을 대신하지 않음 |
|
|
25
|
+
|
|
26
|
+
각 매체는 같은 사건에서도 작성 주체와 수신자에게 필요한 부분을 선택한다. 문체를 바꾸는 데 그치지 않고, 그 주체가 지금 그 내용을 전달할 이유와 전달할 수 있는 범위를 맞춘다. 작가가 긴장을 높이려는 의도를 등장 주체의 발송·보도 동기로 대신하지 않는다. 매체의 평상시 역할을 벗어나는 공포 연출은 그 이탈 자체가 이야기의 사건으로 읽히도록 맥락을 갖춘다.
|
|
27
|
+
|
|
5
28
|
## 사건과 정보의 시간차
|
|
6
29
|
|
|
7
|
-
사건이 일어나는 시각, 기관이 알아차리는 시각, 주민에게 지시하는 시각, 언론이 보도하는 시각을 구별한다. 지도는 무엇을 나타내는 화면인지 먼저
|
|
30
|
+
사건이 일어나는 시각, 기관이 알아차리는 시각, 주민에게 지시하는 시각, 언론이 보도하는 시각, 현황판이 수신하는 시각을 구별한다. 지도는 무엇을 나타내는 화면인지 먼저 정하고, 표시 내용과 범위를 서비스가 수신할 수 있는 공개 정보에 맞춘다. 작성 주체가 아직 얻지 못한 정보가 화면에 먼저 나타나면 시청자는 그것이 의도된 사건인지 제작 실수인지 구별하기 어렵다.
|
|
8
31
|
|
|
9
32
|
작중 원인과 관객에게 보이는 사건의 연결을 먼저 맞춘다. 새 위험 → 관측·신고 → 임시 판단 → 조치 → 그 결과의 관측이 성립하면 짧은 문장도 무게를 가진다. 원인을 끝까지 설명하지 않는 공포와, 사건 사이 인과가 빠진 이야기는 구별한다. 실종을 발표했다면 누가 얼마나 확인했는지, 통제를 확대했다면 어떤 새로운 관측이 있었는지 작가는 알고 있어야 한다.
|
|
10
33
|
|
|
11
|
-
|
|
34
|
+
작가가 파악한 인과를 모두 화면에 설명할 필요는 없다. 문자·뉴스·지도에는 각 주체가 당시 전달할 수 있는 부분만 반영한다. 확정되지 않은 제보는 제보임을 드러낸다.
|
|
12
35
|
|
|
13
36
|
## 호흡과 변화
|
|
14
37
|
|
|
@@ -16,12 +39,13 @@
|
|
|
16
39
|
|
|
17
40
|
- **지도:** 실제 영향을 받는 지역 변화, 카메라 이동, 기존 경계와 맞지 않는 관측 영역을 담당한다.
|
|
18
41
|
- **문자:** 구체적 행동과 그 지시가 바뀌는 이유를 담당한다. 긴 설명·세계관 해설을 맡기지 않는다.
|
|
19
|
-
- **뉴스:**
|
|
20
|
-
-
|
|
42
|
+
- **뉴스:** 취재·기관 발표·제보의 확인 결과와 후속 정황을 담당한다. 현장 중계도 기자의 관찰 범위와 전달 필요에 맞춰 절제하며, 모든 미세한 사건에 속보를 붙이지 않는다. 구체적인 문체는 [뉴스 표현](news-writing.md)을 따른다.
|
|
43
|
+
- **채팅:** 스트리밍 설정에 맞을 때 선택한다. 질문·생활 반응·목격담·의심처럼 서로 다른 사람의 관점을 보여준다. 같은 닉네임이 뒤에 다시 나타나면 그 사람의 상황 변화를 이어갈 수 있다. 화면에 막 뜬 정보에 대한 반응에는 읽고 입력할 여유를 두고, 특정 지역의 경험을 모든 시청자의 경험처럼 쓰지 않는다. 확인되지 않은 대화가 자동으로 공식 사실이 되지는 않으며 문자·뉴스를 그대로 되풀이하거나 모두가 같은 말투로 반응하지 않게 한다. 중요한 안내를 읽는 동안은 메시지 간격을 벌린다.
|
|
44
|
+
- **상태 박스:** [실재하는 공식 체계](status-systems.md)의 단계·발령 상태를 공개 정보에 따라 간결하게 유지한다. 체계·단계·상태명을 임의로 만들지 않으며, 개별 대응 조치와 상황 요약은 뉴스 등 목적에 맞는 매체로 전달한다.
|
|
21
45
|
- **방송 안내:** 송출 매체가 바뀌거나 방송 중단 고지를 하는 등 전체화면이 필요한 경우에 쓴다. 주민 행동요령은 해당 주민에게 보내는 재난문자로 작성하고 전체화면으로 반복하지 않는다.
|
|
22
|
-
- **음향:**
|
|
46
|
+
- **음향:** 서비스의 정보 갱신 알림, 방송에 포함된 현장 소리, 작품의 배경음·침묵을 구별해 배치한다. [출처와 전달 경로](audio.md#소리의-출처와-시청자), 시청자가 듣는 환경과 그 소리에서 받아들일 의미를 함께 고려한다.
|
|
23
47
|
|
|
24
|
-
글자를 읽고 의미를 이해한 뒤 화면의 변화를 살필 시간이 필요하다. 각 장면이 앞 장면의 질문을 발전시키거나 새로운 결과를 보여주는지 확인한다. 시간을 벌기 위한 반복 속보는 덜어낸다. 컷 내부는 1:1로 흐르며 더 긴 과정이 필요하면 자연스러운 시점에서 컷을 건너뛴다. 긴 침묵은 의도된 기다림과 정보 없는 정체 중 무엇인지 판단한다.
|
|
48
|
+
문안은 전문이 한 번에 읽힐 만큼 짧게 쓴다. 긴 설명을 자동 페이지 전환에 맡기지 않고 필요한 행동·사실·반응을 추린다. 글자를 읽고 의미를 이해한 뒤 화면의 변화를 살필 시간이 필요하다. 각 장면이 앞 장면의 질문을 발전시키거나 새로운 결과를 보여주는지 확인한다. 시간을 벌기 위한 반복 속보는 덜어낸다. 컷 내부는 1:1로 흐르며 더 긴 과정이 필요하면 자연스러운 시점에서 컷을 건너뛴다. 긴 침묵은 의도된 기다림과 정보 없는 정체 중 무엇인지 판단한다.
|
|
25
49
|
|
|
26
50
|
## 한국어 문장 점검
|
|
27
51
|
|
|
@@ -39,7 +63,7 @@
|
|
|
39
63
|
|
|
40
64
|
## 완성본 점검
|
|
41
65
|
|
|
42
|
-
문안만 검토하지 않고 같은 시점의
|
|
66
|
+
문안만 검토하지 않고 같은 시점의 지도·상태·뉴스·채팅·음향을 시청자의 자리에서 함께 본다. ‘누가 왜 이 말을 하는가’, ‘어떻게 이 방송에 들어왔는가’, ‘시청자는 누구의 경험으로 받아들이는가’가 맞는지 확인한다. 중요 변화 직전·직후, 컷 경계, 마지막 장면의 실제 출력물을 확인한다. 수정한 부분을 우선 구간 출력하고 해결된 부분을 반복 검증하느라 제작을 멈추지 않는다. 전체 출력에서는 읽을 시간, 시각 도약, 음량, 끝맺음과 출처 동봉을 확인한다.
|
|
43
67
|
|
|
44
68
|
화면 후처리는 [파일 형식](format.md)의 `screen` 이벤트로 작성한다. 잡음·주사선·색 분리·신호 누락을 기본 분위기처럼 계속 강제하지 말고, 정보원이 바뀌거나 송출이 흔들리는 등 작품상 근거가 있는 시점에 배치한다. 효과 이름 자체를 이야기의 이유로 대신하지 않는다.
|
|
45
69
|
|
|
@@ -49,28 +49,70 @@ YAML/JSON을 사용한다. 알 수 없는 필드와 중복 YAML 키는 오류다
|
|
|
49
49
|
|
|
50
50
|
컷은 `{id, duration, storyTime, clockTransition?, fadeIn?, fadeOut?}`다. 길이·페이드는 초, `storyTime`은 시간대가 있는 ISO 시각이다. 컷은 목록 순서대로 이어진다. 컷 내부 시계는 현실과 1:1로 흐른다. 다음 `storyTime`은 이전 컷 종료 이후여야 한다. 배속 필드는 없으며 시간 생략은 컷 경계에서만 일어난다.
|
|
51
51
|
|
|
52
|
-
영상 처음 5초는 제목·허구 고지 오프닝이다. 첫 컷 시간에 포함되므로 본문 읽기·중요 사건은 그 이후에 배치한다. 시간을 건너뛰는 컷에 `clockTransition: 4.2`를 주면 이전 화면을 유지한 채 기존 상단 시계를 밝게 강조하고, 이전 종료 시각에서 새 시각으로 숫자가 빠르게 이동한 뒤 도착 시각을 잠깐 유지한다. 강조가 사라지면 정확한 현재 시각에서 실시간으로 흐른다.
|
|
52
|
+
영상 처음 5초는 제목·허구 고지 오프닝이다. 첫 컷 시간에 포함되므로 본문 읽기·중요 사건은 그 이후에 배치한다. 시간을 건너뛰는 컷에 `clockTransition: 4.2`를 주면 이전 화면을 유지한 채 기존 상단 시계를 밝게 강조하고, 이전 종료 시각에서 새 시각으로 숫자가 빠르게 이동한 뒤 도착 시각을 잠깐 유지한다. 실제 시간을 생략하는 전환에는 가로 잔상·움직이는 주사선과 화면 중앙의 흐릿한 빠른 재생 아이콘이 함께 나타났다가 도착 시 사라진다. 시계의 위치·크기·선명도는 유지한다. 강조가 사라지면 정확한 현재 시각에서 실시간으로 흐른다. 첫 컷에는 지정하지 않는다. 새 문자·뉴스·상태·지도 변화는 전환이 끝난 후 약 0.1~0.4초 간격을 두고 배치해 기존 이력과 구분한다. 페이드는 선택이며 시계 전환을 가리지 않게 한다. 편집을 위해 매 사건마다 컷을 나누지 않는다.
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
시간 도약에는 설명 문구를 표시하지 않는다. `clockTransition` 기본값은 0으로 전환을 생략하며 이야기 시각이 연속인 컷에는 도약 후처리를 표시하지 않는다.
|
|
55
|
+
|
|
56
|
+
공통 이벤트 필드는 `id`, `type`, `cut`, `at`다. `at`은 해당 컷 시작 후 초다. 문자와 채팅 메시지 이외에는 양수 `duration`이 필요하며 활성 구간은 `[시작, 종료)`다. 컷을 넘겨 유지하려면 `carry: true`를 명시하고 끝이 전체 영상 안에 있어야 한다. ID는 영문·숫자·밑줄·하이픈을 사용한다. 지역 ID도 문자열로 쓴다.
|
|
55
57
|
|
|
56
58
|
## 내용·방송 화면
|
|
57
59
|
|
|
58
60
|
| `type` | 추가 필드 | 동작 |
|
|
59
61
|
| --- | --- | --- |
|
|
60
|
-
| `alert` | `sender`, `text`, `level?`, `regions?`, `
|
|
61
|
-
| `news` | `duration`, `source`, `headline`, `publishedAt?`, `sound?`, `carry?` | 하단 뉴스. 기본 무음. 동시 1개. 최대
|
|
62
|
+
| `alert` | `sender`, `text`, `level?`, `regions?`, `occurredAt?`, `publishedAt?`, `mapHighlight?`, `sound?` | 수신 이후 최신순 이력에 남는다. 본문 최대 120자. duration/carry 없음 |
|
|
63
|
+
| `news` | `duration`, `source`, `headline`, `publishedAt?`, `sound?`, `carry?` | 하단 뉴스. 기본 무음. 동시 1개. 최대 64자 |
|
|
62
64
|
| `status` | `duration`, `items: [{text, color}]`, `sound?`, `carry?` | 상단 상태 박스 전체. 동시 1개 |
|
|
63
|
-
| `bulletin` | `duration`, `source`, `heading`, `text`, `color?`, `
|
|
65
|
+
| `bulletin` | `duration`, `source`, `heading`, `text`, `color?`, `sound?`, `carry?` | 지도·문자 부분을 덮는 방송 안내. 시계·상태·하단 뉴스 유지. 제목 최대 40자, 본문 최대 180자. 동시 1개 |
|
|
64
66
|
|
|
65
|
-
`sender`와 `source`는 `agencies`의 ID다. 문자는 실제 수신 시각을 이벤트의 `at`으로 정한다. 발생·발표 시각을 별도로 주지 않으면 임의로 만들어 표시하지 않는다. 문자 등급은 `안전안내`(기본)·`긴급재난`·`위급재난`이다. 원문에 `[발신자 표시명]`이 있으면 그대로 사용하고, 없으면 앞에 붙인다. 별도 기관명 칸을 반복하지 않는다.
|
|
67
|
+
`sender`와 `source`는 `agencies`의 ID다. 문자는 실제 수신 시각을 이벤트의 `at`으로 정한다. 발생·발표 시각을 별도로 주지 않으면 임의로 만들어 표시하지 않는다. 문자 등급은 `안전안내`(기본)·`긴급재난`·`위급재난`이다. 원문에 `[발신자 표시명]`이 있으면 그대로 사용하고, 없으면 앞에 붙인다. 별도 기관명 칸을 반복하지 않는다. 정정 안내도 일반 문자로 작성하고 본문에서 앞선 안내를 정정한다고 설명한다. 별도 정정 배지·이전 문자 연결 표시는 없다. 서로 다른 기관의 상충된 주장은 데이터 오류가 아니다.
|
|
66
68
|
|
|
67
69
|
문자 이력은 수신 최신순으로 쌓인다. 같은 시점에 도착한 문자는 시나리오 배열의 뒤 항목을 위에 둔다. 새 문자 도착 시 기존 항목이 아래로 이동하고, 패널 높이를 넘긴 항목은 아래쪽에 가려진다. 시간 도약 후에도 이전 수신 이력을 유지한다.
|
|
68
70
|
|
|
69
|
-
|
|
71
|
+
모든 문안은 전문을 한 번에 보여준다. 문자·뉴스·방송 안내·채팅에 자동 페이지 전환이나 페이지 번호를 붙이지 않는다. 문자 최대 120자, 뉴스 최대 64자, 방송 안내 본문 최대 180자, 채팅 최대 80자는 이 엔진의 화면 구성 한도이며 실제 문자 발송 제도의 법정 한도를 뜻하지 않는다. 명시적 개행이 많아 화면을 넘기는 문안과 발신자 접두사를 포함해 너무 긴 문자도 검증 오류다. 문장이 길면 필요한 행동과 사실을 중심으로 간결하게 고친다. 화면에 더 많은 정보를 넣으려고 글자를 줄이지 않는다.
|
|
72
|
+
|
|
73
|
+
문자 읽기 경고는 최소 8초와 초당 8자를 기준으로 수신 후 다음 문자 또는 영상 끝까지의 시간을 확인한다. 발신자·본문·등급이 같은 연속 반복 문자는 읽기 간격 경고에서 제외한다. `validate`의 경고를 확인하고 중요한 문자 사이에 읽을 시간을 둔다. 모바일 확인은 16:9 가로 전체화면을 기준으로 하며 실제 출력과 854×480 축소본에서 핵심 지시가 읽히는지 검토한다.
|
|
74
|
+
|
|
75
|
+
뉴스 교체·종료, 새 문자 수신, 상태의 등장·교체·해제와 방송 안내 진입·종료에는 약 0.45초의 이동·명도 전환이 기본 적용된다. 새 문자는 위에서 펼쳐지며 이전 이력을 아래로 밀어낸다. 이력으로 내려간 문자도 등급 배지·왼쪽 테두리의 색상은 유지한다. 상태는 유지되는 문구·색상을 다시 강조하지 않고 바뀐 항목만 같은 칸에서 교체한다. 새 상태는 진입 후 1.8초 동안 3회 밝기가 내려갔다 돌아오고 배경·하단 선으로 함께 강조한다. 범례·보조 지도도 부드럽게 진입한다. 종료 전환은 이벤트 종료 프레임부터 최대 약 0.45초 동안 이전 문구를 보여주며 사라진다. 모두 콘텐츠 프레임 기준이므로 시계 전환 중에는 효과도 멈추며 별도 애니메이션 데이터를 작성할 필요가 없다.
|
|
76
|
+
|
|
77
|
+
상태 박스에는 문구와 `#RRGGBB` 색상만 있다. 경보 종류·단계·규칙을 엔진이 판단하지 않는다. 작성할 내용은 [상황 지표의 집필 기준](status-systems.md)에 따라 실재하는 공식 체계의 단계·발령 상태로 한정한다. 전체 문구를 `DEFCON 4`, `갑호비상`, `소방동원령 1호`처럼 짧게 작성한다. 배열 순서대로 나란히 표시한다. 변경할 때는 현재 이벤트 종료와 다음 이벤트 시작을 맞춘다. `items: []`나 상태 이벤트가 없는 구간에는 해제 전환 후 박스가 없다. 화면 폭에 맞는 개수와 길이로 작성하고 실제 프레임을 확인한다.
|
|
78
|
+
|
|
79
|
+
### 스트리밍 채팅
|
|
80
|
+
|
|
81
|
+
현황판을 스트리밍 중이라는 설정에서 선택적으로 사용한다. `chat`이 활성화된 구간에만 오른쪽 문자 패널 아래에 채팅이 나타난다. 지도·시계·뉴스는 크기를 유지하고 문자 이력은 남은 높이에서 표시한다. 방송 안내는 채팅도 덮으며 전체 화면 효과와 송출 종료도 함께 적용된다. 실제 플랫폼 연결 없이 작성한 대화만 재생한다.
|
|
82
|
+
|
|
83
|
+
| `type` | 추가 필드 | 동작 |
|
|
84
|
+
| --- | --- | --- |
|
|
85
|
+
| `chat` | `duration`, `title?`, `carry?` | 채팅 패널. 동시 1개. title 기본 `실시간 채팅`, 최대 30자 |
|
|
86
|
+
| `chat-message` | `chat`, `author`, `text`, `color?` | chat에 패널 ID 지정. author 최대 20자, text 최대 80자. color는 닉네임 색, 기본 `#9fb8cb`. duration/carry 없음 |
|
|
87
|
+
|
|
88
|
+
메시지 시점은 다른 이벤트와 동일하게 해당 `cut`의 `at`으로 지정한다. 참조한 패널의 시작 이상·종료 미만이어야 하며, 패널이 컷을 넘으면 `carry: true`와 충분한 길이를 지정한다. 패널과 메시지는 배열에서 어느 순서에 두어도 되지만 같은 프레임의 메시지는 배열 순서대로 아래에 추가된다. 새 패널은 빈 대화로 시작한다. 닉네임·본문·패널 제목은 공백만 쓰거나 개행할 수 없다. 본문은 화면 폭에 맞춰 자동 줄바꿈된다.
|
|
70
89
|
|
|
71
|
-
|
|
90
|
+
대화는 아래에서 위로 밀려 올라가며 오래된 항목은 위쪽에서 가려진다. 최신 메시지가 읽힐 시간을 주고 긴 메시지를 연달아 쏟아내지 않는다. 시간 도약 중에는 기존 대화와 수신 애니메이션을 유지하고, 임의 탐색에서도 같은 상태를 복원한다. `inspect`의 `chat`은 활성 패널과 현재까지 받은 전체 메시지 목록이며 비활성 구간에는 `null`이다. 채팅은 기본 무음이다.
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
- id: live-chat
|
|
94
|
+
type: chat
|
|
95
|
+
cut: opening
|
|
96
|
+
at: 5
|
|
97
|
+
duration: 25
|
|
98
|
+
- id: viewer-1
|
|
99
|
+
type: chat-message
|
|
100
|
+
chat: live-chat
|
|
101
|
+
cut: opening
|
|
102
|
+
at: 7
|
|
103
|
+
author: 강가사는사람
|
|
104
|
+
text: 여기 안내 방송도 같은 말 계속 나오는데요
|
|
105
|
+
- id: viewer-2
|
|
106
|
+
type: chat-message
|
|
107
|
+
chat: live-chat
|
|
108
|
+
cut: opening
|
|
109
|
+
at: 10
|
|
110
|
+
author: 밤산책
|
|
111
|
+
color: '#b6ab8d'
|
|
112
|
+
text: 어느 쪽이에요? 저희 동네는 조용한데
|
|
113
|
+
```
|
|
72
114
|
|
|
73
|
-
|
|
115
|
+
예시는 길이 30초 이상인 `opening` 컷의 `events` 안에 넣는 계약 예시다. 특정 반응이나 줄거리를 모든 작품에 강제하지 않는다.
|
|
74
116
|
|
|
75
117
|
## 지도 연출
|
|
76
118
|
|
|
@@ -106,7 +148,7 @@ YAML/JSON을 사용한다. 알 수 없는 필드와 중복 YAML 키는 오류다
|
|
|
106
148
|
|
|
107
149
|
음원 시작 위치와 연출은 영상 프레임에서 계산한다. 컷 경계를 넘길 음원은 carry를 지정하고 로컬 파일의 길이도 확보한다. 음원을 자동 반복하지 않는다. 큰 음량·지속적인 노이즈·잦은 섬광으로 공포를 대신하지 않는다.
|
|
108
150
|
|
|
109
|
-
문자에는 등급별 기본음이 한 번 재생된다. 안전안내는 휴대폰 진동형 두 번 떨림의 0.55초, 긴급재난 2.4초, 위급재난 4.2초이며 긴급·위급은 단계적으로 더 크고 긴 EAS풍 경보다. 상태는 등장·항목 변경·해제 때 같은 높이로 두 번 울리는 짧은 전자음의 0.3초, 방송 안내는 시작 때 크고 묵직하게 두 번 울리는 1초의 알림음을 제공한다. 뉴스는 기본 무음이며 화면 전환으로 갱신을 알린다. 같은 상태를 연속 유지하면 다시 울리지 않고 교체·명시적 빈 항목 해제는 새 상태의 설정을 따른다. 자연 종료는 종료되는 상태의 설정을 따른다. 뉴스·방송 안내
|
|
151
|
+
문자에는 등급별 기본음이 한 번 재생된다. 안전안내는 휴대폰 진동형 두 번 떨림의 0.55초, 긴급재난 2.4초, 위급재난 4.2초이며 긴급·위급은 단계적으로 더 크고 긴 EAS풍 경보다. 상태는 등장·항목 변경·해제 때 같은 높이로 두 번 울리는 짧은 전자음의 0.3초, 방송 안내는 시작 때 크고 묵직하게 두 번 울리는 1초의 알림음을 제공한다. 뉴스는 기본 무음이며 화면 전환으로 갱신을 알린다. 같은 상태를 연속 유지하면 다시 울리지 않고 교체·명시적 빈 항목 해제는 새 상태의 설정을 따른다. 자연 종료는 종료되는 상태의 설정을 따른다. 뉴스·방송 안내 종료에는 추가 음이 없다.
|
|
110
152
|
|
|
111
153
|
`sound: false`로 끄거나 `sound: {asset: myTone, duration: 0.8, volume: 0.7}`로 사용자 자산을 지정한다. `alert`, `status`, `bulletin`은 `sound: default`, `news`는 `sound: false`가 기본값이다. 뉴스에 `sound: default`를 명시하면 0.28초의 짧은 단음을 한 번 재생한다. 별도 `audio` 이벤트로 수신음을 중복 삽입하지 않는다. `silence`는 모든 기본 효과음도 음소거한다.
|
|
112
154
|
|
|
@@ -94,6 +94,16 @@
|
|
|
94
94
|
|
|
95
95
|
보도는 사건·확인 상태·대응을 전하고, 재난문자는 발송기관이 대상 주민에게 행동을 요청한다. 예를 들어 허구 뉴스는 `북부권 통화장애 신고 잇따라…통신사 “복구 중”`, 문자는 `○○지역 유선전화 통화장애 복구 중입니다. 긴급상황 시 휴대전화 문자신고를 이용해 주십시오. [가상시]`처럼 역할이 다르다. 이것들은 새로 쓴 창작 예문이며 실제 발송문이나 기사가 아니다.
|
|
96
96
|
|
|
97
|
+
다음은 집필 지침이며 공식 보도 규정의 인용이 아니다. 먼저 기자가 어디에서 무엇을 취재하고, 어떤 경로로 확인했으며, 지금 보도할 필요가 무엇인지 정한다. 편집국에서 기관 발표를 정리하는 기자와 통제선 밖에 있는 현장 기자는 알 수 있는 사실과 전달 방식이 다르다. 위험 때문에 접근이 제한되거나 통신이 끊겼다면 그 제약을 보도 범위에 반영한다. 기자의 목적은 시청자에게 중요한 사실과 맥락을 전하는 것이므로, 작가만 아는 사건의 전모나 등장인물의 속마음을 기사에 넣지 않는다.
|
|
98
|
+
|
|
99
|
+
| 보도 형태 | 정보 선택과 표현 |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| 속보 | 즉시 알릴 가치가 있는 새 사실을 짧게 전달. 확인된 범위와 출처를 남기며, 정보가 적다는 이유로 추측을 채우거나 사소한 변화마다 속보를 만들지 않음 |
|
|
102
|
+
| 후속·일반 보도 | 확인된 경과·배경·영향·대응을 정리. 앞선 속보와 무엇이 달라졌는지 보여주며 필요한 기준 시각을 붙임 |
|
|
103
|
+
| 현장 연결·중계 | 기자가 관찰하거나 취재로 확인한 현장 상황을 절제해 전달. 위치·시야·안전·통신 상태의 제약을 지키고, 채팅처럼 매 순간 감탄하거나 추측을 쏟아내지 않음 |
|
|
104
|
+
|
|
105
|
+
현황판의 뉴스 항목에는 원래 보도에서 전달할 핵심을 제목·요약으로 옮긴다. 화면에 현장 영상이나 음성이 없는 상태에서 현장 연결을 하는 듯한 말투만 가져오지 않는다. ‘속보’ 표시는 장면을 긴박하게 꾸미는 장식으로 쓰지 않는다.
|
|
106
|
+
|
|
97
107
|
- 제목의 앞뒤 절이 같은 정보만 반복하지 않게 한다. 상황을 알리는 절과 새 확인·대응을 알리는 절을 조합한다.
|
|
98
108
|
- 제보는 제보, 신고는 신고, 대원이 직접 확인한 내용은 확인으로 쓴다. 기관의 설명에는 발언 주체를 붙인다.
|
|
99
109
|
- `연락 두절 신고`와 `실종 확인`, `발신 기록이 없다`와 `발신 자체가 없었다`를 바꿔 쓰지 않는다. 미확인 원인을 설명하려고 전지적 시점의 문장을 넣지 않는다.
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
## 서로 다른 상태를 함께 읽기
|
|
6
6
|
|
|
7
|
+
상태바는 작품의 배경시대에 실재하는 공식 체계의 단계·발령 상태를 표시하는 영역으로 사용한다. 이 문서에 없는 체계도 공식 자료에서 명칭·단계·발령 주체·적용 범위를 확인한 뒤 사용할 수 있다. 일반적인 상황 설명이나 개별 대응 조치를 임의의 체계·단계·상태명으로 만들어 표시하지 않는다. 그런 내용은 뉴스 등 전달 목적에 맞는 매체로 작성하며, 실재 근거를 확인하지 못한 상태 항목은 제외한다. 이는 집필 기준이며 아래 자료에서 인용한 법령 문구가 아니다.
|
|
8
|
+
|
|
7
9
|
| 체계 | 무엇을 나타내는가 | 단계·범위 | 발령·판단 주체 |
|
|
8
10
|
| --- | --- | --- | --- |
|
|
9
11
|
| 재난별 위기경보 | 특정 위험의 발생·확대 가능성과 대응 필요 | 통상 관심 → 주의 → 경계 → 심각. 재난·지역별 발령 | 행정안전부장관 또는 해당 재난관리주관기관의 장 |
|
|
@@ -74,7 +76,7 @@
|
|
|
74
76
|
- **WATCHCON:** 정보감시태세. 공개 설명상 역시 5개 단계다. 군의 정보감시 강화와 전투준비태세 변화는 별도 판단이며 자동으로 같은 숫자가 되지 않는다.
|
|
75
77
|
- **진돗개:** 침투·국지도발에 대비하는 지역 방위태세. 셋·둘·하나 순으로 대비를 높인다. 특정 지역 발령을 전국 전면전 선포로 묘사하지 않는다.
|
|
76
78
|
|
|
77
|
-
실제 발령권·협의 절차·부대별 조치는 공개 자료의 시대와 적용 범위를 함께 읽어야 한다.
|
|
79
|
+
실제 발령권·협의 절차·부대별 조치는 공개 자료의 시대와 적용 범위를 함께 읽어야 한다. 상태바에 반영할 발령 정보는 작품 안에서도 공개되어 현황판이 수신할 수 있어야 한다. 체계가 실재하더라도 공개되지 않은 값을 운영자가 추측해 표시하지 않는다. 특정 단계가 되면 자동으로 특정 작전·전시작전통제권 전환이 일어난다는 일반 규칙을 엔진이나 스킬에 만들지 않는다.
|
|
78
80
|
|
|
79
81
|
## 사이버·대응본부와 민방위의 구별
|
|
80
82
|
|
|
@@ -86,4 +88,4 @@
|
|
|
86
88
|
|
|
87
89
|
## 화면에 옮기는 방법
|
|
88
90
|
|
|
89
|
-
엔진의 상태 박스는 `text`와 `color`만
|
|
91
|
+
엔진의 상태 박스는 `text`와 `color`만 받으며 체계의 실재 여부를 자동 검증하지 않는다. 집필 시 위 기준으로 확인한 공식 명칭과 단계·발령 상태를 짧게 작성한다. `DEFCON 4`, `갑호비상`, `소방동원령 1호`는 서로 다른 체계의 완성된 문구다. 시나리오에서 등장·변경·종료 시점을 정하고 필요한 항목만 나란히 둔다. 색에 법적 의미를 강제하지 않는다. 같은 기관의 다른 관할 상태를 하나로 합치지 않는다. 실제 발령 수위는 이 문서에서 자동 판정하지 않는다.
|