紙芝居DSL 4.0 Schemaリファレンス
Copyright © 2026 Hiroya Kubo. この文書はCC BY-SA 4.0で提供します。
対象: DSL 4.0台本の作成、構造・制約の確認を行う方
対象仕様: kamishibai: '4.0'\
この文書は、台本の項目や命令について正確な値を検索するための仕様一覧です。先頭から読むチュートリアルではありません。 初めて作品を作る場合は、先に「紙芝居を作る」チュートリアルを行い、機能を 増やすときに紙芝居DSL 4.0 台本作成ガイドの必要な節をお読みください。
文書状態: 固定実装基準を説明するSchemaリファレンス(正式リリースの操作資料ではない)
Schema固定commit: 29c0dea
Schema SHA-256: 46ff159c29e13704d707dae8e0d2ad3a146b6aa8a68a968614e6ef56d112f135
権威関係と配布状態: 2026年8月20日時点で
v4.0.0-rc.8はprereleaseとして公開されていますが、 正式なv4.0.0ではありません。 同一の上流完成commitに含まれる規範JSON Schema、表層仕様、適合実装・testを固定しています。 Schemaはruntime実装から生成しません。公開アプリ、配布artifact、 feature flagがDSL 4.0を有効にしているかは利用するreleaseごとに確認してください。
このリファレンスについて
この文書は、固定snapshotのDSL 4.0 JSON SchemaとCC BY-SA 4.0の日本語Annotationから 決定的に生成しています。型、必須性、既定値、数値範囲、列挙値、patternはSchemaから取得し、説明、掲載順、 注意事項、例はAnnotationで管理します。Schemaで定義される項目についてSchemaと生成物が異なる場合はSchemaを 優先します。include文はSchema検証前に処理されるためJSON Schema外であり、固定した表層仕様と実装に基づいて掲載します。
使い方: 作成中に分からない項目や命令が出たとき、その項目の節だけを開きます。表中の「field」は 台本の項目、「asset」は画像・音声などの素材、「action」は登場人物や舞台への命令を表します。
- 上流repository:
kubohiroya/tm-kamishibai - Schema path:
schema/dsl-4.schema.json - 上流commit日時:
2026-08-20T20:09:38+09:00 - 掲載範囲: トップレベル13 field、action 24種類、Annotation 93項目
- 更新方法:
pnpm docs:dsl4:sync -- --repository ../tm-kamishibai --commit <commit> - 差分確認:
pnpm docs:dsl4:check
表中の「必須」は、そのobjectまたは形式を選んだ場合の必須性です。stableIdなどの任意fieldは、
再読み込みや診断位置の安定化に必要かを作品ごとに判断してください。Schema項目の例は各Schema断片を機械検証し、
include文の例はYAMLとして構文検証しています。アセットやシーン間の参照整合性は、source frontendまたは
preview/buildでも別途確認する必要があります。
前処理
include文は台本を複数ファイルへ分けるための構文です。JSON Schemaのトップレベルfieldではないため、 指定したファイルを読み込んで一つの台本へ結合した後、 include文を取り除いてSchema検証へ渡します。
include — 別の台本ファイルを読み込む
台本を複数ファイルに分けるとき、現在のファイルから読み込む相対pathを指定します。一件は文字列、複数件はlistで書きます。
Schema位置: JSON Schema外(Schema検証前に処理)
includeはJSON Schemaのfieldではなく、Schema検証前に処理されます。dsl4SourceIncludesまたはCLIの--enable-source-includesを明示的に有効にした環境だけで使用できます。- pathは記述したファイルを基準にproject内へ解決し、循環、重複宣言、root外path、件数・byte数・深さの上限違反はエラーになります。
kamishibaiは起点の台本だけに書きます。
書式例:
include:
- chapters/opening.k4.yml
- chapters/ending.k4.yml
トップレベル構造
include文で指定したファイルを読み込み、結合した後にSchema検証へ渡すroot mappingで使用できるfieldです。Schemaの additionalProperties: false により、ここにないfieldは受理されません。
kamishibai — DSL version
文書がDSL 4.0であることを文字列で宣言します。引用符を外すとYAMLの数値になるため受理されません。
Schema位置: #/properties/kamishibai
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 固定値 4.0 |
— |
kamishibai fieldの値:
'4.0'
assets — asset登録
背景、音、costume、ポーズモデル、app shell UI用画像へ安定したIDを割り当てます。実体の指定方法はasset種別を参照してください。
Schema位置: #/properties/assets
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | 文字列(compactAsset) または object または object または object(namedBackdrop) または object または object または object(namedSound) または object または object または object(namedCostume) または object または object(namedPoseModel) または object または object(namedImage)(asset) |
— |
assets fieldの値:
Beach: backdrop
HeroIdle: costume:Hero
CameraMenuButton:
kind: image
file: select-camera.svg
loading: eager
actors — actor初期costume
actor IDを、同じactorをtargetにするcostume asset IDへ対応付けます。参照整合性は意味検証でも確認します。
Schema位置: #/properties/actors
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | 文字列(literalId)(assetId) |
— |
actors fieldの値:
Hero: HeroIdle
cover — 表紙
表紙に使う背景と任意のBGMを指定します。背景はbackdrop、BGMはsound assetを参照します。
Schema位置: #/properties/cover
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
backdrop |
必須 | 文字列(literalId)(assetId) |
— |
bgm |
任意 | 文字列(literalId)(assetId) |
— |
cover fieldの値:
backdrop: Title
bgm: Theme
textStyles — SVG Text style
Actor.setTextから参照する名前付きstyleを登録します。旧Text Assetの定義とは互換ではありません。
Schema位置: #/properties/textStyles
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | object(textStyle) |
未知field不可 |
textStyles fieldの値:
caption:
color: '#ffffff'
size: 28
align: center
bubbleStyles — 吹き出しstyle
Actor.sayとActor.thinkから参照する文字送り、配置、見た目、portrait、音、animationを名前付きで再利用・合成します。
Schema位置: #/properties/bubbleStyles
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | object(bubbleStyle) |
未知field不可 |
bubbleStyles fieldの値:
Typing:
characterIntervalSeconds: 0.05
Hero style:
styles:
- Typing
placement: FOOTER_LIKE
visualStyle: NORMAL
bubbleClosePolicies — 吹き出し終了条件
Actor.sayとActor.thinkから参照する終了条件を名前付きで登録します。秒数、advance入力、または両者の先着を再利用できます。
Schema位置: #/properties/bubbleClosePolicies
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | object(bubbleClosePolicy) |
未知field不可 |
waitFor: advanceはステージのprimary pointer/tapまたは修飾キーを伴わないキー入力で完了します。secondsとwaitForを両方指定すると、先に成立した方で吹き出しを閉じます。- policyの継承・合成は行わず、actionは
closePolicyで1件だけ参照します。
bubbleClosePolicies fieldの値:
after-3-seconds:
seconds: 3
user-advance:
waitFor: advance
advance-or-timeout:
seconds: 10
waitFor: advance
variables — runtime変数
条件式やcustom actionへ渡すstory変数の初期値を定義します。値は文字列、数値、真偽値に限定されます。
Schema位置: #/properties/variables
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | 文字列 または 数値 または 真偽値(variableValue) |
— |
- cameraの物理device ID、UIの選択状態、DOMやlistenerはstory変数へ保存しません。これらはapp shellがsession内だけで管理します。
variables fieldの値:
score: 0
ready: false
loading — 読み込み画面
asset準備中に表示する背景と、一つ以上のcostume列を指定します。
Schema位置: #/properties/loading
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
backdrop |
必須 | 文字列(literalId)(assetId) |
— |
costumes |
必須 | 文字列(literalId)(assetId)の配列 |
1項目以上 |
loading fieldの値:
backdrop: Loading
costumes:
- Spinner1
- Spinner2
poseRecognition — ポーズ認識設定
認識中の任意の音、モデル初期化、判定方法、feedback、プレイ中にポーズ待ちをskipできるか、camera previewの表示と任意UIをまとめます。idle音とcharge音は独立して省略できます。
Schema位置: #/properties/poseRecognition
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
idleSound |
任意 | 文字列(literalId)(assetId) |
— |
chargeSound |
任意 | 文字列(literalId)(assetId) |
— |
modelInitialization |
任意 | object(poseModelInitialization) |
未知field不可 |
sequence |
任意 | object(poseSequenceRecognition) |
未知field不可 |
selection |
任意 | object(poseSelectionRecognition) |
未知field不可 |
feedback |
任意 | object(poseFeedback) |
未知field不可 |
navigation |
任意 | object(poseNavigation) |
未知field不可 |
preview |
任意 | object(posePreview) |
未知field不可 |
poseRecognition fieldの値:
idleSound: PoseIdle
chargeSound: PoseCharge
modelInitialization:
policy: latest-needed
parallel: true
feedback:
mode: presenter
navigation:
allowSkip: true
preview:
mirroring: mirrored
overlay:
visible: true
minimumConfidence: 0.5
controls:
cameraMenu:
position: bottom-center
opacity: 0.8
buttonAsset: CameraMenuButton
controls — 操作profile
実行環境ごとのkeymapを定義し、キーをnavigationまたはhistory操作へ割り当てます。
Schema位置: #/properties/controls
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
keymaps |
必須 | mapping | 1 field以上 |
controls fieldの値:
keymaps:
presenter:
Space: navigation.nextAction
ArrowLeft: history.previousAction
branches — 条件分岐
上から評価する条件と遷移先を名前付きで登録します。各分岐にはelse規則を一つ含めます。
Schema位置: #/properties/branches
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | object(conditionRule) または object(elseRule)の配列(branchRules) |
1項目以上 |
branches fieldの値:
result:
- if: score > 0
goto: success
- else: retry
scenes — scene定義
一つ以上のsceneを記述します。短縮形のaction配列と、poseModelを持てるlong formがあります。
Schema位置: #/properties/scenes
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 1件以上 | object(stageAction) または object(bgmAction) または object(soundAction) または object(waitAction) または object(debuggerAction) または object(broadcastMessageAndWaitAction) または object(transitionAction) または object(gotoAction) または object(branchAction) または object(keyInputAction) または object(touchInputAction) または object(poseInputAction) または mapping(showAction) または mapping(setTransparencyAction) または mapping(moveToAction) または mapping(sayAction) または mapping(thinkAction) または mapping(setSkinAction) または mapping(hideAction) または mapping(setLayerAction) または mapping(loopAction) または mapping(setTextAction) または mapping(poseAction) または mapping(customActorAction)(action)の配列(actions) または object(longScene)(scene) |
— |
scenes fieldの値:
opening:
- stage: Beach
- wait: 1
asset種別
assetは短縮文字列または名前付きobjectで記述します。名前付きobjectでは、project内asset名、相対file、または明示的なremote sourceのいずれか一つを選びます。
assetで選べる形式
各asset IDの値は、短縮形式、背景、音、costume、ポーズモデルのいずれかです。
Schema位置: #/$defs/asset
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(compactAsset) |
pattern ^(?:backdrop\|sound\|costume:[\p{L}_][\p{L}\p{N}_-]*)$ |
| 形式2 | いずれか一つ | object または object または object(namedBackdrop) |
未知field不可 |
| 形式3 | いずれか一つ | object または object または object(namedSound) |
未知field不可 |
| 形式4 | いずれか一つ | object または object または object(namedCostume) |
未知field不可 |
| 形式5 | いずれか一つ | object または object(namedPoseModel) |
未知field不可 |
| 形式6 | いずれか一つ | object または object(namedImage) |
未知field不可 |
- 短縮形式はproject内に同名のassetがある場合に使います。
- remote sourceはHTTPS URLを指定し、内容を固定する場合はSHA-256、content type、byte sizeを三つとも指定します。
Schemaで検証できる値の例:
backdrop
短縮asset
backdrop、sound、または costume:<actor ID> でproject内の同名assetを参照します。
Schema位置: #/$defs/compactAsset
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | pattern ^(?:backdrop\|sound\|costume:[\p{L}_][\p{L}\p{N}_-]*)$ |
Schemaで検証できる値の例:
costume:Hero
名前付き背景
背景をproject内の名前、project内相対file、またはremote sourceから読み込みます。bitmapでは論理解像度を1倍または2倍で指定できます。
Schema位置: #/$defs/namedBackdrop
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
kind |
必須 | 固定値 backdrop |
— |
name |
任意 | 文字列 | 1文字以上 |
file |
任意 | 文字列(filePath) |
1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
source |
任意 | object(remoteAssetSource) |
未知field不可 |
bitmapResolution |
任意 | 1 / 2 |
既定値 1 |
delivery |
任意 | embedded / remote(deliveryPolicy) |
既定値 embedded |
loading |
任意 | eager / lazy(loadingPolicy) |
既定値 eager |
retention |
任意 | scene / story(retentionPolicy) |
— |
Schemaで検証できる値の例:
kind: backdrop
file: beach.png
bitmapResolution: 2
loading: eager
retention: story
名前付き音
音をproject内の名前、project内相対file、または固定remote sourceから読み込みます。
Schema位置: #/$defs/namedSound
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
kind |
必須 | 固定値 sound |
— |
name |
任意 | 文字列 | 1文字以上 |
file |
任意 | 文字列(filePath) |
1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
source |
任意 | object(remoteAssetSource) |
未知field不可 |
delivery |
任意 | embedded / remote(deliveryPolicy) |
既定値 embedded |
loading |
任意 | eager / lazy(loadingPolicy) |
既定値 eager |
retention |
任意 | scene / story(retentionPolicy) |
— |
Schemaで検証できる値の例:
kind: sound
name: Theme
loading: lazy
名前付きcostume
costumeではtarget actorを必ず指定します。bitmapでは論理解像度を1倍または2倍で指定でき、参照側actorとの一致も意味検証の対象です。
Schema位置: #/$defs/namedCostume
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
kind |
必須 | 固定値 costume |
— |
target |
必須 | 文字列(id)(actorId) |
— |
name |
任意 | 文字列 | 1文字以上 |
file |
任意 | 文字列(filePath) |
1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
source |
任意 | object(remoteAssetSource) |
未知field不可 |
bitmapResolution |
任意 | 1 / 2 |
既定値 1 |
delivery |
任意 | embedded / remote(deliveryPolicy) |
既定値 embedded |
loading |
任意 | eager / lazy(loadingPolicy) |
既定値 eager |
retention |
任意 | scene / story(retentionPolicy) |
— |
Schemaで検証できる値の例:
kind: costume
target: Hero
file: hero-happy.png
bitmapResolution: 2
名前付きポーズモデル
ポーズモデルは埋め込む相対file、通常のTurboWarp TM directory URL、または検証付きremote archiveで指定します。project内の表示名だけを使う形式はありません。
Schema位置: #/$defs/namedPoseModel
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
kind |
必須 | 固定値 poseModel |
— |
file |
任意 | 文字列(filePath) |
1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
source |
任意 | object(remotePoseModelSource) |
未知field不可 |
delivery |
任意 | embedded / remote(deliveryPolicy) |
既定値 embedded |
loading |
任意 | eager / lazy(loadingPolicy) |
既定値 eager |
retention |
任意 | scene / story(retentionPolicy) |
— |
Schemaで検証できる値の例:
kind: poseModel
delivery: remote
loading: lazy
source:
url: https://example.com/models/rescue/
名前付きUI画像
app shellが表示するpreview control iconを、project内相対fileまたは固定remote sourceとして登録します。
Schema位置: #/$defs/namedImage
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
kind |
必須 | 固定値 image |
— |
file |
任意 | 文字列(filePath) |
1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
source |
任意 | object(remoteAssetSource) |
未知field不可 |
delivery |
任意 | embedded / remote(deliveryPolicy) |
既定値 embedded |
loading |
任意 | eager / lazy(loadingPolicy) |
既定値 eager |
retention |
任意 | scene / story(retentionPolicy) |
— |
- camera preview controlから参照する画像は、preview開始時に必要なため
loading: eagerにします。
Schemaで検証できる値の例:
kind: image
file: select-camera.svg
loading: eager
actor・表示・認識・分岐設定
トップレベルfieldが参照するobjectの詳細です。表の必須性は、それぞれのobjectを記述した場合に適用されます。
actor mapping
任意のactor IDを初期costume asset IDへ対応付けます。
Schema位置: #/$defs/actors
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | 文字列(literalId)(assetId) |
— |
Schemaで検証できる値の例:
Hero: HeroIdle
表紙設定
表紙背景は必須、BGMは任意です。asset種別の一致は意味検証で確認します。
Schema位置: #/$defs/cover
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
backdrop |
必須 | 文字列(literalId)(assetId) |
— |
bgm |
任意 | 文字列(literalId)(assetId) |
— |
Schemaで検証できる値の例:
backdrop: Title
bgm: Theme
SVG Text style
背景色、文字色、font、size、文字揃えを名前付きstyleとして再利用します。吹き出しの位置はbubble styleで指定します。
Schema位置: #/$defs/textStyle
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
background |
任意 | 文字列 | — |
color |
任意 | 文字列 | — |
font |
任意 | 文字列 | 1文字以上 |
size |
任意 | 数値 | 0より大きい |
align |
任意 | left / center / right |
— |
Schemaで検証できる値の例:
background: '#00000080'
color: '#ffffff'
font: Noto Sans JP
size: 28
align: center
吹き出しstyle
文字送り、配置、見た目、portrait、音、animationを再利用できる部分styleとして定義します。stylesで既存styleを順に合成できます。
Schema位置: #/$defs/bubbleStyle
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
styles |
任意 | 文字列(bubbleStyleName)の配列 |
1項目以上 |
textStyle |
任意 | 文字列(id)(styleId) |
— |
maxWidth |
任意 | 数値 | 0より大きい |
textLocale |
任意 | 文字列 | 1文字以上 |
placement |
任意 | up / up-up-right / up-right / right-up-right / right / right-down-right / down-right / down-down-right / down / down-down-left / down-left / left-down-left / left / left-up-left / up-left / up-up-left / north / north-northeast / northeast / east-northeast / east / east-southeast / southeast / south-southeast / south / south-southwest / southwest / west-southwest / west / west-northwest / northwest / north-northwest / HEADER_LIKE / CENTER / FOOTER_LIKE または 数値 |
— |
distance |
任意 | 数値 | 0以上 |
tailLength |
任意 | 数値 | 0より大きい |
offset |
任意 | 使用不可の配列 または 使用不可の配列 | — |
visualStyle |
任意 | NORMAL / THINKING / DREAMING / YELLING / OFF_PANEL / WAVY / WHISPERING / ANNOUNCEMENT / NARRATION / NO_BUBBLE |
— |
portrait |
任意 | object(bubblePortrait) |
未知field不可 |
characterIntervalSeconds |
任意 | 数値 | 0より大きい |
characterSound |
任意 | 文字列(literalId)(assetId) |
— |
noSoundCharacters |
任意 | 文字列 | 1文字以上 |
restCharacters |
任意 | 文字列 | 1文字以上 |
restCharacterIntervalSeconds |
任意 | 数値 | 0より大きい |
continueIndicator |
任意 | object(bubbleContinueIndicator) |
未知field不可 |
reveal |
任意 | object(bubbleReveal) |
未知field不可 |
audio |
任意 | object(bubbleAudio) |
未知field不可 |
showAnimation |
任意 | object(bubbleMotion) |
未知field不可 |
hideAnimation |
任意 | object(bubbleMotion) |
未知field不可 |
visibleAnimations |
任意 | object(bubbleMotion)の配列 |
1項目以上 |
- 各styleは部分設定として記述できます。参照先を順に合成したeffective styleに対する依存関係は意味検証で確認します。
Schemaで検証できる値の例:
styles:
- Typing
textStyle: caption
placement: FOOTER_LIKE
visualStyle: NARRATION
characterIntervalSeconds: 0.05
continueIndicator:
frames: [Next1, Next2]
frameIntervalSeconds: 0.12
吹き出しstyle mapping
人が読めるstyle名を吹き出しstyleへ対応付けます。Actor.sayとActor.thinkのstyles配列から参照します。
Schema位置: #/$defs/bubbleStyles
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | object(bubbleStyle) |
未知field不可 |
Schemaで検証できる値の例:
Typing:
characterIntervalSeconds: 0.05
Hero style:
styles:
- Typing
placement: FOOTER_LIKE
入力待ちindicator
全文表示後にadvance入力を待っている間、2枚以上のimage assetを順番に表示します。
Schema位置: #/$defs/bubbleContinueIndicator
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
frames |
必須 | 文字列(literalId)(assetId)の配列 |
2項目以上 |
frameIntervalSeconds |
必須 | 数値 | 0より大きい |
Schemaで検証できる値の例:
frames: [Next1, Next2]
frameIntervalSeconds: 0.12
portrait frame animation
portraitのまばたきや口パクに使う1枚以上のimage assetと表示間隔です。
Schema位置: #/$defs/bubbleFrameAnimation
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
frames |
必須 | 文字列(literalId)(assetId)の配列 |
1項目以上 |
frameIntervalSeconds |
必須 | 数値 | 0より大きい |
Schemaで検証できる値の例:
frames: [EyesOpen, EyesClosed]
frameIntervalSeconds: 0.4
吹き出しportrait
基本画像と、任意のまばたき・口パクframe animationを指定します。
Schema位置: #/$defs/bubblePortrait
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
base |
必須 | 文字列(literalId)(assetId) |
— |
blink |
任意 | object(bubbleFrameAnimation) |
未知field不可 |
lipSync |
任意 | object(bubbleFrameAnimation) |
未知field不可 |
Schemaで検証できる値の例:
base: HeroFace
blink:
frames: [EyesOpen, EyesClosed]
frameIntervalSeconds: 0.4
lipSync:
frames: [MouthClosed, MouthOpen]
frameIntervalSeconds: 0.08
本文の段階表示
文字、単語、行、blockの単位と、layout、間隔、任意の効果音を指定します。
Schema位置: #/$defs/bubbleReveal
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
unit |
必須 | CHARACTER / WORD / LINE / BLOCK |
— |
delimiters |
任意 | 文字列 | 1文字以上 |
showDelimiters |
任意 | 真偽値 | — |
layout |
任意 | DYNAMIC / RESERVED |
— |
intervalSeconds |
任意 | 数値 | 0以上 |
sound |
任意 | 文字列(literalId)(assetId) |
— |
Schemaで検証できる値の例:
unit: CHARACTER
layout: RESERVED
intervalSeconds: 0.05
sound: Typewriter
吹き出し音声
音声、本文の段階表示、完了時に使うsound assetを個別に指定します。
Schema位置: #/$defs/bubbleAudio
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
voice |
任意 | 文字列(literalId)(assetId) |
— |
reveal |
任意 | 文字列(literalId)(assetId) |
— |
finish |
任意 | 文字列(literalId)(assetId) |
— |
Schemaで検証できる値の例:
voice: HeroVoice
reveal: Typewriter
finish: ContinueSound
吹き出しanimation
表示・非表示・表示中に適用するanimation名と時間、easing、方向などを指定します。
Schema位置: #/$defs/bubbleMotion
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
name |
必須 | fadeIn / fadeOut / floatIn / floatOut / zoomIn / zoomOut / riseUp / sink / shake / explode / animateBubbleShape |
— |
durationSeconds |
任意 | 数値 | 0以上 |
ease |
任意 | linear / easeIn / easeOut / easeInOut |
— |
direction |
任意 | 数値 または 文字列 | — |
count |
任意 | 整数 | 1以上 |
relativeScale |
任意 | 数値 | 0以上 |
speed |
任意 | 数値 | 0以上 |
visualStyle |
任意 | NORMAL / THINKING / DREAMING / YELLING / OFF_PANEL / WAVY / WHISPERING / ANNOUNCEMENT / NARRATION / NO_BUBBLE |
— |
Schemaで検証できる値の例:
name: floatOut
durationSeconds: 0.15
ease: easeOut
direction: down
runtime変数mapping
変数IDごとに文字列、数値、真偽値の初期値を保持します。objectや配列はcore変数値ではありません。
Schema位置: #/$defs/variables
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 任意 | 文字列 または 数値 または 真偽値(variableValue) |
— |
- 端末固有のcamera device IDやpreview controlの一時状態はこのmappingへ永続化せず、app shellのsession stateとして扱います。
Schemaで検証できる値の例:
message: start
score: 0
ready: true
読み込み画面設定
読み込み用背景と、一つ以上のcostumeを指定します。
Schema位置: #/$defs/loadingScreen
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
backdrop |
必須 | 文字列(literalId)(assetId) |
— |
costumes |
必須 | 文字列(literalId)(assetId)の配列 |
1項目以上 |
Schemaで検証できる値の例:
backdrop: Loading
costumes:
- Spinner1
ポーズ認識全体設定
共通音と、モデル初期化、sequence、selection、feedback、navigation、camera previewの任意設定をまとめます。
Schema位置: #/$defs/poseRecognition
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
idleSound |
任意 | 文字列(literalId)(assetId) |
— |
chargeSound |
任意 | 文字列(literalId)(assetId) |
— |
modelInitialization |
任意 | object(poseModelInitialization) |
未知field不可 |
sequence |
任意 | object(poseSequenceRecognition) |
未知field不可 |
selection |
任意 | object(poseSelectionRecognition) |
未知field不可 |
feedback |
任意 | object(poseFeedback) |
未知field不可 |
navigation |
任意 | object(poseNavigation) |
未知field不可 |
preview |
任意 | object(posePreview) |
未知field不可 |
Schemaで検証できる値の例:
idleSound: PoseIdle
chargeSound: PoseCharge
modelInitialization:
policy: latest-needed
parallel: true
sequence:
confidenceThreshold: 0.6
feedback:
mode: scratchMirror
navigation:
allowSkip: false
preview:
mirroring: mirrored
overlay:
visible: true
Poseモデル初期化
従来互換のlegacyと、不要になった初期化をcancelして最新要求だけを準備するlatest-neededを選びます。camera準備とモデル準備の並行化も明示します。
Schema位置: #/$defs/poseModelInitialization
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
policy |
任意 | legacy / latest-needed |
既定値 legacy |
parallel |
任意 | 真偽値 | 既定値 false |
- 省略時はpolicyがlegacy、parallelがfalseです。
- latest-neededでは重い初期化を実行中1件と最新待機1件までに制限します。
- 実行にはTurboWarp TM 1.10.0以降が必要です。4.0.0-rc.8はTurboWarp TM 1.12.0をexact pinします。
Schemaで検証できる値の例:
policy: latest-needed
parallel: true
sequence認識設定
連続ポーズのconfidence閾値、満点保持時間、idle時のcharge量を調整します。
Schema位置: #/$defs/poseSequenceRecognition
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
confidenceThreshold |
任意 | 数値 | 既定値 0.5、0以上、1以下 |
fullConfidenceHoldSeconds |
任意 | 数値 | 既定値 1、0より大きい |
idleChargePerSecond |
任意 | 数値 | 既定値 0、0以上 |
Schemaで検証できる値の例:
confidenceThreshold: 0.6
fullConfidenceHoldSeconds: 1.2
idleChargePerSecond: 0
selection認識設定
複数候補の蓄積速度、減衰、決定scoreを調整します。
Schema位置: #/$defs/poseSelectionRecognition
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
accumulationPerSecond |
任意 | 数値 | 既定値 1、0以上 |
decayPerSecond |
任意 | 数値 | 既定値 0.9、0以上、1以下 |
scoreThreshold |
任意 | 数値 | 既定値 0、0以上 |
Schemaで検証できる値の例:
accumulationPerSecond: 1
decayPerSecond: 0.9
scoreThreshold: 2
ポーズfeedback mode
Scratch mirror、Scratch binding、presenter UIのどこへ認識状態を反映するかを選びます。
Schema位置: #/$defs/poseFeedback
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
mode |
必須 | scratchMirror / scratchBinding / presenter |
— |
Schemaで検証できる値の例:
mode: presenter
ポーズ中のnavigation
プレイ中にポーズ待ちをskipできるかを明示します。
Schema位置: #/$defs/poseNavigation
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
allowSkip |
必須 | 真偽値 | — |
Schemaで検証できる値の例:
allowSkip: true
camera previewのstory設定
preview canvasの左右反転と任意の関節・ボーンoverlayをstory既定として指定し、必要な場合だけapp shell所有の操作UIを構成します。
Schema位置: #/$defs/posePreview
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
mirroring |
必須 | mirrored / unmirrored |
— |
overlay |
任意 | object(poseOverlay) |
1 field以上、未知field不可 |
controls |
任意 | object(posePreviewControls) |
1 field以上、未知field不可 |
mirroringの省略時はmirroredです。操作UIはcontrolsを省略すると生成されません。overlayを省略した既存台本では関節とボーンを表示しません。- この設定はpreview canvasの表示だけを変更し、認識frame、confidence、sequence/selection判定には影響しません。
Schemaで検証できる値の例:
mirroring: mirrored
overlay:
visible: true
jointStyles:
leftWrist:
color: '#ff00aa'
opacity: 0.8
radius: 6
boneStyle:
color: '#00e5ff'
opacity: 0.9
width: 3
minimumConfidence: 0.5
confidenceScaling:
jointOpacity: true
jointRadius: false
boneOpacity: true
boneWidth: false
controls:
mirroring:
position: top-center
opacity: 0.8
assets:
showMirrored: ShowMirroredButton
showUnmirrored: ShowUnmirroredButton
関節とボーンのoverlay
TurboWarp TM 1.12.0のSVG overlayについて、表示、関節別style、共通bone style、最低confidence、confidence連動を宣言します。
Schema位置: #/$defs/poseOverlay
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
visible |
任意 | 真偽値 | 既定値 true |
jointStyles |
任意 | mapping | 1 field以上 |
boneStyle |
任意 | object(poseBoneStyle) |
1 field以上、未知field不可 |
minimumConfidence |
任意 | 数値 | 既定値 0.5、0以上、1以下 |
confidenceScaling |
任意 | object(poseOverlayConfidenceScaling) |
1 field以上、未知field不可 |
- overlayを記述した場合の省略値はvisibleがtrue、minimumConfidenceが0.5です。overlay自体を省略した既存台本は非表示のままです。
- previewを隠すとoverlayも隠れます。overlayだけを隠しても認識は停止しません。認識停止では描画を消去し、camera停止ではSVG要素も破棄します。
- 実行にはTurboWarp TM 1.12.0以降が必要です。専用feature flagはなく、問題時はoverlay設定を台本から削除すると既存台本と同じ非表示へ戻ります。
Schemaで検証できる値の例:
visible: true
jointStyles:
leftWrist:
color: '#ff00aa'
opacity: 0.8
radius: 6
boneStyle:
color: '#00e5ff'
opacity: 0.9
width: 3
minimumConfidence: 0.5
confidenceScaling:
jointOpacity: true
jointRadius: false
boneOpacity: true
boneWidth: false
関節別style
一つのPoseNet関節を描く円のCSS color、opacity、radiusから一つ以上を上書きします。
Schema位置: #/$defs/poseJointStyle
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
color |
任意 | 文字列 | 既定値 #00e5ff、pattern \S |
opacity |
任意 | 数値 | 既定値 1、0以上、1以下 |
radius |
任意 | 数値 | 既定値 4、0以上 |
- 省略値はcolorが#00e5ff、opacityが1、radiusが4です。opacityは0〜1、radiusは0以上の有限値です。
Schemaで検証できる値の例:
color: '#ff00aa'
opacity: 0.8
radius: 6
ボーン共通style
12本の標準PoseNet bone connectionで共有するCSS color、opacity、線幅から一つ以上を上書きします。
Schema位置: #/$defs/poseBoneStyle
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
color |
任意 | 文字列 | 既定値 #00e5ff、pattern \S |
opacity |
任意 | 数値 | 既定値 0.9、0以上、1以下 |
width |
任意 | 数値 | 既定値 3、0以上 |
- 省略値はcolorが#00e5ff、opacityが0.9、widthが3です。opacityは0〜1、widthは0以上の有限値です。
Schemaで検証できる値の例:
color: '#00e5ff'
opacity: 0.9
width: 3
confidenceによる見た目の拡縮
関節のopacityとradius、boneのopacityとwidthをconfidenceに応じて個別に0から設定値まで変化させます。
Schema位置: #/$defs/poseOverlayConfidenceScaling
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
jointOpacity |
任意 | 真偽値 | 既定値 false |
jointRadius |
任意 | 真偽値 | 既定値 false |
boneOpacity |
任意 | 真偽値 | 既定値 false |
boneWidth |
任意 | 真偽値 | 既定値 false |
- 四項目の省略値はすべてfalseです。関節はその関節のconfidence、boneは両端のうち低いconfidenceを倍率に使います。
Schemaで検証できる値の例:
jointOpacity: true
jointRadius: false
boneOpacity: true
boneWidth: false
PoseNet関節名
jointStylesのkeyに指定できる17個のPoseNet関節名です。
Schema位置: #/$defs/poseKeypointName
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | nose / leftEye / rightEye / leftEar / rightEar / leftShoulder / rightShoulder / leftElbow / rightElbow / leftWrist / rightWrist / leftHip / rightHip / leftKnee / rightKnee / leftAnkle / rightAnkle |
— |
- nose、leftEye、rightEye、leftEar、rightEar、leftShoulder、rightShoulder、leftElbow、rightElbow、leftWrist、rightWrist、leftHip、rightHip、leftKnee、rightKnee、leftAnkle、rightAnkleを指定できます。
Schemaで検証できる値の例:
leftWrist
scene固有のpreview表示
長形式sceneで左右反転だけを上書きします。上書きはそのsceneだけに適用され、次のsceneへ持ち越しません。
Schema位置: #/$defs/scenePosePreview
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
mirroring |
必須 | mirrored / unmirrored |
— |
Schemaで検証できる値の例:
mirroring: unmirrored
preview controlの配置
preview表示矩形を基準に、上下左右と四隅を含む8個のanchorから選びます。
Schema位置: #/$defs/posePreviewControlPosition
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | top-center / bottom-center / left-center / right-center / top-right / bottom-right / top-left / bottom-left |
— |
Schemaで検証できる値の例:
bottom-center
左右反転button
押した後のtarget stateを示す2画像、配置、任意のopacityで反転buttonを構成します。
Schema位置: #/$defs/posePreviewMirroringControl
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
position |
必須 | top-center / bottom-center / left-center / right-center / top-right / bottom-right / top-left / bottom-left(posePreviewControlPosition) |
— |
opacity |
任意 | 数値 | 既定値 1、0以上、1以下 |
assets |
必須 | object | 未知field不可 |
- 現在がunmirroredなら
showMirrored、mirroredならshowUnmirroredを表示し、操作成功後だけiconを切り替えます。
Schemaで検証できる値の例:
position: top-center
opacity: 0.8
assets:
showMirrored: ShowMirroredButton
showUnmirrored: ShowUnmirroredButton
camera選択menu button
camera選択menuを開くbutton画像、配置、任意のopacityを指定します。
Schema位置: #/$defs/posePreviewCameraMenuControl
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
position |
必須 | top-center / bottom-center / left-center / right-center / top-right / bottom-right / top-left / bottom-left(posePreviewControlPosition) |
— |
opacity |
任意 | 数値 | 既定値 1、0以上、1以下 |
buttonAsset |
必須 | 文字列(literalId)(assetId) |
— |
- menuは開くたびに利用可能なcameraを列挙します。物理device IDは台本やruntime変数へ保存しません。
Schemaで検証できる値の例:
position: bottom-center
opacity: 0.8
buttonAsset: CameraMenuButton
camera preview操作UI
左右反転buttonとcamera選択menuのうち、一つ以上を任意に有効化します。
Schema位置: #/$defs/posePreviewControls
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
mirroring |
任意 | object(posePreviewMirroringControl) |
未知field不可 |
cameraMenu |
任意 | object(posePreviewCameraMenuControl) |
未知field不可 |
- 同じanchorでは左右反転button、camera menuの順に一つのgroupとして並べます。暗黙の標準iconはありません。
Schemaで検証できる値の例:
cameraMenu:
position: bottom-right
buttonAsset: CameraMenuButton
操作profile
一つ以上のkeymapを名前付きprofileとして登録します。キー衝突は意味検証でも確認します。
Schema位置: #/$defs/controls
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
keymaps |
必須 | mapping | 1 field以上 |
Schemaで検証できる値の例:
keymaps:
presenter:
Space: navigation.nextAction
分岐規則列
条件規則を上から評価し、一つだけ含めたelse規則をfallbackにします。
Schema位置: #/$defs/branchRules
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 各項目 | 1件以上 | object(conditionRule) または object(elseRule) |
— |
Schemaで検証できる値の例:
- if: score >= 10
goto: success
- else: retry
共通型と制約
複数のfieldやactionから参照される値の型です。ID、path、key codeのpatternは移行時に特に確認してください。
ID
actor、style、variable、branchなどの構文識別子です。Unicode文字またはunderscoreで始まり、以降に文字、数字、underscore、hyphenを使えます。
Schema位置: #/$defs/id
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | pattern ^[\p{L}_][\p{L}\p{N}_-]*$ |
Schemaで検証できる値の例:
Hero_1
asset・sceneのliteral ID
Scratch上の名前をそのまま保持できる空でない文字列です。空白や記号を含められ、trimやUnicode正規化を行いません。
Schema位置: #/$defs/literalId
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | 1文字以上 |
Schemaで検証できる値の例:
救助 Scene 1
吹き出しstyle名
内部の空白や日本語を含められる人向けの名前です。先頭・末尾の空白、改行、tab、制御文字は使用できません。
Schema位置: #/$defs/bubbleStyleName
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | 1文字以上、pattern ^(?!\s)(?!.*\s$)[^\p{Cc}\p{Cs}\p{Zl}\p{Zp}]+$ |
Schemaで検証できる値の例:
日本語 ナレーション
安全な相対file path
絶対path、Windows drive path、URL scheme、backslash、NULを許可しないproject内相対pathです。
Schema位置: #/$defs/filePath
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | 1文字以上、pattern ^(?!/)(?![A-Za-z]:[\\/])(?![A-Za-z][A-Za-z0-9+.-]*:)[^\\\u0000]+$ |
Schemaで検証できる値の例:
hero.svg
読み込みpolicy
story開始前に読むeagerと、利用時に読むlazyから選びます。
Schema位置: #/$defs/loadingPolicy
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | eager / lazy |
既定値 eager |
Schemaで検証できる値の例:
lazy
保持policy
assetをsceneの範囲で保持するか、story全体で保持するかを指定します。
Schema位置: #/$defs/retentionPolicy
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | scene / story |
— |
Schemaで検証できる値の例:
story
配布policy
成果物へ埋め込むembeddedと、明示的にURLから取得するremoteから選びます。
Schema位置: #/$defs/deliveryPolicy
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | embedded / remote |
既定値 embedded |
Schemaで検証できる値の例:
remote
remote asset source
HTTPS URLを指定します。内容を固定する場合はSHA-256、content type、byte sizeを三つとも指定します。三項目の一部だけは指定できません。
Schema位置: #/$defs/remoteAssetSource
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
url |
必須 | 文字列 | pattern ^https://[^\s]+$ |
integrity |
任意 | 文字列 | pattern ^sha256-[0-9a-f]{64}$ |
contentType |
任意 | 文字列 | pattern ^[a-z0-9][a-z0-9!#$&^_.+-]*/[a-z0-9][a-z0-9!#$&^_.+-]*$ |
size |
任意 | 整数 | 1以上 |
Schemaで検証できる値の例:
url: https://example.com/audio.ogg
integrity: sha256-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
contentType: audio/ogg
size: 1024
remote pose model source
通常のTurboWarp TM directoryはHTTPS URLだけで参照できます。検証付きremote archiveにする場合はintegrity、content type、byte sizeを三つとも指定します。
Schema位置: #/$defs/remotePoseModelSource
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
url |
必須 | 文字列 | pattern ^https://[^\s]+$ |
integrity |
任意 | 文字列 | pattern ^sha256-[0-9a-f]{64}$ |
contentType |
任意 | 文字列 | pattern ^[a-z0-9][a-z0-9!#$&^_.+-]*/[a-z0-9][a-z0-9!#$&^_.+-]*$ |
size |
任意 | 整数 | 1以上 |
Schemaで検証できる値の例:
url: https://example.com/models/rescue/
key code
文字そのものではなく、Schemaが列挙するKeyboardEvent code形式を使用します。
Schema位置: #/$defs/keyCode
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | 文字列 | pattern ^(?:Space\|Enter\|Escape\|Tab\|Backspace\|Delete\|Home\|End\|PageUp\|PageDown\|Arrow(?:Up\|Down\|Left\|Right)\|Digit[0-9]\|Key[A-Z]\|Numpad[0-9]\|F(?:[1-9]\|1[0-2]))$ |
Schemaで検証できる値の例:
Space
navigation command
通常の次action/次scene、実行履歴上の前後、リハーサル用のpose/action/scene skipへ操作を割り当てます。
Schema位置: #/$defs/navigationCommand
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 値 | 必須 | navigation.nextAction / navigation.nextScene / rehearsal.skipPose / rehearsal.skipAction / rehearsal.skipScene / history.previousAction / history.previousScene / history.nextScene |
— |
Schemaで検証できる値の例:
rehearsal.skipScene
変数・custom引数の値
core schemaで保持できるscalarは文字列、数値、真偽値です。
Schema位置: #/$defs/variableValue
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列 | — |
| 形式2 | いずれか一つ | 数値 | — |
| 形式3 | いずれか一つ | 真偽値 | — |
Schemaで検証できる値の例:
42
sceneとaction列
sceneはaction配列の短縮形、またはposeModelとaction列を持つlong formで記述します。scene間参照は意味検証の対象です。
action配列
各項目にはglobal actionまたはactor actionを一つだけ記述します。
Schema位置: #/$defs/actions
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 各項目 | 任意件数 | object(stageAction) または object(bgmAction) または object(soundAction) または object(waitAction) または object(debuggerAction) または object(broadcastMessageAndWaitAction) または object(transitionAction) または object(gotoAction) または object(branchAction) または object(keyInputAction) または object(touchInputAction) または object(poseInputAction) または mapping(showAction) または mapping(setTransparencyAction) または mapping(moveToAction) または mapping(sayAction) または mapping(thinkAction) または mapping(setSkinAction) または mapping(hideAction) または mapping(setLayerAction) または mapping(loopAction) または mapping(setTextAction) または mapping(poseAction) または mapping(customActorAction)(action) |
— |
Schemaで検証できる値の例:
- stage: Beach
- wait: 1
long form scene
scene固有のposeModelまたはpreview左右反転を指定する場合に、設定とactionsをobjectへまとめます。
Schema位置: #/$defs/longScene
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
poseModel |
任意 | 文字列(literalId)(assetId) |
— |
posePreview |
任意 | object(scenePosePreview) |
未知field不可 |
actions |
必須 | object(stageAction) または object(bgmAction) または object(soundAction) または object(waitAction) または object(debuggerAction) または object(broadcastMessageAndWaitAction) または object(transitionAction) または object(gotoAction) または object(branchAction) または object(keyInputAction) または object(touchInputAction) または object(poseInputAction) または mapping(showAction) または mapping(setTransparencyAction) または mapping(moveToAction) または mapping(sayAction) または mapping(thinkAction) または mapping(setSkinAction) または mapping(hideAction) または mapping(setLayerAction) または mapping(loopAction) または mapping(setTextAction) または mapping(poseAction) または mapping(customActorAction)(action)の配列(actions) |
— |
posePreviewはそのsceneだけの非stickyな上書きです。次のsceneに指定がなければstory既定へ戻ります。
Schemaで検証できる値の例:
poseModel: StoryPose
posePreview:
mirroring: unmirrored
actions:
- wait: 1
sceneで選べる形式
短いaction配列またはlong formのいずれかを使用します。
Schema位置: #/$defs/scene
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | object(stageAction) または object(bgmAction) または object(soundAction) または object(waitAction) または object(debuggerAction) または object(broadcastMessageAndWaitAction) または object(transitionAction) または object(gotoAction) または object(branchAction) または object(keyInputAction) または object(touchInputAction) または object(poseInputAction) または mapping(showAction) または mapping(setTransparencyAction) または mapping(moveToAction) または mapping(sayAction) または mapping(thinkAction) または mapping(setSkinAction) または mapping(hideAction) または mapping(setLayerAction) または mapping(loopAction) または mapping(setTextAction) または mapping(poseAction) または mapping(customActorAction)(action)の配列(actions) |
— |
| 形式2 | いずれか一つ | object(longScene) |
未知field不可 |
Schemaで検証できる値の例:
- wait: 1
scene mapping
一つ以上のscene IDを定義します。通常実行は記述順で最初のsceneから始まります。
Schema位置: #/$defs/scenes
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 任意のID key | 1件以上 | object(stageAction) または object(bgmAction) または object(soundAction) または object(waitAction) または object(debuggerAction) または object(broadcastMessageAndWaitAction) または object(transitionAction) または object(gotoAction) または object(branchAction) または object(keyInputAction) または object(touchInputAction) または object(poseInputAction) または mapping(showAction) または mapping(setTransparencyAction) または mapping(moveToAction) または mapping(sayAction) または mapping(thinkAction) または mapping(setSkinAction) または mapping(hideAction) または mapping(setLayerAction) または mapping(loopAction) または mapping(setTextAction) または mapping(poseAction) または mapping(customActorAction)(action)の配列(actions) または object(longScene)(scene) |
— |
- YAML 1.2一般ではmappingのkey順にapplication上の意味はありません(YAML 1.2.2 Mapping Key Order)。DSL 4.0は固有規則として、source YAMLのserialization treeに現れるpair順をscene順として使用します。JSON Schemaはmappingのshapeを検証しますが、この順序セマンティクスは検証しません。
- scene keyをsortするformatter、serializer、editorを使用しないでください。並べ替え後もSchema検証には成功しますが、台本の実行順が変わります。
- 現行frontendでは数字だけのscene IDをJavaScript objectへ変換すると数値順に列挙される場合があります。これは意図したDSL仕様ではない既知の実装制約であり、修正までは数字以外を含むscene IDを使用します。
Schemaで検証できる値の例:
opening:
- wait: 1
Global action
actor名を付けずにstage、音、時間、scene遷移、入力待ちを制御するcore actionです。
stage
背景assetへ切り替えます。短縮値またはstableId付きobjectを使用できます。
Schema位置: #/$defs/stageAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stage |
必須 | 文字列(literalId)(assetId) または object(stageArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(literalId)(assetId) |
— |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
stage: Beach
bgm
BGMとしてsound assetを開始します。
Schema位置: #/$defs/bgmAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
bgm |
必須 | 文字列(literalId)(assetId) または object(soundArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(literalId)(assetId) |
— |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
bgm: Theme
sound
効果音としてsound assetを再生します。
Schema位置: #/$defs/soundAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
sound |
必須 | 文字列(literalId)(assetId) または object(soundArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(literalId)(assetId) |
— |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
sound:
stableId: opening-chime
sound: Chime
wait
指定秒数だけaction列の進行を待ちます。0秒も受理します。
Schema位置: #/$defs/waitAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
wait |
必須 | 数値 または object(waitArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 数値 | 0以上 |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
wait: 1.5
debugger
development debug実行でaction開始前に停止する境界です。productionや埋め込み作品では副作用のないno-opです。
Schema位置: #/$defs/debuggerAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
debugger |
必須 | Schemaで定義された値 | — |
Schemaで検証できる値の例:
debugger:
broadcastMessageAndWait
Scratch/TurboWarpのmessageを送り、そのmessageで開始されたreceiver threadがすべて終了するまで待ちます。
Schema位置: #/$defs/broadcastMessageAndWaitAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
broadcastMessageAndWait |
必須 | 文字列 または object(broadcastMessageAndWaitArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列 | 1文字以上 |
| 形式2 | いずれか一つ | object | 未知field不可 |
- receiverが終了しない場合は台本も次のactionへ進みません。有限時間で完了する処理へ使用します。
Schemaで検証できる値の例:
broadcastMessageAndWait:
stableId: play-mini-game
message: playMiniGame
transition
名前付きeffectを指定秒数で実行します。利用できるeffectはruntime capabilityとも照合します。
Schema位置: #/$defs/transitionAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
transition |
必須 | object(transitionArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
effect |
必須 | 文字列(id) |
pattern ^[\p{L}_][\p{L}\p{N}_-]*$ |
seconds |
必須 | 数値 | 0以上 |
Schemaで検証できる値の例:
transition:
effect: fadeOut
seconds: 0.5
goto
指定sceneへ無条件に遷移します。
Schema位置: #/$defs/gotoAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
goto |
必須 | 文字列(literalId)(sceneId) または object(sceneReferenceArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(literalId)(sceneId) |
— |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
goto: ending
branch
名前付き分岐規則を評価し、選ばれたsceneへ遷移します。
Schema位置: #/$defs/branchAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
branch |
必須 | 文字列(id) または object(branchReferenceArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(id) |
pattern ^[\p{L}_][\p{L}\p{N}_-]*$ |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
branch: result
keyInputToChangeScene
キー入力と遷移先sceneのmappingを待ちます。navigation keymapとの衝突に注意します。
Schema位置: #/$defs/keyInputAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
keyInputToChangeScene |
必須 | mapping(keyRoutes) または object(keyInputArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | mapping(keyRoutes) |
1 field以上 |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
keyInputToChangeScene:
Space: nextScene
Escape: cancelScene
touchInputToChangeScene
touchされたactor IDに応じてsceneを選びます。
Schema位置: #/$defs/touchInputAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
touchInputToChangeScene |
必須 | mapping(touchRoutes) または object(touchInputArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | mapping(touchRoutes) |
1 field以上 |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
touchInputToChangeScene:
Hero: heroRoute
Guide: guideRoute
poseInputToChangeScene
認識されたpose IDに応じてsceneを選びます。
Schema位置: #/$defs/poseInputAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
poseInputToChangeScene |
必須 | mapping(poseRoutes) または object(poseInputArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | mapping(poseRoutes) |
1 field以上 |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
poseInputToChangeScene:
wave: greeting
jump: celebration
Actor action
<actor ID>.<action名>をkeyにするactionです。core action名とcustom action名は同じpattern空間を使います。
Actor.show
costume、座標、scaleを指定してactorを表示します。
Schema位置: #/$defs/showAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.show$ |
1件以上 | object(showArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
skin |
必須 | 文字列(literalId)(assetId) |
— |
x |
必須 | 数値 | — |
y |
必須 | 数値 | — |
scale |
必須 | 数値 | 0より大きい |
Schemaで検証できる値の例:
Hero.show:
skin: HeroHappy
x: 0
y: -60
scale: 30
Actor.setTransparency
Scratch/TurboWarpの幽霊効果と同じ0〜100の値でactorの透明度を即時設定するか、指定秒数で線形に変化させます。
Schema位置: #/$defs/setTransparencyAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.setTransparency$ |
1件以上 | 数値 または object または object(setTransparencyArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 数値 | 0以上、100以下 |
| 形式2 | いずれか一つ | object | 未知field不可 |
| 形式3 | いずれか一つ | object | 未知field不可 |
0は完全不透明、100は完全透明です。値を反転または換算しません。background: falseまたは省略時は完了まで待ち、trueでは開始直後に次actionへ進みます。
Schemaで検証できる値の例:
Hero.setTransparency:
from: 0
to: 50
seconds: 1
background: true
Actor.moveTo
指定秒数でactorを座標へ移動します。任意のeasingでlinear、ease-in、ease-out、ease-in-outを選べます。
Schema位置: #/$defs/moveToAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.moveTo$ |
1件以上 | object(moveToArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
x |
必須 | 数値 | — |
y |
必須 | 数値 | — |
seconds |
必須 | 数値 | 0以上 |
easing |
任意 | linear / easeIn / easeOut / easeInOut |
— |
Schemaで検証できる値の例:
Hero.moveTo:
x: 40
y: -57
seconds: 1.5
easing: easeInOut
Actor.say
actorのsay吹き出しへテキストを表示し、名前付きclosePolicyまたはinlineの秒数/advance入力で完了します。複数の吹き出しstyleを順に合成できます。
Schema位置: #/$defs/sayAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.say$ |
1件以上 | object(speechArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
text |
必須 | 文字列 | — |
closePolicy |
任意 | 文字列(bubbleStyleName)(bubbleClosePolicyName) |
— |
seconds |
任意 | 数値 | 0以上 |
waitFor |
任意 | 固定値 advance |
— |
styles |
任意 | 文字列(bubbleStyleName)の配列 |
1項目以上 |
characterIntervalSeconds |
任意 | 数値 | 0より大きい |
startSound |
任意 | 文字列(literalId)(assetId) |
— |
characterSound |
任意 | 文字列(literalId)(assetId) |
— |
noSoundCharacters |
任意 | 文字列 | 1文字以上 |
restCharacters |
任意 | 文字列 | 1文字以上 |
restCharacterIntervalSeconds |
任意 | 数値 | 0より大きい |
closePolicyとaction内のseconds/waitForは併用できません。closePolicyはトップレベルのbubbleClosePoliciesに存在する名前を参照します。
Schemaで検証できる値の例:
Hero.say:
text: こんにちは!
closePolicy: advance-or-timeout
styles:
- Typing
- Hero style
startSound: GreetingVoice
Actor.think
Actor.sayと同じspeech lifecycleを使い、think吹き出しへテキストを表示します。
Schema位置: #/$defs/thinkAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.think$ |
1件以上 | object(speechArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
text |
必須 | 文字列 | — |
closePolicy |
任意 | 文字列(bubbleStyleName)(bubbleClosePolicyName) |
— |
seconds |
任意 | 数値 | 0以上 |
waitFor |
任意 | 固定値 advance |
— |
styles |
任意 | 文字列(bubbleStyleName)の配列 |
1項目以上 |
characterIntervalSeconds |
任意 | 数値 | 0より大きい |
startSound |
任意 | 文字列(literalId)(assetId) |
— |
characterSound |
任意 | 文字列(literalId)(assetId) |
— |
noSoundCharacters |
任意 | 文字列 | 1文字以上 |
restCharacters |
任意 | 文字列 | 1文字以上 |
restCharacterIntervalSeconds |
任意 | 数値 | 0より大きい |
Schemaで検証できる値の例:
Hero.think:
text: どうしよう……
waitFor: advance
characterIntervalSeconds: 0.1
Actor.setSkin
actorのcostumeを切り替えます。短縮値、またはscaleとstableIdを持つobjectを使用できます。
Schema位置: #/$defs/setSkinAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.setSkin$ |
1件以上 | 文字列(literalId)(assetId) または object(setSkinArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | 文字列(literalId)(assetId) |
— |
| 形式2 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
Hero.setSkin:
skin: HeroHappy
scale: 100
Actor.hide
actorのvisible stateをfalseにします。透明度とは別で、次のActor.showで再表示します。
Schema位置: #/$defs/hideAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.hide$ |
1件以上 | object(hideArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
Schemaで検証できる値の例:
Hero.hide: {}
Actor.setLayer
front/backで絶対位置へ、正負の数値で現在位置から前後のlayerへ移動します。
Schema位置: #/$defs/setLayerAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.setLayer$ |
1件以上 | front / back または 数値 または object(setLayerArgs) |
— |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
| 形式1 | いずれか一つ | front / back |
— |
| 形式2 | いずれか一つ | 数値 | — |
| 形式3 | いずれか一つ | object | 未知field不可 |
Schemaで検証できる値の例:
Hero.setLayer: front
Actor.loop
costumeと表示秒数のstep列をbackgroundで繰り返します。少なくとも一つのstepは正の秒数にします。
Schema位置: #/$defs/loopAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.loop$ |
1件以上 | object(loopArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
steps |
必須 | object(loopStep)の配列 |
1項目以上 |
Schemaで検証できる値の例:
Hero.loop:
steps:
- skin: HeroWalk1
seconds: 0.2
- skin: HeroWalk2
seconds: 0.2
Actor.setText
SVG Text actorの本文と名前付きstyleを更新します。旧Text Assetの更新命令ではありません。
Schema位置: #/$defs/setTextAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.setText$ |
1件以上 | object(setTextArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
text |
必須 | 文字列 | — |
style |
必須 | 文字列(id)(styleId) |
— |
Schemaで検証できる値の例:
Caption.setText:
text: おしまい
style: title
Actor.pose
一つ以上のpose stepを順に認識し、任意のcostumeとsoundでfeedbackします。
Schema位置: #/$defs/poseAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.pose$ |
1件以上 | object(poseArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
steps |
必須 | object(poseStep)の配列 |
1項目以上 |
Schemaで検証できる値の例:
Hero.pose:
steps:
- pose: wave
skin: HeroWave
sound: Success
Actor.<customAction>
core action名以外の名前をcapability registryへ委譲します。引数値は文字列、数値、真偽値です。
Schema位置: #/$defs/customActorAction
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
key pattern ^[\p{L}_][\p{L}\p{N}_-]*\.(?!(?:show\|hide\|setTransparency\|moveTo\|say\|think\|setSkin\|setLayer\|loop\|setText\|pose)$)[\p{L}_][\p{L}\p{N}_-]*$ |
1件以上 | object(customActorActionArgs) |
未知field不可 |
引数の詳細:
| field/形式 | 必須性 | 型 | 既定値・制約 |
|---|---|---|---|
stableId |
任意 | 文字列(id)(stableId) |
— |
arguments |
任意 | mapping(customArguments) |
— |
- Schemaを通ることは、そのcustom actionを実行環境が提供することを意味しません。
- 公開前にcapability、引数契約、rollback時の扱いを確認してください。
Schemaで検証できる値の例:
Hero.wave:
stableId: hero-wave
arguments:
speed: 1
reverse: false
台本作成での使い方
- projectに4.0用の
.k4.ymlを作る - 利用するpreview/build/公開アプリがDSL 4.0を有効にしていることを確認する
- 本リファレンスでfield、型、必須性、core actionの引数を確認する
- Schema検証、参照検証、previewを通してから4.0の成果物をbuildする
作例とprojectの構成は紙芝居DSL 4.0 台本作成ガイドを参照してください。