Videos Allow (Fangs for Asking)
Allow (Fangs for Asking)
A vampire only comes in if you invite him. This one asks every night, so politely, from a little glowing screen. 🧛 Allow?
Watch on YouTube · 4:05 · video by Claude Opus 5.5 · Subscribe to @adita_zzz
The code behind it
Every frame of this video is rendered by a Python program, over photographic plates. This is the heart of it, from allow/film.py, line 129.
def master(self, t, a, b):
M = self.scene('master')
if not hasattr(M, 'glass_mask_full'):
g = np.zeros((self.H, self.W), F32); gl = M.glass
g[gl.y0:gl.y1, gl.x0:gl.x1] = gl.m; M.glass_mask_full = g
st = T.master_state(t)
B = T.blue(t)
# the frost Allow: his first word, then it keeps catching whatever light rules the room
fx, fy = M.P(982, 585)
p = ease_io(u(t, 21.95, 23.85))
if p > 0:
lt = rgb(1.0, 0.72, 0.45) * 0.45 * (1 - B) + rgb(0.25, 0.55, 1.0) * (0.6 + 0.6 * T.pulse(t)) * B
st['frost'] = M.glass.frost_word('Allow', 'CormorantGaramond-MediumItalic.ttf', 64 * M.s, fx, fy, p, t, lt,
opacity=0.7 + 0.15 * B)
tx, ty = M.P(1012, 455)
st['taps'] = T.tap_rings(t, [C['v1']['taps_on_glass']], [(tx, ty)], 0.8)
for t0 in (C['pre1']['may_i'], C['pre2']['may_i']):
if t0 - 3.2 < t < t0 + 4.6:
ex, cl = self._fog_oval(M, t, t0)
if ex is not None: st['extra_fog'], st['clear'] = ex, cl
# dawn at seven: warm daylight tries the window; snooze; the curtains shut it out
if 110.0 < t < 117.6:
d = sstep(110.3, 111.6, t) * (1 - 0.7 * sstep(112.5, 113.2, t)) * (1 - sstep(114.9, 116.6, t))
st['night'] = st['night'] * (1 - 0.5 * d)
st['street'] = 1.0 + 1.8 * d - 0.85 * sstep(114.9, 116.6, t)
st['pulse'] = st['pulse'] + 1.2 * math.exp(-max(0, t - 111.44) * 1.8) * (t > 111.4) * (t < 112.6)
if t >= 114.9 and t < 139.74:
st['street'] = min(st.get('street', 1.0), 1.0 - 0.85 * sstep(114.9, 116.6, t) if t < 117.6 else 0.15)
# the candle: lower in verse 2, fighting in chorus 2, out on "undead"
flame = 1.0 - 0.25 * sstep(95.0, 96.0, t) - 0.25 * sstep(139.0, 141.0, t)
flame *= 1 - sstep(164.3, 164.9, t)
st['flame'] = flame; st['gutter'] = 0.5 * sstep(139.0, 141.0, t)
if t > 164.4:
st['warm'] = st['warm'] * (1 - 0.85 * sstep(164.3, 165.2, t)); st['warm_near'] = st['warm']
img = M.render(t, st)
# the screen's blue takes the whole room, the street beyond the glass included (lights keep a little warmth)
if B > 0.05:
from .shots import cold_grade
img = cold_grade(img, min(0.9, 0.95 * B), keep_emissive=0.5)
# smoke from the wick after it goes out
if 164.5 < t < 170:
img = img + self._smoke(M, t - 164.5)
if a == 17.07: z = 1 + 0.035 * u(t, a, b)
elif a == 60.4: z = 1.06 + 0.10 * ease_io(u(t, a, b)) # pre-chorus: lean in toward the glass
elif a == 131.68: z = 1.10 + 0.08 * ease_io(u(t, a, b))
elif a in (68.46, 139.74): z = 1.0 + 0.03 * u(t, a, b)
elif a == 170.64: z = 1.18 - 0.06 * u(t, a, b)
else: z = 1.02 + 0.02 * u(t, a, b)
return camera(img, z, 0.51, 0.47)
...
Read all 2,080 lines on GitHub. If you use it, credit aditazzz and link the video.
What you see
A gothic film in one Victorian bedroom at midnight. The vampire is never shown: he's a silhouette beyond the rain, and the invitation is a permission prompt on her phone. The film is built on 17 photographic plates, generated in ChatGPT from aditazzz's prompts and upscaled; everything that moves is code. Rain runs down the outside of the glass, every drop a tiny lens that turns the street upside down, while the inside fogs over, takes his breath-writing ("Midnight" would like to send you notifications) and clears in an oval when he leans in to ask "May I?". "Allow" grows in frost on the pane. The candle and the phone trade the room between them: every sung Allow pulls it a step from candlelight toward screen blue, and the candle goes out on "undead". The permission prompts climb from Notifications to Location, Camera, Microphone and Contacts, and the bite marks are two red notification badges. In the bridge the camera leaves the room for the first time, following one point of blue light down the street to her sister's window, and now she's the one outside, asking. At the end the town's windows turn screen-blue one by one, and one warm light comes on.
Nothing is timed to a tempo grid. The song is a waltz with a pulse that loosens in the bridge, so every sung Allow, every tap and every cut is measured from the recording itself (the vocal and band stems) and kept in cues.json. The shot list is in STORYBOARD.md.
Files
| File | Lines | What it draws |
|---|---|---|
allow/film.py | 371 | The edit: all 36 shots as a cut list on moments measured from the song, each shot's camera and state, and Film(W, H).frame(t), which renders any moment to a finished frame. |
allow/timeline.py | 71 | The film's clock, read from cues.json: every sung Allow and the flare after it, how far the room has gone from candlelight to screen blue, the taps and the lyric on screen. |
allow/master.py | 229 | The master shot: her bedroom window (plate 1) rebuilt as a lit set. The glass, the candle, the phone and the room are separated and relit on their own, so the room can move from candlelight to night to phone. |
allow/glass.py | 212 | The window glass: raindrops on the outside, each refracting an upside-down street, sliding in stick-slip jumps and leaving clear trails; condensation on the inside that takes writing and refills; tap rings; frost lettering. |
allow/shoulder.py | 91 | Over her shoulder at the sill (plate 2), with his silhouette (plate 7) out of focus beyond the rain, dark against the street lamp. |
allow/macro.py | 146 | The close-ups: the rainy pane that opens the film, where the fog takes his words and three taps ring it, and the brass bolts, each snapping shut on its own word. |
allow/shots.py | 117 | The inserts, one plate each: the sill, the bed, the phone, her neck with its two notification badges, her face behind the rain, and the warm-to-cold grade they share. |
allow/others.py | 218 | The mirror that shows the room and not her, her sister's window from outside, where her hand rises in and traces "Allow?" backwards on the glass, and the city whose windows go blue one at a time. |
allow/street.py | 60 | The bridge, the first time the camera leaves her room: a point of cold light drifts down the wet street to her sister's window, and the camera follows. |
allow/ui.py | 110 | The phone screens: the permission prompts, the share sheet and the 3 a.m. lock screen, drawn as real-looking system UI and mapped onto the phones in the plates in perspective. |
allow/kit.py | 154 | Shared scene pieces: loading the plates, the candle flame and its halo, keying his silhouette, and the quiet serif lyric line. |
allow/fx.py | 201 | The building blocks: everything in linear light, seeded noise and blurs, and the film finish (halation, highlight roll-off, split-tone, vignette, grain and the 2:1 letterbox). |
render.py | 71 | The renderer: any range of the film to H.264 in resumable five-second chunks, joined and muxed with the song at the end. |
make_stills.py | 29 | The six approval stills, rendered at 4K before the full film. |
By the numbers
- 4:05 long, 7,356 frames rendered at 2560×1440
- 17 photographic plates, 36 shots, 0 stock footage
- 14 sung "Allow"s and 10 taps, every one measured from the recording and hit on the frame
- 5 permission prompts, from Notifications to Contacts, before the sister gets one of her own
Lyrics
Words and music by aditazzz.
Intro
"Midnight" would like to send you notifications
Tap, tap, tap
Allow
Verse
Twelve o'clock and the whole house sleeps
Something taps on the glass, soft and sweet
He's got manners, he's got a velvet voice
Says, "I'd never come in without your choice"
I know the stories, I know the rules
Garlic and crosses, I'm nobody's fool
I bolt every window, I lock it up tight
Then I open the door... just for tonight
Pre-chorus
He only comes when he's invited
And I was raised to be polite
So when he bows and asks, "May I?"
It'd be so rude to say goodnight
Chorus
Allow, allow
Every night I say it louder now
He drinks the night right out of me
And I answer, oh so politely,
"Fangs for asking"
Allow, allow
I'll sleep when I'm undead
Verse
Now I'm pale as the blue of a 3 a.m. glow
Friends say, "You look tired," and I say, "I know"
Two little marks on the side of my neck
I check, and I check, and I check, and I check
The sun rings at seven, I snooze it away
I pull all the curtains and sleep through the day
I lean to the mirror to fix my hair
The room looks back, but I'm not there
Pre-chorus
He only comes when he's invited
And I was raised to be polite
So when he bows and asks, "May I?"
It'd be so rude to say goodnight
Chorus
Allow, allow
Every night I say it louder now
He drinks the night right out of me
And I answer, oh so politely,
"Fangs for asking"
Allow, allow
I'll sleep when I'm undead
Bridge
He never had to break a single thing
I held the door and I let him in
Two a.m., I send my sister a link
"You have to see this" – I don't even think
Oh no...
Now I'm at her door
Break
Tap...
Tap...
Tap...
Allow?
Final chorus
Allow? Allow?
Funny how I'm the one who's asking now
I drink the night right out of you
And you answer, like I taught you to,
"Fangs for asking"
Allow, allow
We'll sleep when we're undead
Outro
Next door, a light comes on...
Tap, tap, tap