Bezar Video Studio · Internal · Butyl Stainless Steel Tape · July 2026
Accuracy Bench — Compositing vs LoRA vs 3D
Live test of the three research-verified pipelines against the real product, on our stack. Total bench spend: ~$2.95.
Ground truth
The real roll (P0271092) — smooth shiny metallic exterior, stacked-layer edge, white core. Every result below is judged against this.
Track A · Bria product-shot (compositing, $0.04/img)
Round 1 — raw photo in2 traps Pixels 100% preserved (it IS the photo) but the white backdrop inside the alpha became a halo box, and placement=original kept giant scale.Round 2 — tight cutout + manual placementFixed Halo gone, grounded on black membrane with contact shadow, exact product pixels. Scene look is plainer than gpt-image-2 — the accuracy/glamour trade.
Track B · Hunyuan3D → Blender ($0.375/run)
Seen side (Blender render)Geometry ✓ Correct cylinder, real texture on the visible face — ~70% of a usable asset for $0.38.Unseen sideHallucinated Concave dish invented where no photo existed; metallic shine lost. Verdict: previs/blocking base — a short manual Blender pass (metal shader, core, edge) finishes it into a canonical asset.
Track C · Per-product FLUX LoRA ($2 once + ~$0.03/img)
Hero generationIdentity ★ Best redraw result of the whole project: smooth shiny facer AND the true stacked-layer edge (right olive tone), white core, natural scale on membrane. Trained on 8 photos.In-use generationComposition weak Material perfect — but it ignored the roll/glove/liner choreography. Confirms research: LoRA solves WHAT it looks like; composition needs visual cues (bbox/img2img/depth), not text.
Track D · Bria product/integrate (native API, in-scene placement)
Run 1 — into Bria's own sceneHeld texture Placement + occlusion correct, real dimple texture survived, mild tone shift.Run 2 — into a FLUX scene, clean cutoutsRepainted Fully regenerated both products (roll became a fabric-looking cylinder). Revised verdict: integrate is a GENERATIVE embed — unreliable for accuracy work.
Real pixels pasted at exact coordsRoll ✓Strip source invalid The roll (clean, angle-compatible cutout) sits believably with zero drift risk. The strip fails — its source crop had baked-in shadow/backdrop and a mismatched camera angle. Lesson: exact-coordinate compositing needs clean product photography at a compatible angle — ask the client for applied-state photos.
LoRA + visual conditioning; best unlock = request real applied-state photos from client (usable directly AND as composite cutouts)
Integrate repaints; text-only fails; angle-matched real photos beat everything
Multi-angle + video asset
Hunyuan3D base + manual Blender finish
$0.38 gets 70% of the modeling; finish once, reuse forever
Universal lesson: feed every pipeline a tight, clean cutout — all three tools treated background pixels inside the crop as "product." And the LoRA weights + config are saved in bench/lora/out/ — reusable for all future Butyl imagery at ~$0.03/image.
Outcome · Canonical 3D asset (Blender, $0)
Procedural roll — final assetGround-truth accurate Modeled from scratch (simpler than fixing the Hunyuan mesh): exact 3" width and diameters, smooth metallic facer, white core.Wound-layer sideColors sampled from the real macro Concentric-ring shader; band colors measured from the actual roll-edge photo (sRGB→linear). Fully parametric: assets3d/build_roll.py → butyl_roll.blend. This asset animates the install video.
Outcome · Peel & unroll rig (Blender, $0)
Unroll + peel — deterministic rigPhysically correct "Over" dispense: tape leaves the top of the roll and DRAPES (cubic spline, eased touchdown — flexible tape, not stiff panels), metallic facer up on the placed run. No cloth sim — the strip follows a math path, so it can never tangle or flip mid-animation.Liner peels from the UNDERSIDECorrected choreography The release liner is the strip's bottom ply: it peels DOWNWARD off the descent (never over the top), hangs in the wedge, and its tip flops in a loose curl — matching the P0271133 macro. Layer order: metallic facer / tan dimpled butyl / liner (pale blue-grey outer, glossy black against the butyl). Materials sampled from the macro, regular dimple grid on butyl + liner. assets3d/build_peel_rig.py → peel_rig.blend.
Outcome · Blender blocking → AI dress (the Big Gorilla recipe, on a product)
FLUX Kontext dress over the rig renderGeometry held · scene photoreal One pass, $0.04: rooftop, black membrane, natural light — while keeping the rig's exact roll, drape, blue liner pull-away and touchdown (naming the liner's color in the prompt kept it blue). The 3D render dictates WHAT happens; the AI only decides what it looks like.LoRA img2img (strength 0.40)Texture-only Refined the wound-layer side toward the real product but couldn't relocate the scene at structure-safe strengths. Role: identity/texture polish AFTER Kontext sets the scene, not scene-building.
Verdict: greybox-→-dress works for products, same as sets. Remaining drift to manage: Kontext re-invented the wound-side texture (crinkled foil vs the real olive stacked layers) and kept the liner curl silver — both fixable upstream by making those materials more distinct in the Blender render, or downstream with a LoRA polish pass.
Greybox from the engineering detailSpec-driven set Built directly from Polyguard's BWSS1 detail: membrane deck, concrete T-rail curb at the edge, 4"×4" elastomeric shims @ 18" O.C., 105 flashing on the wall — with the peel rig performing in the edge zone. assets3d/build_balcony_scene.py.Kontext dress — hero (beauty still)Set + product held Black membrane with real texture, precast concrete rail, rubber shims, brushed-steel strip. Note: the dress pass omitted the hanging liner — see the finding below.Peel detail — deterministic renderThe liner beat, guaranteed Close-up on the corrected choreography: liner off the underside, hanging in the wedge, flopped tip showing the black dimpled inner face. This frame is rendered truth — no AI redraw touches it.
Finding — the liner defeats AI dressing (6 attempts): Kontext deletes or repaints the hanging liner (and at small scale paints the whole strip blue); LoRA img2img turns it into a pipe. Thin, dark, product-overlapping elements get "cleaned up" by redraw models. Path forward: liner/peel beats stay deterministic 3D (or use the real macro photos P0271108/P0271133 directly); AI dressing is reserved for set + strip beauty shots, where it's reliably excellent.
Outcome · CORE INSTALL SEQUENCE — full test run (5s)
The whole install action in one deterministic shot: unroll (over-the-top, facer up) while the installer pulls the release liner away from the roll — it separates on the strip's underside and streams up-and-away as a taut blue ribbon toward the implied hand, passing beside the roll (never over it) → the Seam Roller 2.5" (the tool Polyguard actually sells: white nylon roller, red steel frame, black grip) lifts onto the strip and makes the press pass. Wrap pitch includes the liner ply so the wound layers never interpenetrate. assets3d/build_install_seq.py → install_seq.blend. Known polish items: highlight break at the roll shoulder (curvature handoff), no press-down deformation yet, no hands.
Outcome · First MOTION — Curve-Deform unroll (3s test)
The unroll beat, animated deterministically. Technique adapted from the reviewed tutorial: the strip's plies ride one spiral+drape+tail curve; animating the curve's location makes the roll travel and pay out tape with rotation, consumption and lay-down automatically in sync. Product truth enforced: over-the-top dispensing (the metallic facer is the roll's outer face — bottom-exit rolling would lay it metal-down), facer-up on the placed run, butyl edge visible. assets3d/build_unroll_anim.py → unroll_anim.blend. Known limits of the technique (logged): the live spiral empties from the inside, so shots must end while outer wraps are live; the roll-body annulus is static dressing. This rig pattern generalizes to every roll-format Polyguard product.
Not yet benched
Photoroom's chain (needs its own API key) — optional now that Bria covers both paradigm-1 cases.