Things I have built
Alongside client work, I build my own products. These sit at the intersection of industries I know from the inside and technical problems I find genuinely interesting to solve. WrapsDesigner is the main one - a live SaaS product in a market I spent years working in.
The problem it solves
I spent years working in the vehicle wrap and signage industry. One of the constant frustrations was visualisation - a client wants to see a design on their actual van, not a generic 3D render of a van that looks nothing like theirs. Existing tools required expensive template subscriptions (£350-480 per year) for a fixed library. Newer vehicle, unusual body shape, or an obscure make? No template. Start from scratch in Photoshop.
WrapsDesigner solves this by working from photographs. Upload a photo of any vehicle, pick a style, and the AI generates a realistic wrap mockup in around 30 seconds. No templates, no subscriptions, no hours of manual masking.
How it works
The system is credit-based - one credit, one design. Credits do not expire and there is no monthly subscription. Users can try 10 designs for £3.99, which keeps the barrier to entry low and the commitment minimal. Volume pricing scales down to £0.25 per design at the top tier.
The AI pipeline runs on a dedicated AMD MI50 GPU server connected via WireGuard VPN, with a WordPress frontend handling authentication, payments, and the user-facing dashboard. Designs route through a PHP client to the ComfyUI API running on the GPU server, with real-time progress tracking pushed back to the browser.
Stack
The vectorisation system
One of the most technically involved parts of WrapsDesigner is the pipeline that takes an ordinary vehicle photograph and produces clean, vector-ready lineart - the kind of output that would previously require purchasing from template subscription services.
The constraint it removes
Professional vehicle wrap templates - clean outlines of specific vehicles that designers use as a base in Illustrator or Photoshop - are sold by subscription. Providers like ProVehicleOutlines charge £350-480 per year for access to their library. If your client's vehicle is not in the library, there is no option. A newer model, a bespoke conversion, a rare commercial body - all require hours of manual work to trace.
The vectorisation system generates a clean lineart from any vehicle photo. No library dependency, no manual tracing, no subscription required. One image in, one clean technical illustration out.
The pipeline
- 01 Background removal
rembg with the silueta model isolates the vehicle and places it on a clean white background. This prevents the AI from incorporating environmental noise into the lineart.
- 02 Lineart generation
RealVisXL V5 with MistoLine ControlNet generates clean technical lineart. The key finding after testing multiple configurations was to feed the lineart preprocessor output directly to ControlNet without inverting - inverting was the failure case that took time to diagnose.
- 03 Normal map extraction
DSINE normal map generation produces a surface-normal image of the vehicle. The green channel (Y-axis, up/down facing surfaces) is extracted, blurred, and inverted to produce a physically-based shading layer that can be composited over designs at 30-50% multiply opacity.
- 04 Body mask generation
A separate Qwen VL pass colourises the vehicle body in flat neon green while preserving windows, wheels, and trim in their natural tones. Green channel subtraction with thresholding produces a clean binary body mask for use as a design constraint layer.
Pipeline outputs
Black lines on white background. Clean technical illustration ready for SVG conversion or use directly in Illustrator as a template layer.
Binary white/black mask isolating the paintable body panels. Used to constrain wrap design application to the vehicle body only.
Physically-derived from surface normals. Multiply blended over a design at 30-50% opacity gives the wrap realistic depth without manual shading.
All layers pre-stacked in a GIMP .xcf or Photoshop .psd file. Open, paste a design onto the body layer, export. Designed to minimise post-production steps.
Performance
The full pipeline - background removal, lineart, normal map, body mask, and template generation - completes in approximately 13 seconds on the AMD MI50. Custom TorchCompile optimisations using a community triton fork for the gfx906 architecture reduced individual generation steps by up to 77% after initial warm-up. The Lightning 4-step LoRA configuration brings the fastest individual passes to under 7 seconds.
AMD's MI50 presented some non-trivial engineering challenges. The architecture lacks native FP8 support (requiring float32 casting workarounds), is deprecated in ROCm 6.0 with no official triton support, and required use of a community fork (nlzy/triton-gfx906) to enable torch.compile. Getting the full pipeline stable on this hardware was a significant part of the build.
Other technical work
This site
steveblackmore.dev is built with Astro - hand-coded, no themes, no page builder. 71 pages, structured data on every page, inline styles, automated sitemap. Scores 98-100 on Lighthouse across all four categories. Deployed via rsync to a self-managed Nginx server.
WordPress performance engineering
Systematic source-level tree-shaking of WordPress and WooCommerce admin scripts using Puppeteer coverage audits and custom block/bisect probe tooling. Removed over 1.3 MB of JavaScript from a WooCommerce product edit page through probe-verified safe removals.
Reviews Chaser
A white-label review acquisition system for small businesses. SMS and email sequences, review funnel pages, dashboard with click tracking, and a custom service worker for PWA install. Built to run as a hosted service with per-client configuration.
See Reviews ChaserBuilding something that needs this kind of thinking?
Whether it is a full-stack product build, a performance problem, or a technical integration that needs someone who will work through it properly - get in touch with a brief outline of what you are trying to do.
Start a conversation