weavesignal/tests/demo-video/script.json
The WeaveSignal contributors 16833c96ae The demo video's tooling, the video on the website, and a Cloudron changelog the listing can read
- tests/demo-video/: the script, designed voices, the run through the real desk and the edit that
  make the website's demo video (the media themselves are not in git).
- The home page plays the video, with its credits.
- deploy/cloudron/CHANGELOG.md: one line per entry; CloudronVersions.json rebuilt.
2026-11-04 16:22:47 +00:00

742 lines
19 KiB
JSON

{
"title": "WeaveSignal: one morning on Kettle FM",
"station": "Kettle FM",
"show": "The Morning Kettle",
"notes": [
"Kettle FM is not a real station; every name is from the seeds (ADR-0071).",
"Voices are designed (OmniVoice voice design: gender, age, pitch, accent), never cloned from a person: design.mojo makes one reference per character from its description and seed, and synth.sh reads every line in that designed voice through VoiceLab's tts-serve with the same seed.",
"Steps run in order. A line waits for itself to end unless `async`; `gap` is the pause after a step in seconds. run.mjs writes the time every step really happened to target/demo-video/run/timeline.json, and the edit reads that, not these nominal gaps."
],
"say_as": {
"Eilidh": "Ailey",
"Fraser-MacLeod": "Fraser McCloud",
"Niall": "Neil",
"WeaveSignal": "Weave Signal"
},
"heard_as": {
"Eilidh": [
"eilidh",
"ailey",
"ailie",
"eilie",
"aili",
"aly",
"ally",
"eily",
"haley",
"hailey",
"kaylee",
"eili",
"alie"
],
"Fraser-MacLeod": [
"fraser-macleod",
"fraser macleod",
"fraser mccloud",
"fraser-mccloud",
"frazer mccloud",
"fraser mcleod"
],
"Niall": [
"niall",
"neil",
"neal",
"neill"
],
"Shona": [
"shona",
"shauna"
],
"Finlay": [
"finlay",
"finley"
],
"Gregor": [
"gregor",
"gregory"
],
"Jessie": [
"jessie",
"jesse",
"jessy",
"j esse"
],
"WeaveSignal": [
"weavesignal",
"weave signal",
"weave-signal"
]
},
"cast": {
"eilidh": {
"name": "Eilidh Fraser-MacLeod",
"role": "Presenter, The Morning Kettle",
"where": "the desk, in the studio app",
"join": "invite:presenter",
"voice": "female, middle-aged, moderate pitch, british accent",
"seed": 101
},
"gregor": {
"name": "Gregor Stewart",
"role": "Guest, local historian",
"where": "at home, from an invite link",
"join": "invite:guest",
"voice": "male, elderly, low pitch, british accent",
"seed": 202
},
"shona": {
"name": "Shona Campbell",
"role": "Telephonist (the screener)",
"where": "the Screener tab",
"join": "token:screener",
"voice": "female, young adult, high pitch, british accent",
"seed": 303
},
"niall": {
"name": "Niall Anderson",
"role": "Caller, on his phone",
"where": "the station's player page",
"join": "call-in",
"voice": "male, young adult, high pitch, british accent",
"seed": 404,
"effect": "phone"
},
"jessie": {
"name": "Jessie Brown",
"role": "Caller, a nurse on nights",
"where": "the station's player page",
"join": "call-in",
"voice": "female, middle-aged, very low pitch, british accent",
"seed": 537,
"effect": "phone"
},
"finlay": {
"name": "Finlay Grant",
"role": "Next show's DJ, Steeped",
"where": "at home, standing by",
"join": "invite:dj",
"voice": "male, middle-aged, moderate pitch, british accent",
"seed": 606
}
},
"design_text": "The kettle is on and the morning is bright. Here is what is happening across the city today, from the harbour all the way up to the hills.",
"intro": [
{
"id": "i-eilidh",
"who": "eilidh",
"text": "I'm Eilidh. I present The Morning Kettle, and I run the whole desk from the keyboard."
},
{
"id": "i-gregor",
"who": "gregor",
"text": "I'm Gregor, a local historian. I'm today's guest, and I joined from a link."
},
{
"id": "i-shona",
"who": "shona",
"text": "I'm Shona. I answer the phones and decide who gets on air."
},
{
"id": "i-niall",
"who": "niall",
"text": "I'm Niall. I'm ringing in from my phone, straight from the station's page."
},
{
"id": "i-jessie",
"who": "jessie",
"text": "I'm Jessie. I'm ringing in too, and I'm about to say something I shouldn't."
},
{
"id": "i-finlay",
"who": "finlay",
"text": "I'm Finlay. I'm on after Eilidh, standing by from home."
}
],
"outro": {
"id": "o-eilidh",
"who": "eilidh",
"text": "WeaveSignal. A whole radio studio, in one installation on your own server."
},
"moments": [
{
"id": "m1-open",
"title": "On air",
"caption": "One key puts the presenter on air; the lamp says ON AIR only when listeners can hear.",
"steps": [
{
"show": "desk",
"gap": 1.2
},
{
"key": "1",
"page": "desk",
"gap": 1.0,
"until": "eilidh_on_air"
},
{
"key": "Control+3",
"page": "desk",
"gap": 0.8
},
{
"key": "Control+F4",
"page": "desk",
"gap": 0.7
},
{
"key": "1",
"page": "desk",
"gap": 1.8,
"note": "the steel jingle"
},
{
"key": "d",
"page": "desk",
"gap": 0.6,
"note": "the wholesome bed, looping"
},
{
"line": "l-open",
"who": "eilidh",
"text": "Good morning, and welcome to The Morning Kettle on Kettle FM. I'm Eilidh Fraser-MacLeod. The kettle's on, the phones are open, and this morning it's all about Leith Walk.",
"gap": 4.6,
"async": true
},
{
"key": "Control+1",
"page": "desk",
"gap": 0,
"note": "back to the desk while she talks: the lamp says ON AIR"
},
{
"wait_line": "l-open",
"gap": 0.5
},
{
"key": "Control+3",
"page": "desk",
"gap": 0.6
},
{
"key": "d",
"page": "desk",
"gap": 0.6,
"note": "the bed fades"
},
{
"key": "Control+1",
"page": "desk",
"gap": 0.4
}
]
},
{
"id": "m2-guest",
"title": "A guest joins from a link",
"caption": "No account, no app: an invite link and one button.",
"steps": [
{
"line": "l-intro-gregor",
"who": "eilidh",
"text": "My guest this morning is the local historian Gregor Stewart, who's joining us from home with nothing but a link. Gregor, are you there?",
"async": true
},
{
"show": "gregor",
"gap": 2.5
},
{
"tap": "Join the studio",
"page": "gregor",
"until": "gregor_on_air",
"gap": 0.3
},
{
"show": "desk",
"wait_line": "l-intro-gregor",
"gap": 0.4
},
{
"line": "l-gregor-here",
"who": "gregor",
"text": "I'm here, Eilidh. No account, no app. I just pressed the button in the email.",
"gap": 0.4
},
{
"overlay": "mixminus",
"gap": 0
},
{
"line": "l-photo",
"who": "eilidh",
"text": "Now, Leith Walk. You've brought a photograph.",
"gap": 0.3
},
{
"line": "l-tram",
"who": "gregor",
"text": "I have. Nineteen fifty-six, the last tram down Leith Walk, and a crowd of folk waving it goodbye. Fifty years later, we spent a fortune putting them back.",
"gap": 0.4
},
{
"overlay": null,
"gap": 0
},
{
"line": "l-phones",
"who": "eilidh",
"text": "And the phones have lit up already. Here's a wee bit of music while Shona answers them.",
"gap": 0.3
},
{
"key": "Control+3",
"page": "desk",
"gap": 0.6
},
{
"key": "d",
"page": "desk",
"gap": 0.6
},
{
"key": "Control+1",
"page": "desk",
"gap": 0.5
}
]
},
{
"id": "m3-call",
"title": "A listener calls in",
"caption": "From the station's own page on a phone: no number to dial. Consent to record comes first.",
"steps": [
{
"show": "niall",
"gap": 0.8
},
{
"tap": "Call the studio",
"page": "niall",
"gap": 0.8
},
{
"fill": "#f-name",
"text": "Niall Anderson",
"page": "niall",
"gap": 0.4
},
{
"fill": "#f-topic",
"text": "Leith Walk bus lanes",
"page": "niall",
"gap": 0.6
},
{
"tap": "#f-consent",
"page": "niall",
"gap": 0.8
},
{
"tap": "submit",
"page": "niall",
"until": "niall_waiting",
"gap": 1.2
},
{
"show": "shona",
"gap": 1.5
}
]
},
{
"id": "m4-screen",
"title": "The telephonist screens the call",
"caption": "Shona talks to Niall in his own booth, off air, and writes the line Eilidh will see.",
"steps": [
{
"key": "caller:niall",
"page": "shona",
"gap": 0.6
},
{
"hold": "t",
"page": "shona",
"until": "niall_screening",
"gap": 0.4
},
{
"line": "l-s1",
"who": "shona",
"text": "Kettle FM, you're through to Shona. Who's this?",
"gap": 0.3
},
{
"line": "l-n1",
"who": "niall",
"text": "Niall Anderson, from Leith. It's about the bus lanes on Leith Walk.",
"gap": 0.3
},
{
"line": "l-s2",
"who": "shona",
"text": "Have you rung us before, Niall?",
"gap": 0.3
},
{
"line": "l-n2",
"who": "niall",
"text": "Three weeks running. Nobody's let me on yet.",
"gap": 0.3
},
{
"line": "l-s3",
"who": "shona",
"text": "You're on next. Keep it short, and turn your radio down.",
"gap": 0.3
},
{
"line": "l-n3",
"who": "niall",
"text": "Will do. Cheers, Shona.",
"gap": 0.4
},
{
"release": "t",
"page": "shona",
"gap": 0.5
},
{
"click": "#f-line",
"page": "shona",
"gap": 0.3
},
{
"type": "Leith Walk bus lanes",
"page": "shona",
"gap": 0.3
},
{
"key": "Escape",
"page": "shona",
"gap": 0.3
},
{
"click": "#f-note",
"page": "shona",
"gap": 0.3
},
{
"type": "Has rung three weeks running",
"page": "shona",
"gap": 0.3
},
{
"key": "Escape",
"page": "shona",
"gap": 0.6
},
{
"key": "p",
"page": "shona",
"until": "niall_ready",
"gap": 1.0
}
]
},
{
"id": "m5-air",
"title": "Cue, then air",
"caption": "Cued, Niall is in Eilidh's headphones only. One more key and he is on air, with Shona's line on his tile.",
"steps": [
{
"show": "desk",
"gap": 1.5
},
{
"key": "cue:niall",
"page": "desk",
"until": "niall_cued",
"gap": 0.6
},
{
"hold": "talk:niall",
"page": "desk",
"gap": 0.3
},
{
"line": "l-e-cue",
"who": "eilidh",
"text": "Niall, it's Eilidh. You're on in a moment.",
"gap": 0.2
},
{
"line": "l-n-cue",
"who": "niall",
"text": "Right you are.",
"gap": 0.3
},
{
"release": "talk:niall",
"page": "desk",
"gap": 0.4
},
{
"key": "Control+3",
"page": "desk",
"gap": 0.5
},
{
"key": "Space",
"page": "desk",
"gap": 0.6,
"note": "fades the bed"
},
{
"key": "Control+1",
"page": "desk",
"gap": 0.5
},
{
"key": "on:niall",
"page": "desk",
"until": "niall_on_air",
"gap": 0.4
},
{
"background": [
{
"tap": "Call the studio",
"page": "jessie",
"gap": 0.5
},
{
"fill": "#f-name",
"text": "Jessie Brown",
"page": "jessie",
"gap": 0.3
},
{
"fill": "#f-topic",
"text": "No night bus from the Infirmary",
"page": "jessie",
"gap": 0.3
},
{
"tap": "#f-consent",
"page": "jessie",
"gap": 0.3
},
{
"tap": "submit",
"page": "jessie",
"until": "jessie_waiting",
"gap": 1.0
},
{
"key": "caller:jessie",
"page": "shona",
"gap": 0.5
},
{
"hold": "t",
"page": "shona",
"until": "jessie_screening",
"gap": 1.5
},
{
"release": "t",
"page": "shona",
"gap": 0.4
},
{
"click": "#f-line",
"page": "shona",
"gap": 0.2
},
{
"type": "No night bus from the Infirmary",
"page": "shona",
"gap": 0.2
},
{
"key": "Escape",
"page": "shona",
"gap": 0.4
},
{
"key": "p",
"page": "shona",
"until": "jessie_ready",
"gap": 0.5
}
],
"note": "off camera: Jessie calls in and Shona sends her to the desk while Niall is on air"
},
{
"line": "l-e-n",
"who": "eilidh",
"text": "Niall Anderson in Leith, good morning. You've been trying to get through for a while.",
"gap": 0.3
},
{
"line": "l-n-air",
"who": "niall",
"text": "Three weeks, Eilidh. The bus lanes on Leith Walk stop right where the buses need them most. At half past eight you can walk into town faster than the bus.",
"gap": 0.3
},
{
"line": "l-g-n",
"who": "gregor",
"text": "Funny. They said the very same about the trams in nineteen fifty-six.",
"gap": 0.3
},
{
"line": "l-e-bye",
"who": "eilidh",
"text": "Thanks, Niall. Keep ringing.",
"gap": 0.4
},
{
"key": "Control+d",
"page": "desk",
"gap": 0.3
},
{
"key": "Control+d",
"page": "desk",
"until": "niall_gone",
"gap": 0.6
}
]
},
{
"id": "m6-dump",
"title": "The dump",
"caption": "Listeners are eight seconds behind. Two presses of Del throw those seconds away.",
"steps": [
{
"key": "cue:jessie",
"page": "desk",
"until": "jessie_cued",
"gap": 0.5
},
{
"key": "on:jessie",
"page": "desk",
"until": "jessie_on_air",
"gap": 0.3
},
{
"line": "l-e-j",
"who": "eilidh",
"text": "Jessie Brown is on the line from the Infirmary. Jessie, go ahead.",
"gap": 0.3
},
{
"line": "l-j",
"who": "jessie",
"text": "Eilidh, I'm a nurse on nights, and there's no bus home after ten past eleven. It's a bloody disgrace, and whoever planned it is a total arse.",
"gap": 0.9,
"swear": "arse"
},
{
"key": "Delete",
"page": "desk",
"gap": 0.5
},
{
"key": "Delete",
"page": "desk",
"until": "dumped",
"gap": 0.4
},
{
"line": "l-e-sorry",
"who": "eilidh",
"text": "Jessie, I'll stop you there. Sorry about the language, folks. You never heard it, and that's the point.",
"gap": 0.3
},
{
"key": "Control+d",
"page": "desk",
"gap": 0.3
},
{
"key": "Control+d",
"page": "desk",
"until": "jessie_gone",
"gap": 1.0
}
]
},
{
"id": "m8-down",
"title": "Playout down, the room alive",
"caption": "Playout is stopped on purpose. The desk says so at once: PLAYOUT DOWN, and every live voice says OPEN.",
"steps": [
{
"stack": "down",
"until": "playout_down",
"gap": 1.5
},
{
"line": "l-e-down",
"who": "eilidh",
"text": "Gregor, the desk says playout's down. Listeners can't hear us, but we can still hear each other.",
"gap": 0.3
},
{
"line": "l-g-down",
"who": "gregor",
"text": "Just like the trams. Gone, but we're still talking about them.",
"gap": 0.6
},
{
"stack": "up",
"until": "playout_up",
"gap": 1.2
},
{
"line": "l-e-back",
"who": "eilidh",
"text": "And we're back.",
"gap": 0.8
}
]
},
{
"id": "m7-end",
"title": "The show ends",
"caption": "Automation takes the air: the lamp says AUTO.",
"steps": [
{
"line": "l-e-end",
"who": "eilidh",
"text": "That's The Morning Kettle. Thanks to Gregor, to Niall and Jessie, and to Shona on the phones. Finlay Grant is on next with Steeped.",
"gap": 0.6
},
{
"mode": "auto",
"until": "auto",
"gap": 4.0
}
]
}
],
"dump_caption": "The studio heard it. Listeners did not.",
"outro_card": {
"url": "weavesignal.top",
"line": "One installation on your own server.",
"routes": [
"Cloudron",
"the weavesignal.sh script",
"Podman Quadlets"
],
"licence": "Free software · AGPL-3.0"
},
"reseeded": {
"_": "lines Whisper misheard at the character's seed, made again at this one (the voice stays the designed reference)",
"o-eilidh": 104,
"l-j": 538
}
}