# -*- coding: utf-8 -*-
"""寝ている間に回す(ショート専用・舞台型・2026-11-06)
エイイチの言葉: 寝ている間も依頼を続けて回せるようにしてほしい(2026-10-27)/長い依頼の途中経過は知りたいが、毎時間は多い。2時間ごとかタスクの区切りでよい(2026-11-05)"""
from butai_parts import *
OUTRO_K = 6 # 締めの文の番号(narration.py の最後に足した文)
NAME, VER = "寝ている間に回す", 3
HEAD = "寝てる間に
研究は進む?"
T_ON = (0, 1.2)
HOURS = ["23", "0", "1", "2", "3", "4", "5", "6", "7"]
def night_bar(top=470, ticks=None, t_ticks=None, col=FACE_2, label=True):
"""23時〜7時の帯。ticks: 印を付ける時(HOURS の番号)"""
w = 804 / 8
out = f'
'
if label:
out += "".join(f'{hh}時
'
for k, hh in enumerate(HOURS) if k % 2 == 0)
for j, k in enumerate(ticks or []):
an = f"opacity:0;animation:{a('pop', t_ticks + j * 0.12, .2)}" if t_ticks is not None else ""
out += f''
return out
def scene(T, S):
h = CSS
# 0: 寝てる間も進めたい(夜の帯)
t0 = T(0, 1.2)
h += win(t0, T(1, 0), kick("夜") + '寝ている間
' + night_bar(330))
# 1: 夜は Claude Code が回す(帯の上を再生ヘッドが進む)
t1, s1 = T(1, 0), S(1)
h += win(t1, T(2, 0), kick("夜は") + 'Claude Code が回す
' + night_bar(330)
+ ""
+ f'')
# 2: クラウドの GPU で学習して、片付けまで
t2, s2 = T(2, 0), S(2)
st = "".join(f''
f'{k + 1}{nm}
' for k, nm in enumerate(["借りる", "学習", "持ち帰る", "片付け"]))
h += win(t2, T(3, 0), kick("1つめ クラウドの GPU") + st)
# 3: Unity の店を、条件を変えて何十回も(マスが埋まる)
t3, s3 = T(3, 0), S(3)
cells = ""
for k in range(60):
r_, c_ = divmod(k, 12)
cells += (f'')
h += win(t3, T(4, 0), kick("2つめ Unity の店(条件 × 回数)") + cells)
# 4: 途中経過は知りたい。でも毎時間は多い(帯に毎時の印が並ぶ)
t4, s4 = T(4, 0), S(4)
h += win(t4, T(5, 0), kick("途中経過のお知らせ") + '毎時間は、多い
'
+ night_bar(380, ticks=list(range(9)), t_ticks=t4 + 0.3, col="#5C6678")
+ f'')
# 5: 2時間ごとか、区切りで
t5 = T(5, 0)
h += win(t5, None, kick("これから") + '2時間ごと、か区切りで
'
+ night_bar(380, ticks=[0, 2, 4, 6, 8], t_ticks=t5 + 0.4, col=ORANGE))
h += outro(T, OUTRO_K) # 締め:サイトへの入口
return h
def OVER(T):
return stage_fx(T, fx=[dict(kind="stars", t=T(0, 0.6), d=T(4, 0) - T(0, 0.6)), dict(kind="shock", t=T(5, 0.4), d=1.6)])
FACE = [(-1, 0.0, 1.0, "smile"), (1, 0.0, 2.3, "wink"), (2, 0.0, 3.6, "base"), (3, 0.0, 3.9, "joy"), (4, 0.0, 3.9, "think"), (5, 0.0, 3.0, "smile"), ("end", 0.0, 3.0, "smile")]
POSE = [(-1, 0.0, 2), (2, 0.0, 2), (4, 0.0, 1), (5, 0.4, 4)]
LEAN = []
INTRO = "drop"
MOVES = [(1, 0.3, "spin", 1.0), (3, 0.5, "hop", 1.4), (5, 0.4, "bow", 1.2)]
SE = [(-1, 0.0, "se_rise", -10), (0, 1.2, "se_boot", -12), (1, 0.0, "se_whoosh", -12), (2, 0.0, "se_whoosh", -12),
(2, 0.3, "se_tick", -12), (2, 1.3, "se_tick", -12), (2, 2.3, "se_tick", -12), (2, 3.2, "se_tick", -12),
(3, 0.0, "se_whoosh", -12), (3, 3.4, "se_ding", -11), (4, 0.0, "se_whoosh", -12), (4, 0.3, "se_buzz", -14),
(5, 0.0, "se_whoosh", -12), (5, 0.4, "se_ding", -9)]
ENDING = dict(kind="jump", at=(5, 0.4))