AI
AI workflow
Dialogue Proto repository
- linear sample
- BTree sample
merge ↑ to kwik
audio services
voice overs - [ ] ElevenLabs - [ ] Play.ht - [ ] Amazon Polly - [ ] Google Wavenet
SFX
- Freesound.org
- Unity Asset Store
- Humble Bundle SFX packs
- Audo.ai
Music
- YouTube Audio Library
- Pixabay Music
- AIVA
- Soundraw
- Mubert
fountain script
conversion to model
local model = { name = "cabinScene", components = { layers = { "bg_cabin.png", "elara_neutral.png", "elara_scared.png", "elara_determined.png", "elara_happy.png", "lumin_seed_normal.png", "lumin_seed_glowing.png", "lumin_seed_dim.png", "lumin_seed_pulsing.png", "door_open.png", "door_closed.png", "door_broken.png", "chest_locked.png", "chest_unlocked.png", "chest_open.png", "chest_empty.png" }, audios = { long = {}, short = { "door_rattle", "door_creak", "key_turn", "chest_open", "door_slam" } }, groups = {}, timers = {}, variables = { "hasKey", "hasMagicKey", "chestLooted" }, joints = {}, page = {} }, -- Actions only commands = { "setHasKey", }, }conversion to dialogue
local sceneDialogue = { { type = "narration", text = "You stand before an old cabin in the woods." }, { type = "show", what = "cabin_door" }, { type = "object_state", object = "cabin_door", state = "closed" }, { type = "narration", text = "The door is firmly closed. You try the handle..." }, { type = "sfx", sound = "door_rattle" }, -- Conditional: Door opens only if player has a key (string reference) { type = "object_state_conditional", object = "cabin_door", state = "open", condition = "hasKey" }, { type = "sfx", sound = "door_creak" }, { type = "narration", text = "The door creaks open, revealing a dark interior." }, { type = "show", what = "elara" }, { type = "emotion", character = "elara", state = "determined" }, { type = "narration", text = "On a dusty table, you spot the Lumin Seed." }, { type = "show", what = "lumin_seed" }, { type = "object_state", object = "lumin_seed", state = "glowing" }, { type = "narration", text = "In the corner, an old chest catches your eye." }, { type = "show", what = "chest" }, { type = "object_state", object = "chest", state = "locked" }, { type = "narration", text = "The chest is locked. You search for a key..." }, -- Set flag when key is found (string reference) { type = "custom", action = "setHasKey" }, { type = "sfx", sound = "key_turn" }, { type = "object_state", object = "chest", state = "unlocked" }, { type = "sfx", sound = "chest_open" }, -- Conditional: chest state depends on whether it was already looted (string reference) { type = "object_state_conditional", object = "chest", state = "open", condition = "chestNotLooted" }, { type = "narration", text = "The chest is empty! Someone got here first." }, { type = "emotion", character = "elara", state = "scared" }, { type = "object_state", object = "chest", state = "empty" }, { type = "sfx", sound = "door_slam" }, { type = "object_state", object = "cabin_door", state = "closed" }, { type = "narration", text = "The door slams shut behind you! You're trapped!" }, { type = "choice", options = { "Try to force the door open", "Search for another way out", "Investigate the strange markings" }} }
```
Spec1 - assets generation
images/audio/videos are created by the model, the prompts for generative AI to create files are also generated from the fountain script
- Photoshop
- generative AI
- firefly
- elventhlab
- nano banana/sara etc
Spec2 - composition
inial states
App/{BOOk}/components/index.lua
- object states are implemented as animations or can be as spritehseet
- sfx is to play audio
App/{BOOk}/components/{PAGE}/layers/*.lua
App/{BOOk}/commands/{PAGE}/*.lua
sceneDialog triggers animations or sprites:play() or play audio etc
Spec3 - more interactions/animaions/replacements or physics?
should we add a type: button to dialogue?
{ type = "object_buttone", object = "chest", action = "onTap" },it means index.lua ’s layer have a button class
{chest={class={"button, "animation"}}}each entry of dialogue can be matched to one of kwik components
- object(image) + class(animation, button, spritehseet, physics body)
so a class with props is a pattern?
Spec4 narration flows as a key frame
each narration brings new states to objects or sfx(audio) etc
object states can be changed by an action which calls objett's class function ex animation:play(), spriets:play()
Spec5 model.md
create a model document that extracts all the necessary technical elements from the Fountain script for implementation purposes.Key Sections:
Backgrounds - All scene locations needed
Characters - Elara with all her emotional states and required sprite images
Props/Objects - Detailed specifications for:
- Lumin Seed (with glowing state)
- Cabin Door (locked, open, sealed states)
- Iron Key & Brass Key
- Old Chest (locked, unlocked, open states)
- Boarded Window
- Arcane Markings
Sound Effects - All SFX with file names and triggers
Music/Ambience - Background audio tracks
Game Flags/Variables - Boolean flags for game logic
Dialogue/Voice-Over Lines - All of Elara’s lines with file names and triggers
Scene Flow - Step-by-step event sequence
Player Choices - Three ending options with next scene references
Implementation Notes - Technical suggestions for effects and transitions
This document bridges the creative screenplay (Fountain) with the technical implementation (Lua), providing everything a developer or artist needs to build the scene while keeping the narrative separate from the technical specifications.
Spec5 behavior tree
https://github.com/0xabad/behavior_tree/
->
| [Show cabin exterior]
| [Elara approaches]
| ->
| | [Try cabin door]
| | ?
| | | ->
| | | | (has iron key)
| | | | [Use iron key on door]
| | | | [Play door creak SFX]
| | | | [Open door]
| | | ->
| | | | !(has iron key)
| | | | [Play door rattle SFX]
| | | | ?
| | | | | ->
| | | | | | (key visible near doorstep)
| | | | | | [Highlight iron key]
| | | | | | [Find iron key]
| | | | | | [Set has iron key]
| | | | | ->
| | | | | | !(key visible near doorstep)
| | | | | | [Search near door]
| | | | | | [Reveal iron key]
| ->
| | (is door open)
| | [Transition to cabin interior]
| | [Play ambient cabin music]
| | [Show lumin seed glowing]
| | [Elara: "The Lumin Seed... I found it."]
| ->
| | [Show chest in corner]
| | [Try chest]
| | ?
| | | ->
| | | | (has brass key)
| | | | [Use brass key on chest]
| | | | [Play lock click SFX]
| | | | [Play chest creak SFX]
| | | | [Open chest]
| | | ->
| | | | !(has brass key)
| | | | [Elara: "There has to be a key somewhere around here..."]
| | | | ?
| | | | | ->
| | | | | | (searched floorboard)
| | | | | | [Highlight loose floorboard]
| | | | | ->
| | | | | | !(searched floorboard)
| | | | | | [Search room]
| | | | | | [Find loose floorboard]
| | | | | | [Reveal brass key]
| | | | | | [Pick up brass key]
| | | | | | [Set has brass key]
| ->
| | (is chest open)
| | [Reveal empty chest]
| | [Elara change to shocked state]
| | [Elara: "No... it can't be!"]
| | [Elara: "Someone got here first."]
| ->
| | [Play door slam SFX]
| | [Door slams shut]
| | [Seal door]
| | [Set is trapped]
| | [Screen shake effect]
| | [Play tension music]
| | [Elara change to panicking state]
| | [Elara: "What?! No!"]
| ->
| | [Elara tries door]
| | [Door won't open]
| | [Elara surveys room]
| | ?
| | | ->
| | | | (player choice force door)
| | | | [Focus on cabin door]
| | | | [Present choice: "Try to force the door open"]
| | | | [Go to force door scene]
| | | ->
| | | | (player choice window)
| | | | [Focus on boarded window]
| | | | [Present choice: "Search for another way out"]
| | | | [Go to window escape scene]
| | | ->
| | | | (player choice markings)
| | | | [Focus on arcane markings]
| | | | [Present choice: "Investigate the strange markings"]
| | | | [Go to arcane markings scene]
Creating assets
Adobe
Pr
Podcast
Audio
Misc
Podcast talk
audacity 47% audition 33.3
https://twitter.com/MomochiYorozu/status/1660251437644017664?t=QD6pQBMi5VPy_-Ik0JYhiw&s=19
Text to audio
https://huggingface.co/spaces/haoheliu/audioldm-text-to-audio-generation
Free Sound Effects
Adobe Audition
- https://helpx.adobe.com/audition/using/text-to-speeech.html
- https://www.adobe.com/products/audition/offers/AdobeAuditionDLCSFX.html
How to organize
https://blog.prosoundeffects.com/how-to-find-the-right-sound-effects
https://blog.prosoundeffects.com/how-to-use-sound-effects
- prosoundeffects.com
- SoundQ software ⭐️
Whisper
https://community.openai.com/t/whisper-api-a-timecodes-b-how-good-is-open-source-vs-api/163882/5
https://github.com/m-bain/whisperX
Video
- https://generativeai.pub/gen-1-an-amazing-new-generative-ai-video-technology-bb776f5fe8cc
- https://thebridge.jp/2023/06/runway-triples-valuation-in-150-days
Stable Diffusion
Photoshopの画像生成AIがすごい ついに商用利用もスタートへ
人物を切り抜いて、背景だけを生成させた場合は、AdobeFireflyの方が圧倒的に自然
https://k-tai.watch.impress.co.jp/docs/column/stapa/1497045.html
- 「DiffusionBee」 Macで手軽にStable Diffusion
- DreamStudio SD開発元であるStability AIが提供するAI画像生成サービス
Automatic1111
https://ascii.jp/elem/000/004/142/4142488/
Linuxの場合、16GBのVRAMを搭載した互換性のあるAMD製グラフィックボード
https://huggingface.co/blog/lora
Low-Rank Adaptation of Large Language Models
Eagle
https://github.com/bbc-mc/sdweb-eagle-pnginfo/blob/master/README.ja.md
ControlNet
https://github.com/Mikubill/sd-webui-controlnet
Cloud Providers
https://softwarekeep.com/help-center/best-cloud-provider-for-stable-diffusion
- Google Colab Pro
- RunPod
- Vast.ai
- RunDiffusion
- AWS
ONE PAYMENT FOR 24 HOURS
Azure HPC VMでStable Diffusionする
- 200円/時間ぐらい
- Mac Studioで描かせると、7分55秒 Azure VMだと 16秒
Machine Specs
画像生成AIに2度目の革命を起こした「ControlNet」
- 512x768ドットをアップスケールして2倍の1024x1536ドットで出力する場合、
- 1枚当たりの生成時間は、以前「画像生成AI 速いマシンは世界が違う」で紹介した
- DAIVのNVIDIA GeForce RTX4090(VRAM 24GB)搭載機で1分22秒。VRAMの使用率は約65%
https://zenn.dev/karaage0703/articles/bf86fe4946417b
- CPU Intel Core i 7
- メモリ 32GB
- GPU NVIDIA RTX3060(12GB)
- WindowsでもNVIDIA Dockerを入れたら動きました
Stable Diffusionなどの画像生成AI、84,800円(税込)のMac miniがコスパ最強
内蔵GPUで爆速動作するよ
アップルが公式移植している
当然ながらGeForce RTX 4090なんかと比べれば劇遅だけど、コスパと消費電力では圧倒している。
mac mini16GBでautomatic1111動かして512x512の画像で1枚40秒
現状3060のほうが断然速いよ RTX3060で4秒なので約10倍
https://note.com/nice_ixia735/n/nc623d9583357
- M2 Macbook Pro 14inc
- だいたい1分弱で画像が生成
AMDのRadeon系GPU搭載のゲーミングミニPCでAIイラストが生成できる
- Radeon系GPU 約10万円 ゲーミングミニPCの「HX80G」
- 約24秒
10枚のイラスト生成にかかった時間は148秒