WatchEnhance: hvordan jeg tvinger en AI til at beholde det rigtige ur
Halfdan Harring lancerer WatchEnhance — studiobilleder til urhandlere, hvor skivens tekst, visere og metal tjekkes, før fotoet må sendes.
Jeg hedder Halfdan Harring. WatchEnhance er live.
Produktet er enkelt at sige og svært at holde: tag det foto, du allerede har. Få et studiobillede tilbage. Bevis, at uret stadig er det ur.
ChatGPT kan lave et pænt billede. Den kan ikke bevise, at Rolexen stadig er den Rolex.
Hvorfor et almindeligt billedværktøj fejler her
En handler tager billedet der, hvor uret ligger. For meget sol på glasset. En varm lampe, der gør stålet gult. Værktøj og papir bag et meget dyrt ur. Chrono24 og eBay belønner det foto, der ligner et studie.
En almindelig billedmodel er trænet til at gøre et ur smukt. Den kender den klassiske 10:10-stilling. Den kender ståludgaven. På 300 pixels er “SUPERLATIVE CHRONOMETER” et par pixels høj, så den finder på bogstaver.
Første generation af motoren limede den originale skive tilbage. Ærligt. Og det beholdt sløret i glasset, så skiven aldrig så ud som resten af rammen.
Kilde-HEIC’en har den samme skive på omkring 1.000 pixels. Det er referencen — ikke et katalogfoto, der viser forkert tid, forkert dato og ofte en anden skivevariant.
Motoren, kort
- Identificér. En vision-model læser uret. Hvert felt, den er usikker på, droppes. Et gættet “rosaguld” er værre end et udeladt felt: en Royal Oak Offshore uden “case metal” i prompten kom tilbage som stål, mens alle skive-tjek gik igennem, fordi skiven var fin.
- Ret lyset. Nano Banana 2 får en prompt, der beskriver lys — ikke udstyr. Ellers maler den en softbox ind i billedet.
- Læg det tilbage. De her modeller flytter typisk billedet 60–170 pixels og ændrer skalaen med cirka otte procent. Uden SIFT, momenter og masked ECC får du dobbeltkanter.
- Skive-tjek. SAM 2 skal dække mindst 90 procent af originalens skive, og centrum må højst flytte sig ti procent. Fejl sendes som ikke verificeret. Aldrig i stilhed.
- Tegn skiven forfra — eller behold originalen. Teksten låses bogstav for bogstav. Viserne måles som linjer fra midten. 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.
Cirka 20 cent per foto i motoren. En annonce med otte billeder lander omkring 1,60 dollar i modelkald.
Det tjek, der nægtede alle de rigtige billeder
At læse tiden på et handler-foto er upålideligt. Modellen rammer minuttet oftere end timen.
Det gamle viser-tjek sammenlignede det færdige billede med et klokkeslæt, modellen selv havde læst. På et sort Oyster Perpetual, der viste cirka 11:34, svarede den 6:34. Timeviseren, den påstod, blev matchet af sekundviseren to minutter væk. Et billede, der trofast havde beholdt alle tre visere, blev smidt ud for at være uenig med et klokkeslæt, skiven aldrig havde vist.
Offline, på hvert arkiveret render: det gamle tjek nægtede dem alle. Seks af seksten havde visere, der dokumenterbart ikke havde rørt sig.
Det nye tjek sammenligner de to stærkeste viser-linjer på fotoet med resultatet. Det behøver ikke at vide, hvad klokken er. 10:10-stillingen flytter begge visere det meste af vejen rundt. Det er præcis det, to stærke linjer fanger.
tools/handcheck.py kører det på arkivet uden at bruge flere penge. Det var den fil, der betalte sig.
Cloud Run lukker jobs, der ser ledige ud
Samme motor kører lokalt, som worker, og på Cloud Run bag sitet. En baggrundstråd midt i et foto, uden en åben request, ligner en ledig instans. Autoscaleren tager den. Jobs døde ved 16 procent, mens de samme fotos gik igennem lokalt.
Derfor kører site-jobs synkront. Cloud Scheduler rammer /v1/tick hvert minut. Jobbet kører inde i requesten. 16 GiB — et enkelt foto topper over 8 GiB, når segmenteringsmodellen er loadet. Et job, der dør tre gange, markeres som fejlet, i stedet for at vi bliver ved med at betale for de samme modelkald.
Det er ikke en stil. Det er den eneste måde, Cloud Runs autoscaler forstår arbejde på.
Hvad handleren får
Tag billedet. Tryk på knappen. Gem filerne. Sæt dem på Chrono24, eBay eller jeres eget site.
Entry er 25 dollar for fem ure, én gang. Dealer er 99 dollar om måneden for halvtreds. Et foto, vi holder tilbage til et nyt skud, tæller ikke. Samme foto kan køres om i en anden styrke og tæller én gang.
WatchEnhance er bygget til ure. Ikke et almindeligt fotoværktøj med en ur-mode. En ukendt microbrand, et sjældent uafhængigt mærke eller en reference fra 1960’erne behandles som en Submariner, fordi genkendelse aldrig er det, der bestemmer.
Hvis du vil se det
watchenhance.com. Den fulde case — tjek, alignment, Cloud Run og de fejl, der tvang designet — ligger på jegudvikler.dk/cases/watchenhance.
Samme uge lancerede jeg Bubbi, en gratis iOS-app til måltider, søvn og white noise.
Artiklen er skrevet af Halfdan Harring, fullstack-udvikler i Aarhus og udvikleren bag WatchEnhance, Bubbi, QuizFight, TaskMondo, LostLead og HeadToHead.
Har du et projekt, der ligner det her?
Jeg tager kun 2–3 nye kunder ad gangen. Skriv, så ser vi om det er et match.
Start en samtale