gigaslop/tools/mb_add.py
type-two 0309f578a1 M8: warehouse tier, immersion cooling, SaaS subscribers
The move ladder continues: garage -> 20x20 warehouse with 8kW
three-phase. Immersion tank answers the fire era — eight rack-class
slots under mineral oil, 85% heat reduction, cannot ignite (verified:
8x H100 flat-out at 82C, zero fires). CRAC unit and AIO liquid loop
fill out the cooling ladder. New recurring revenue: SaaS subscribers
funnel in from live view rates and churn on latency (serving consumes
inference tokens before the video pipeline — overselling your compute
bleeds customers), on model collapse, and on outages (breaker trips
instantly cost 15% of subscribers).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 16:24:19 +10:00

45 lines
2.0 KiB
Python

#!/usr/bin/env python3
"""One-off: generate additional sprites without re-running the whole batch.
Usage: python3 tools/mb_add.py (edit NEW below per run)"""
import json, pathlib, sys
sys.path.insert(0, str(pathlib.Path(__file__).parent))
from mb_gen import ROOT, STYLE, flux_spec, run_batch, upload, beat
NEW = [
("immersion_tank", "an open-top industrial immersion cooling tank filled with glowing clear mineral oil, server boards submerged inside, tubes and a small pump, sci-fi green glow"),
("crac_unit", "a tall white industrial precision air conditioning unit for server rooms, floor standing, vent grilles, small status screen"),
]
ROOMS = [
("warehouse", "empty isometric industrial warehouse interior for a video game, 2:1 isometric projection, "
"two visible corrugated metal walls meeting at back corner, huge bare concrete floor with subtle "
"square grid lines, steel roof trusses hinted at top, high windows, sodium work lights, night time, "
"moody blue-purple lighting with cyan accents, no shelving, no vehicles, no people, no text, "
"clean detailed painterly game art", 1024, 768),
]
gen = ROOT / "public/assets/gen"
run_batch([flux_spec(n, d, w, h) for n, d, w, h in ROOMS], gen)
raw = run_batch([flux_spec(n, STYLE + d, 768, 768) for n, d in NEW], gen)
beat("bg removal for new sprites")
cuts = run_batch(
[(f"{n}_cut", "bg_remove_local", upload(gen / f"{n}.png"),
{"resolution": 1024, "background": "transparent"}) for n, _ in NEW], gen)
# autocrop like the main pipeline
from PIL import Image
for n, _ in NEW:
p = gen / f"{n}_cut.png"
im = Image.open(p).convert("RGBA")
bbox = im.split()[-1].getbbox()
if bbox:
l, t, r, b = bbox
im.crop((max(0, l - 8), max(0, t - 8), min(im.width, r + 8), min(im.height, b + 8))).save(p)
mpath = ROOT / "tools/mb_manifest.json"
m = json.loads(mpath.read_text())
m.update(raw); m.update(cuts)
mpath.write_text(json.dumps(m, indent=2))
beat(f"added {list(raw)} + cuts")