File size: 6,800 Bytes
888ebed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
"""Hand-authored showcase scripts for distinct instant reruns."""

from __future__ import annotations

from .schema import CastMember, Delivery, Genre, Line, MusicPlan, Scene, Script, VoiceID


def phone_booth_script() -> Script:
    script = Script(
        title="The Case of A Phone Booth That Rings Under",
        logline="A diver answers a ringing phone booth on the ocean floor.",
        genre=Genre.WEIRD,
        cast=[
            CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Warm, precise."),
            CastMember("diver", "Mara Vale", VoiceID.INGENUE, "A salvage diver low on air."),
            CastMember("operator", "The Operator", VoiceID.VILLAIN, "A voice from a dry exchange."),
        ],
        scenes=[
            Scene(
                title="Below The Pier",
                sfx=["deep water pressure", "distant bell buoy", "soft radio static"],
                lines=[
                    Line("announcer", "Tonight, the tide brings us a telephone call from below.", Delivery.BOOMING),
                    Line("diver", "Control, I have eyes on the booth. It is standing upright in the silt.", Delivery.URGENT),
                    Line("operator", "Number, please.", Delivery.DEADPAN),
                    Line("diver", "No. No, that line is not connected to anything.", Delivery.WHISPER),
                ],
            ),
            Scene(
                title="The Dry Voice",
                sfx=["rotary dial underwater", "air tank alarm"],
                lines=[
                    Line("operator", "You placed the call when you opened the door, Miss Vale.", Delivery.SLOW),
                    Line("diver", "I never told you my name.", Delivery.AGITATED),
                    Line("announcer", "Listeners near the coast are advised not to answer public telephones after midnight.", Delivery.DEADPAN),
                ],
            ),
        ],
        music=MusicPlan(
            genre=Genre.WEIRD,
            opening_sting="submerged vibraphone and low brass",
            bed="slow sonar-like organ pulse",
            closing_sting="descending unresolved chime",
        ),
        estimated_seconds=72,
    )
    script.validate()
    return script


def lighthouse_script() -> Script:
    script = Script(
        title="The Case of Two Rival Lighthouse Keepers One Light",
        logline="Two keepers argue over a lamp that has begun warning ships from the future.",
        genre=Genre.NOIR,
        cast=[
            CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Station narrator."),
            CastMember("keeper_roe", "Elias Roe", VoiceID.DETECTIVE, "Old keeper, salt-bitten."),
            CastMember("keeper_bell", "Jonah Bell", VoiceID.ELDER, "Rival keeper with a ruined laugh."),
        ],
        scenes=[
            Scene(
                title="The Lantern Room",
                sfx=["gale wind", "lantern glass rattle", "wooden stair creak"],
                lines=[
                    Line("announcer", "On Black Gull Rock, two men kept one light and too many grudges.", Delivery.BOOMING),
                    Line("keeper_roe", "You trimmed the wick too high again, Bell.", Delivery.DEADPAN),
                    Line("keeper_bell", "That was not me. The lamp turned itself toward the reef.", Delivery.AGITATED),
                    Line("keeper_roe", "There is no ship out there.", Delivery.SLOW),
                    Line("keeper_bell", "Not yet.", Delivery.WHISPER),
                ],
            ),
            Scene(
                title="The Ship That Hasn't Sunk",
                sfx=["fog horn", "distant hull groan", "thunder crack"],
                lines=[
                    Line("keeper_roe", "The logbook says a wreck at 2:13. It is only 1:40.", Delivery.URGENT),
                    Line("keeper_bell", "Then for once in your life, help me be early.", Delivery.BOOMING),
                    Line("announcer", "By dawn, the sea had one less ghost and the keepers one less reason to hate.", Delivery.SLOW),
                ],
            ),
        ],
        music=MusicPlan(
            genre=Genre.NOIR,
            opening_sting="hard brass hit over storm drums",
            bed="tense noir strings under wind",
            closing_sting="muted trumpet over foghorn",
        ),
        estimated_seconds=80,
    )
    script.validate()
    return script


def wrong_bride_script() -> Script:
    script = Script(
        title="The Case of A Wedding Where Every Guest Recognizes",
        logline="At a grand wedding, every guest knows the bride, except the groom.",
        genre=Genre.COMEDY,
        cast=[
            CastMember("announcer", "The Announcer", VoiceID.ANNOUNCER, "Cheerful radio host."),
            CastMember("groom", "Arthur", VoiceID.COMIC, "Panicked groom."),
            CastMember("bride", "The Bride", VoiceID.INGENUE, "Confident stranger."),
            CastMember("aunt", "Aunt Pearl", VoiceID.ELDER, "Family authority."),
        ],
        scenes=[
            Scene(
                title="The Processional",
                sfx=["wedding organ flourish", "crowd murmur", "camera flash"],
                lines=[
                    Line("announcer", "We join St. Bartholomew's at the exact moment Arthur notices the bride is wrong.", Delivery.BOOMING),
                    Line("groom", "That is not Clara.", Delivery.WHISPER),
                    Line("aunt", "Arthur, do not be rude. That girl taught you to ride a bicycle.", Delivery.DEADPAN),
                    Line("groom", "I met her twelve seconds ago.", Delivery.URGENT),
                    Line("bride", "Thirteen, darling. I cherish every moment.", Delivery.NEUTRAL),
                ],
            ),
            Scene(
                title="Something Borrowed",
                sfx=["church bell", "suppressed laughter", "paper rustle"],
                lines=[
                    Line("groom", "Reverend, the vows have my handwriting.", Delivery.AGITATED),
                    Line("bride", "You always were romantic in a crisis.", Delivery.SLOW),
                    Line("aunt", "If the cake recognizes her, I am satisfied.", Delivery.DEADPAN),
                    Line("announcer", "And listeners, the cake did. That was the troubling part.", Delivery.BOOMING),
                ],
            ),
        ],
        music=MusicPlan(
            genre=Genre.COMEDY,
            opening_sting="bright wedding organ sting with brushed snare",
            bed="light pizzicato comedy bed",
            closing_sting="comic organ button",
        ),
        estimated_seconds=78,
    )
    script.validate()
    return script


SHOWCASE_SCRIPT_FACTORIES = {
    "phone_booth": phone_booth_script,
    "lighthouse": lighthouse_script,
    "wrong_bride": wrong_bride_script,
}