"""AFTERLIGHT, fifth cut: Warm Dome & Golden Record. Cut to the song; the archive leads in its open spaces.""" ROOT = '/home/claude/afterlight' FPS = 24 C2 = f'{ROOT}/archive/clips2/' def clip(sheet_key): import json return f'{ROOT}/archive/clips/{json.load(open(f"{ROOT}/archive/sheet_index.json"))[sheet_key]}.mp4' # sources for picture volumes: name -> (path, in, dur) SRC = { 'rca': (C2 + '8095f755-7150-5d96-bde8-83d7e001fb57.mp4', 11.0, 4.0), 'zigs': (C2 + '../clips/10fe67d6-3449-5fb7-97d8-709a0d297de0.mp4', 0.0, 4.0), 'sunset': (clip('sun22'), 0.0, 3.0), 'wax': (C2 + 'b3ef2f32-ea89-5744-8940-c804848c95e0.mp4', 9.8, 4.0), 'fire': (C2 + '49073308-69cc-5104-b475-c2c72d6f8ca9.mp4', 10.5, 4.0), 'gamma': (clip('moo0'), 20.5, 4.0), 'face': (clip('han17'), 0.0, 2.4), 'stone': (f'{ROOT}/film3/small-sun-3.mp4', 95.0, 4.2), 'valley': (C2 + 'a95bb4f0-0823-589c-b7e7-fac6eb482777.mp4', 22.0, 4.0), 'moon': (clip('moo10'), 0.0, 4.0), } def C(yaw=0, pitch=0, dist=1050, fov=50, pz=0, cx=0, cy=0, roll=0): return dict(yaw=yaw, pitch=pitch, dist=dist, fov=fov, pz=pz, cx=cx, cy=cy, roll=roll) # (volume, start, end, cam0, cam1, opts): every shot condenses out of static and leaves as embers that become stars SHOTS = [ ('rca', 1.0, 7.4, C(0.0, 0.02, 1250), C(0.10, 0, 980), dict(tau=10, rate=0.5, exp=0.62)), ('zigs', 6.2, 12.6, C(-0.08, 0, 1150), C(0.06, -0.02, 920), dict(tau=8, rate=0.5, heat=0.35, exp=0.9, gam=1.8)), ('wax', 11.4, 17.6, C(0.12, 0, 1000), C(-0.04, 0, 800), dict(tau=8, rate=0.5, heat=0.8)), ('fire', 16.4, 23.4, C(-0.1, 0, 1150), C(0.12, -0.03, 840), dict(tau=20, rate=0.55, heat=1.2)), ('sunset', 22.2, 28.4, C(0, 0, 1300), C(-0.25, -0.04, 900, pz=6), dict(tau=36, rate=0.5, heat=1.0)), ('face', 27.2, 33.0, C(0.1, 0, 900), C(-0.06, 0, 720), dict(tau=6, rate=0.4, heat=1.0, double=1)), ('gamma', 31.8, 38.8, C(0.0, 0, 1250), C(0.3, -0.06, 1050, pz=6), dict(tau=30, rate=0.5)), ('stone', 37.6, 45.0, C(0.15, 0, 1100), C(-0.04, 0, 780), dict(tau=20, rate=0.45, heat=1.0)), ('valley', 43.8, 54.2, C(-0.06, 0.02, 1250), C(0.08, 0, 840), dict(tau=8, rate=0.38, heat=0.25, exp=0.95, gam=2.2)), ] # the archive's own voices (clip, in, out, at): what they say is in the transcripts of the CINEOSIS lab VOICES = [ ('8095f755-7150-5d96-bde8-83d7e001fb57.mp4', 11.55, 15.35, 1.9, 'Here is an actual picture of sound photographed on film'), ('../clips/10fe67d6-3449-5fb7-97d8-709a0d297de0.mp4', 0.30, 3.20, 7.1, 'The sunlight marks the zigs and the shadows of the zags.'), ('b3ef2f32-ea89-5744-8940-c804848c95e0.mp4', 10.05, 13.45, 12.6, 'A hot flame melts all bubbles and flaws out of the wax'), ('49073308-69cc-5104-b475-c2c72d6f8ca9.mp4', 10.85, 15.95, 17.5, 'The battle between man and fire raged on for nine nights and days.'), ('../clips/201b010b-d025-5ea8-8ec8-714d0faf41ae.mp4', 20.75, 25.00, 33.6, 'Here they may measure gamma ray, x-ray, ultraviolet'), ('a95bb4f0-0823-589c-b7e7-fac6eb482777.mp4', 22.35, 28.35, 46.3, 'But as we reflect on those who came before, sights and sounds of an earlier time echo through this valley.'), ('1f03935f-5db5-5c2c-bbea-092b327ca8a7.mp4', 4.95, 5.85, 52.7, 'only an echo'), ] SWARMS = [10, 11, 12, 13, 15, 19, 20, 21, 22, 23, 26, 28, 30, 32, 34, 35, 36, 37, 40, 42, 44, 48, 49, 51] # song sections (Warm Dome & Golden Record, 66.4 s): A unmetered intro 0-22.4, B groove 22.4-44.9, C half-time break 44.9-54.4, D return 54.4-63.6, tail SONG_END = 66.37 SEC = dict(A=(0.0, 22.4), B=(22.4, 44.9), C=(44.9, 54.4), D=(54.4, 63.7)) AV0 = 54.4 SW_STEP = 0.33; SW_LIFE = 1.25 # the avalanche: three or four swarms glowing at once AV_T = [(AV0 + i * SW_STEP, AV0 + i * SW_STEP + SW_LIFE) for i in range(len(SWARMS))] AV1 = AV_T[-1][1] SILENCE = 63.9 GOODNIGHT = 64.25 TITLE0 = 65.3 CRED0 = 71.0 END = 77.0