What 4-6 hours of Photoshop work looks like
A wallpaper manufacturer's sales team sells to interior designers, architects, and end customers. The sales process requires showing the client what the wallpaper looks like in their actual room — not a generic showroom photo, but their specific room with the specific wallpaper pattern they're considering.
Before the automation, this process required a trained designer to:
- Receive the client's room photo
- Open Photoshop and identify the wall surface
- Apply perspective correction to match the room's vanishing point
- Tile the wallpaper pattern onto the wall surface
- Adjust lighting and shadows to match the room conditions
- Blend edges to avoid the "pasted on" look
- Export and send to client, wait for feedback
- Repeat for each pattern variation the client wants to compare
For a busy day with 5-8 client requests, this consumed the designer's entire afternoon. Clients waited 2-3 days for results. When one designer was unavailable, everything stopped.
The business constraint: the sales team is non-technical. Any solution had to be simpler than the current process — not just faster, but genuinely easier to use on a phone during a client visit.
Why AI generation beat geometric transformation
I prototyped two fundamentally different approaches before choosing the final solution. This decision determined whether the tool would actually be used.
| Approach | Geometric transformation | AI generation |
|---|---|---|
| Method | SAM2 segmentation + perspective warp + pattern tile | Gemini multimodal generates the room with new wallpaper |
| Accuracy | Pixel-perfect when it works | Photorealistic, handles lighting/shadows automatically |
| User steps | Click wall corners, adjust mask, correct errors | Upload photo, select pattern, click generate |
| Failure modes | Complex lighting, curved walls, furniture overlap | Occasional style artifacts (acceptable for sales use) |
| Team adoption | 50% — half the team went back to Photoshop | 85-90% — simpler than Photoshop |
| Build complexity | High — SAM2 deployment, mask management | Low — API call with structured prompt |
The geometric approach was technically more precise. It was also the wrong choice. Non-technical sales staff couldn't handle the mask correction step — when the SAM2 segmentation misidentified the wall boundary (common with complex room geometry), users had to manually correct it. Half the team gave up and returned to Photoshop within a week.
The AI generation approach is less precise — it generates a new image rather than mathematically transforming the existing one. But the output is photorealistic, handles lighting and perspective automatically, and requires exactly three user actions: upload photo, select wallpaper, click generate. 85-90% daily adoption from day one.
The lesson: for internal automation tools, adoption rate matters more than technical elegance. A technically perfect tool that nobody uses produces zero ROI. A slightly imperfect tool that everyone uses every day is production-grade.
How the app works
The production architecture is a full-stack web app optimized for mobile use by a sales team on client visits:
- React 19 frontend — instant UI feedback, no page reloads, mobile-first layout
- Canvas API — client-side image compression before upload (iPhone photos are 15MB+; compressing to 2MB before sending prevents API timeouts without visible quality loss)
- Node.js backend — receives compressed image + wallpaper pattern ID, constructs the Gemini prompt, calls the API, returns the result
- Gemini multimodal API — generates the room visualization from the source photo and wallpaper pattern
- Firebase — image storage for both inputs and outputs
- Vercel — zero-config deployment, auto-scaling, global CDN
The prompt engineering for Gemini is the key technical component: the prompt instructs the model to preserve the room's existing lighting, maintain the perspective of the original photo, apply the wallpaper pattern to all visible wall surfaces, and avoid the "pasted on" look. Prompt calibration required ~30 test generations across different room types before the output quality was consistent enough for client delivery.
Client-side API key injection
The manufacturer operates two sales offices — Poland and Ukraine — with separate department budgets. Each office needs its AI API costs tracked and billed separately.
The solution: client-side API key injection. Each office has its own Gemini API key stored in their office configuration. When the app runs, it uses the key associated with that office's login. API costs appear on each office's Google Cloud billing separately.
This avoids building a cost-allocation system on the backend and lets each office manage their own API budget. The tradeoff is that API keys are technically accessible client-side — acceptable for an internal B2B tool where all users are company employees.
For a customer-facing application, keys would move server-side with per-user usage tracking.
Telegram integration
A Telegram bot sends notifications when a visualization is complete — useful for the use case where a salesperson generates a mockup during a client call and wants the client to receive it immediately in their chat.
What changed after deployment
The tool went live with the Poland office first. Results after the first month:
- Daily Photoshop time: 4-6 hours → 15-20 minutes. Designer now handles exception cases only (unusual room geometry, special client requests).
- Client turnaround: 2-3 days → same day. In most cases, the salesperson generates the visualization during the client call and shows it on their phone immediately.
- Parallel processing: Previously limited by one designer's availability. Now, any salesperson can generate visualizations simultaneously — no queue, no bottleneck.
- Adoption: 85-90% of the sales team uses the tool daily. The remaining 10-15% handle edge cases where AI generation quality isn't sufficient (very dark rooms, mirrors, complex furniture overlap).
The Ukraine office onboarded the following month with their own API key configuration. Both offices run on the same codebase.
What the tool doesn't replace
The AI generation isn't perfect. For rooms with strong artificial lighting, the wallpaper sometimes inherits the wrong color cast. Very complex wall geometry (alcoves, angled ceilings) occasionally produces unrealistic results. For premium client presentations, the designer still manually polishes the output. But this covers perhaps 10-15% of cases — for the other 85-90%, the AI output is production-ready.
Where this automation approach applies in Germany
The pattern — AI replaces manual visual mockup work — applies wherever a sales team produces client visualizations manually. Germany has several industries where this is common:
- Tapetenhändler und Bodenbelag: Wallpaper and flooring retailers showing products in client rooms. Same problem, same solution.
- Küchenstudios: Kitchen design studios showing cabinet colors and configurations in client kitchen photos. Currently done in expensive CAD software or manually in Photoshop.
- Möbelhäuser: Furniture showrooms showing how a sofa or table looks in a client's living room. Virtual try-on for furniture is the same technical problem.
- Farbenhändler: Paint retailers showing wall colors in client rooms. Simpler than wallpaper — just color replacement — but the same AI approach works.
- Fenster und Türen: Window and door companies showing new products in building facade photos for renovation projects.
In all these cases, the business pain is the same: skilled design time is being consumed by repetitive visualization work that could be automated. The AI generation approach works whenever the output quality is "good enough for a sales decision" — which it typically is, even when it's not photogrammetry-accurate.
Tools used in production
I build AI automation tools for sales teams in Germany. If your team spends hours on manual visualizations or repetitive Photoshop work — we can automate it. Tapetenhändler, Küchenstudios, Möbelhäuser — let's talk.