The LoRA bench concluded the SD1.5 lane was invalid for garments. That was true of the CHECKPOINT, not the lane: Hyper_Realism_1.2 was the only one the farm could reach and it is a person-photoreal merge that framed every garment as worn-and-cropped no matter how hard you negative-prompted. Given four non-person checkpoints, the lane works — and now beats flux. MODELBEAST patches (John's explicit blessing; flux_local deliberately untouched because a parallel session owned it and had already deployed LoRA + Z-Image support there): · comfyui_sd now STACKS LoRAs. It hard-coded a single LoraLoader, so style+texture together was impossible; `lora` now takes a list, each entry optionally `name=0.6`, chained. · comfyui_sd gains ControlNet (loader + ApplyAdvanced + staged control image). The payoff for a wardrobe is recolouring one garment into N colourways that share a byte-identical silhouette, so a single cut-out alpha is reusable across every variant. · Per-node preflight widened to LoRAs and ControlNets, and the arch-mismatch warning now fires per LoRA. A wrong-base LoRA is a SILENT no-op, so everything fails loudly instead. · Deployed to all three nodes that run comfyui_sd (m3ultra, ultra=m1, m4pro=m4), each backed up. · GET /api/assets now honours ?parent_job=. It declared no such parameter, so FastAPI silently dropped it and every caller got the whole table — 2,578 rows for a bogus id. Callers that took rows[0] were right only by accident of newest-first ordering. Verified: bogus -> 0 rows, real -> only its own. Restarted the queue in a zero-active-jobs window. · Copied 4 non-person checkpoints ultra -> m3ultra over the fast LAN (12.6 GB). wardrobegod: · `sd` backend on /api/gen, defaulting to juggernautXL_ragnarok, with checkpoint/lora/negative passthrough. Measured on one prompt+seed: a full isolated flat-lay where Hyper_Realism crops a worn garment. · flat3d template gains 'no hanger, no coat hanger' — a wire hanger appeared in most SD product shots and keys into the cutout as if it were garment. doll2d already had the clause. Verified end-to-end: 7/7 salvage cells ran (including a 2-LoRA stack, previously impossible), and a Coogi knit generated through wardrobegod's own /api/gen came back isolated on white with legible raised-knit texture. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| tools | ||
| web | ||
| .gitignore | ||
| blender_ops.py | ||
| README.md | ||
| server.py | ||
| STATE_AND_PLAN.md | ||
WARDROBEGOD — one skeleton, infinite fits
The wardrobe generator bench: load bodies (FBX/GLB/OBJ), build a clothes library, generate new garments on the farm, fit them, assemble dressed NPCs. Sibling of NPCFACTORY (the dress-up/clip bench) and MeshGod imagelab — this one owns clothing.
python3 server.py → http://localhost:8150
WG_HOST=0.0.0.0 python3 server.py → expose on the tailnet
MB_TOKEN=mbt_… python3 server.py → enables the generator tab (MODELBEAST bearer token)
No build step: stdlib server + three.js from CDN. Heavy lifting = local headless Blender
(blender_ops.py, tested on 5.1.2; override path with WG_BLENDER).
What it does
- Library panes: bodies (scans
library/bodies/+~/Documents/anatomy+ thriftgod'sweb/assets/models), garments, generated images, finished outfits. Upload via file inputs. - Stage: orbit viewer; FBX auto-converts to GLB (cached in
.glbcache/); HUD reads tris / height / rig state (bones + clips); first clip auto-plays. - Body ops: scale-to-height (bases arrive 1.0m tall — normalize to ~1.72m);
decimate-keep-weights (the SAFE local path for rigged meshes — never farm
/finish). - Rigid attach (tier 1): hats/bags/shoes → pick a bone, slide offsets, preview live.
Bake permanently via the fleet
/rigendpoint (m1ultra :8011) when happy. - Deforming FIT (tier 2): weight-transfers the rigged body's skinning onto a garment
mesh (Blender data_transfer, nearest-face interpolated, optional inflate-mm of air),
parents it to the armature.
FIT → wardrobe item= garment+skeleton GLB (reusable);fit → dressed glb= body+garment in one. - Assemble: body + ticked fitted garments → one dressed GLB in
out/— drop straight into thriftgod / djsim / procity, or publish to 3GOD.
Generating NEW clothing (the pipeline, $0 on MODELBEAST)
- flux (
flux_local, Klein) — product-shot prompt template: garment laid flat, white bg - cutout (
bg_remove_local) — the biggest quality lever before 3D - then ONE of:
- → rigid 3D (
trellis_mac, ~5 min): hats, shoes, bags, glasses — bone-parent these. NOT for floppy cloth: reconstruction eats thin geometry (fleet traps ledger). - → hanging texture: flat garment PNG for rack planes (djsim
fittings.js garment({image})) and the paper-doll wardrobe. Flat clothes love this route. - deforming wearables: model/retopo against the base body (or socket-cut a clothed torso, character_kit_modular style), then FIT. Never raw-gen these.
- → rigid 3D (
House rules
- Bases (anatomical models) stay in the library. Only dressed outfits ship into games.
- FIT requires a rigged body. Unrigged base → rig first (MIRPAMO on ultra, or Mixamo).
- One skeleton (mixamorig) across the fleet: any garment fitted on one body fits every body on that skeleton, and every clip in the bank drives it.