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

Real product photo
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)

Bria round 1
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.
Bria round 2
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)

H3D front render
Seen side (Blender render)Geometry ✓
Correct cylinder, real texture on the visible face — ~70% of a usable asset for $0.38.
H3D back render
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)

LoRA hero
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.
LoRA in-use
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)

Bria integrate run 1
Run 1 — into Bria's own sceneHeld texture
Placement + occlusion correct, real dimple texture survived, mild tone shift.
Bria integrate run 2
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.

Track E · Deterministic DIY composite (PIL paste + shadow, $0)

DIY composite
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.

Verdicts → adopted pipeline

Shot typeAdopted pipelineWhy
Macro / materialReal photosZero drift, zero cost
Hero on sceneBria product-shot (tight cutout + manual placement + original_quality)Literal pixel preservation, $0.04
Redrawn product (angles, staged)Product LoRA (already trained: trigger BUTYLSST)Only method that held the layer-stack edge
In-use actionLoRA + 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 assetHunyuan3D 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)

Canonical 3D roll
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 layers detail
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.pybutyl_roll.blend. This asset animates the install video.

Outcome · Peel & unroll rig (Blender, $0)

Peel rig hero
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.
Peel rig front — liner peels from the underside
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.pypeel_rig.blend.

Outcome · Blender blocking → AI dress (the Big Gorilla recipe, on a product)

Kontext-dressed peel rig
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 at 0.40
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.

Outcome · BWSS1 balcony set — greybox → dress (master previs scene)

BWSS1 greybox hero
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.
Dressed balcony hero
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 greybox
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.pyinstall_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.pyunroll_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.

Bezar Video Studio · internal bench · pairs with the Product-Photo Accuracy Playbook and the Polyguard Visualization Bible.