WatchEnhance – studiobilleder, uden at opfinde uret
Halfdan Harring byggede WatchEnhance til urhandlere, der allerede har billedet: telefonen, skrivebordet, det dyre ur. Motoren retter lys, skygge og baggrund — og tjekker, at skivens tekst, visere og dato stadig er dem, der kom ind. Hvis den ikke kan stå inde for det, sender den den originale skive med det nye lys. ChatGPT kan lave et pænt billede. Den kan ikke bevise, at Rolexen stadig er den Rolex.
Problemet
En urhandler tager billedet der, hvor uret ligger: ved vinduet, under en varm lampe, på et rodet bord. Chrono24, eBay og WhatsApp belønner det foto, der ligner et studie. Et studie koster tid og et telt. En chat-boks koster tilliden.
Almindelige billedmodeller er trænet til at gøre et ur smukt. De kender den klassiske 10:10-stilling. De kender ståludgaven af et ur, der i virkeligheden er rosaguld. De tegner “SUPERLATIVE CHRONOMETER”, når skiven kun er 300 pixels høj, fordi de ikke kan læse den.
WatchEnhance startede med det spørgsmål, Halfdan Harring stillede motoren: kan du rette lyset — og bevise, at skiven stadig er den skive, der kom ind?
Sådan virker det
1. Tag billedet der, hvor du er
Telefonen, skrivebordet, hvilken som helst vinkel du alligevel ville lægge i en annonce. Ingen opsætning. Motoren er ikke bundet til et bestemt mærke eller en bestemt reference.
2. Identificér, relight, align
En vision-model navngiver uret ud fra fotoet — og dropper felter, den er usikker på, i stedet for at gætte. Nano Banana 2 retter lyset i hele rammen. SIFT, momenter og masked ECC lægger resultatet tilbage på originalen, fordi de her modeller typisk flytter billedet 60–170 pixels og ændrer skalaen med cirka otte procent.
3. Skiven skal dække skiven
SAM 2 finder skiven i AI-billedet. Når det lægges tilbage på originalen, skal den dække mindst 90 procent af den oprindelige skive, og centrum må højst flytte sig ti procent. Fejler tjekket, sendes fotoet som ikke verificeret — aldrig i stilhed.
4. Macro-re-render, eller originalen
Kilde-HEIC’en har skiven på omkring 1.000 pixels. Motoren læser den trykte tekst, måler viserne og tegner skiven forfra. Den tekst, der kommer tilbage, må kun være en del af den tekst, vi har låst — en viser kan dække bogstaver, men den må ikke opfinde nye. Viserne tjekkes op mod fotoet, ikke op mod et ur. Fejler det, sender vi den originale skive, bare tilpasset det nye lys.
De tekniske udfordringer
At læse tiden på et handler-foto er upålideligt. En vision-model rammer minuttet oftere end timen. Det gamle tjek sammenlignede det færdige billede med et klokkeslæt, modellen selv havde læst. På arkivet nægtede den alle macro-renders — seks af seksten havde visere, der dokumenterbart ikke havde rørt sig. Det nuværende tjek sammenligner de to stærkeste viser-linjer på fotoet med resultatet. Det behøver ikke at vide, hvad klokken er.
Metal skal læses tilbage, ikke måles som farve. En Royal Oak Offshore i rosaguld blev rettet som stål, fordi prompten spurgte om bezel og lænke — ikke om kassemetal. Lokal farvestatistik kunne ikke skille et rigtigt skift fra guld til stål fra et varmt foto, der blev neutraliseret. Et par-tjek kan tage fejl begge veje. Den fejl, det vogter, er den en handler ikke tilgiver.
Cloud Run lukker jobs, der ser ledige ud.
En baggrundstråd midt i et foto, uden en åben request, ligner en ledig instans.
Autoscaleren tager den. Jobs døde ved 16 procent. Løsningen er synkron: Cloud
Scheduler rammer /v1/tick, og jobbet
kører inde i requesten. 16 GiB, 30 minutters deadline, tre fejl og så stop —
ikke evige modelkald på samme foto.
For lidt forandring er også en fejl. Alle andre tjek spørger, om modellen ændrede for meget. Ingenting spurgte, om den ændrede noget. To fotos, en handler pegede ud som “ser ikke rigtig forbedret ud”, målte CIELAB ΔE 7 og 18 mod en 33-foto-median på 36. Nu kører den igen, når både ur og ramme er for flade.
Arkitekturen
Resultatet
- Live SaaS på watchenhance.com, bygget og lanceret af Halfdan Harring
- Nyt lys med verificeret skive — eller den originale skive tilpasset lyset, aldrig et opfundet ur
- Ikke bundet til mærker: en ukendt microbrand behandles som en Submariner
- Et foto, vi holder tilbage til et nyt skud, tæller ikke på planen
- Downloads i 2048 px, JPEG eller PNG, uden vandmærke
- Bygget til Chrono24, eBay, WhatsApp og boutique-sites — ikke et almindeligt fotoværktøj med ur-mode
Hvad jeg lærte
En model uden kvittering er et andet produkt. WatchEnhance konkurrerer ikke med Photoshop. Den konkurrerer med “jeg smider det i ChatGPT”. Forskellen er ikke, hvor pænt det ser ud. Forskellen er, at et forkert ur kommer tilbage som en returnering.
Gates skal kunne køres offline.
Hvert skive-render, motoren nogensinde har købt, ligger stadig ved siden af
det originale udsnit. handcheck.py
var den fil, der betalte sig: den fandt fejlen, der nægtede alle de rigtige
billeder, før der blev brugt flere penge på at tune den.
At nægte er en feature, handleren kan se. Et foto, der holdes tilbage, koster ingenting på planen. Et foto, der sendes forkert, koster butikken. Den rigtige standard er den kedelige.
Skal du bygge en AI-pipeline med rigtige gates?
Verifikation, alignment og jobs, der ikke dør stille på Cloud Run — Halfdan Harring har netop lanceret det.
Book 20 min. intro