| """ |
| Generate a curated set of showpiece films into showcase/ so the Space gallery has |
| gems that replay INSTANTLY (no model call) the moment a judge opens it. |
| |
| CLAUDEMOVIES_LLM_URL/_KEY/_MODEL set, then: python showcase.py |
| """ |
|
|
| import json |
| import os |
| import re |
| import sys |
|
|
| import movies |
|
|
| SHOW = os.path.join(os.path.dirname(__file__), "showcase") |
|
|
| |
| |
| |
| FILMS = { |
| "knight": ("The Knight Afraid of the Dark", "a tiny knight who is afraid of the dark"), |
| "rain-cat": ("A Robot and a Stray Cat", "a lonely robot who finds a stray cat in the rain"), |
| "bread-dragon": ("The Dragon Who Would Rather Bake", "a dragon who would rather bake bread than breathe fire"), |
| "troll-dance": ("The Troll Who Longed to Dance", "a grumpy troll who secretly longs to dance"), |
| "paper-boat": ("The Paper Boat", "a paper boat's brave voyage to the endless sea"), |
| "ghost": ("The Little Ghost Afraid of People", "a little ghost who is afraid of humans"), |
| "snail-race": ("The Snail Who Raced the Wind", "a snail who dreams of racing the wind"), |
| } |
|
|
|
|
| def main(): |
| os.makedirs(SHOW, exist_ok=True) |
| for slug, (title, c) in FILMS.items(): |
| for _ in range(3): |
| spec = movies.direct(c) |
| if movies.good_shot_count(len(spec.get("shots", []))): |
| break |
| n = len(spec.get("shots", [])) |
| if not movies.good_shot_count(n): |
| print(f" skip (shots={n}): {slug}", file=sys.stderr) |
| continue |
| spec["title"] = title |
| json.dump(spec, open(os.path.join(SHOW, slug + ".json"), "w"), indent=2, ensure_ascii=False) |
| print(f" saved {slug}.json ({n} shots, \"{title}\")") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|