The best edit lost to the plainest one
The site is near-black, #090909, with a star field and an orrery ticking over in the corner. Teal and purple, restrained. Whatever portrait went in the hero had to sit in that room without shouting. That constraint did more work than any of the four tools I ran the image through.
I had Claude Code drive Kling’s MCP connector through most of it. The Kling image models, kling-image-v3_0_omni first and then kling-image-o1, did the compositing: white headphones on the figure, a plain moon orb swapped for a purple galaxy orb ringed by a tiny orrery with stardust drifting off it, a chest tattoo matched to reference. Two credits an image, and the early omni drafts were good at all of it and a little too good, over-rendered to the point of reading as an illustration rather than a photo of a person.
Then I ran a Gemini pass, Nano Banana Pro called through the same Kling connector, to put warm light back on the face and take out an extra finger. The finger is the part I keep thinking about. It had come through two Kling passes and one careful look-through of my own, where I zoomed into the crop, counted, and told myself it was fixed. It wasn’t. I’d looked straight at the hand and miscounted. What caught it was that Gemini pass plus a separate subagent I spawned to do nothing but trace the hand’s outline at seven times zoom, because by then I didn’t trust my own glance to count to five. Twenty credits, one clean edit, and if I were scoring on technical quality alone that’s the frame that wins.
The one that actually fit
It’s not the one I shipped. I’d made a separate still in my own ChatGPT, GPT-image working straight off a real photo of me, aiming for something softer and warmer, golden-hour light. Less polished than the Gemini fix, less elaborate than the Kling composites. But it was the only one of the four that read as a photograph first and an edit second, and that is what a near-black page with a clockwork motif can hold. Anything sharper or more illustrated fought the rest of the design instead of sitting inside it.
So the decision was never “which model is best.” The cleanest single edit and the most elaborate composite both lost to the plainest option, because plain was the only register the site could wear.
Winning meant becoming code
Picking the still was the easy half. Kling’s image-to-video model, kling-video-v3_0_turbo, turned that ChatGPT frame into a five-second looping cinemagraph: the orb pulses, the orrery rings turn, stardust drifts, hair moves a little. About 40 credits, 1080p on desktop and 720p on mobile.
Then Claude Code wrote the front end around it, and that is where most of the engineering actually lives. The hero is a video. A cursor-tracked lantern brightens whatever you point at, and a small depth-parallax shift sits under it. A still frame is the poster and the fallback. The video gets skipped whenever the browser has reduced-motion set or Data Saver on, so it never spends someone’s cellular data without asking. The edges fade into a veil that dissolves into #090909 instead of ending on a hard rectangle.
Four tools and a lot of iteration got me a picture. Getting that picture to feel like part of the page instead of a photo stapled to it was a separate job, and it happened in code.