Flow image -> fal-ai/trellis -> /finish -> /rig onto a Mixamo bone. Rows carry slot,
bone and scale_m (LONGEST bbox axis, what /rig?fit=1 normalises) beside the prompt;
the flowext driver ignores the extra keys.
Authored + adversarially verified: every prompt was refuted-by-default through a
geometry / scene / material lens before it survived. What that caught:
- milk crate and single LP sleeve are NOT in the bank. A milk crate is defined by an
open lattice of ~6mm ribs, which is 1-2 voxels at TRELLIS's ~5.2mm/voxel over a 0.33m
bbox; and under the mandatory shadowless light a blind recess and a through-hole are
pixel-identical, so TRELLIS falls back to its lattice prior. A 12" sleeve is a 10.7:1
flat panel. Replaced by a shallow solid-walled stacking tub and a 12cm-thick block of
sleeves — both re-verified 0/3 and 1/3 refuted, the one dissent (a 1cm dimple pressed
into a sub-1cm wall perforates it) fixed by thickening the wall to 2cm.
- Control experiment: the same harsh panel passed 3 already-accepted props 0/3, so its
verdicts are calibrated, not merely hostile.
- esky appeared twice (box + bag); dropped the bag. bum bag moved Spine2 -> Hips.
dj record bag 0.50 -> 0.38m (a 12" LP is 0.32m). cross-trainer 0.31 -> 0.29m.
felt bush hat 0.38 -> 0.35m. gumboot stays 0.38m: that is its HEIGHT, the longest axis.
- "low-sheen ceramic" on the mug -> "with no sheen"; glaze is the likeliest specular bake.
Not enqueued — running the bank spends Flow credits. To fire it on the m3ultra rig:
ssh m3ultra 'while read -r l; do curl -s localhost:8017/enqueue -d "$l" >/dev/null; done' \
< banks/props_meshgod.jsonl
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
||
|---|---|---|
| banks | ||
| .gitignore | ||
| background.js | ||
| content.js | ||
| flowclient.py | ||
| games.monsterrobot.flowrinse.plist | ||
| install.sh | ||
| launch.sh | ||
| local_server_example.py | ||
| manifest.json | ||
| popup.css | ||
| popup.html | ||
| popup.js | ||
| queue.jsonl | ||
| README.md | ||
| requeue.py | ||
| test_prompt_echo.mjs | ||
Flow Auto-Pilot
A Brave extension + local queue that drains a prompt bank through Google Labs Flow (Nano Banana 2 images, Veo videos) on the webui-only credits you can't reach via API. The extension types prompts into the Flow agent box with trusted CDP input (Flow ignores synthetic DOM events), waits for the media grid to grow, harvests the new asset URLs, and downloads them with the page's session cookies.
Not headless: Brave must be running and logged into the Flow account. But once the tab is open with Auto-start ticked, it runs unattended.
Parts
| File | Role |
|---|---|
manifest.json, background.js, content.js, popup.* |
the Brave MV3 extension |
local_server_example.py |
queue server on :8017 — queue.jsonl in, results.jsonl out |
queue.jsonl |
the prompt bank (one task per line) |
flowclient.py |
enqueue() / wait_for() so a game project can request assets |
launch.sh |
start server + keep Mac awake + open/focus one Flow tab |
install.sh + games.monsterrobot.flowrinse.plist |
self-healing launchd agent |
Run it by hand
./launch.sh https://labs.google/fx/tools/flow/project/<PROJECT_ID>
Server comes up (under caffeinate), Brave focuses the Flow tab, and with
Auto-start ticked the rinse begins. Files land in
~/Downloads/flowrinse/<category>/.
Run it unattended (launchd)
./install.sh
Fires launch.sh at login and every 10 min. Because launch.sh is idempotent
(port check + tab reuse), the repeat runs are no-ops that self-heal a dead
server or a closed tab.
macOS TCC gotcha (same as the vault-backup job): launchd can't execute
scripts inside ~/Documents, so install.sh runs a copy at
~/Library/Application Support/flowrinse/. That copy owns the live
queue.jsonl / results.jsonl / downloads/ once the agent is running.
Re-run ./install.sh after editing launch.sh or local_server_example.py
to resync the copy. First run pops one Automation prompt (allow control of
Brave) — click Allow on the rig's screen.
launchctl kickstart -k gui/$(id -u)/games.monsterrobot.flowrinse # run now
launchctl bootout gui/$(id -u)/games.monsterrobot.flowrinse # stop it
Enqueue from another project
from flowclient import enqueue
enqueue("Sierra EGA record-store back room, 160x168, 16-color",
kind="image", category="morp2_bg")
Or over the wire: POST http://localhost:8017/enqueue with
{"prompt","kind","model","category","dest"}.