GrabrFi

Prompting for Photorealism: GrabrFi x Weavy

A quick glance at how subtle control over skin, light, shadow and surface detail can shift an image from artificial to photorealistic. What appears effortless in the final frames is built through structured iteration and precision.

Weavy Workflows
Control at scale
Scalable Asset Production

The work spans four distinct challenges: skin texture that reads as photographic rather than processed, reflective surfaces that behave like real materials, background depth that places the subject in space, and coin renders with enough physical weight to hold their own next to photography.

Each section below isolates one of those problems and walks through how it was solved.

Skin Realism:

Skin was the first thing to solve and the last thing to stop adjusting. Using structured JSON prompts, we defined texture as its own variable, specifying pore visibility, subsurface warmth, and shadow softness independently from the rest of the frame. 

That isolation meant we could iterate on the hand without touching the card. Each pass brought the result closer to photographic without tipping into over-processed.

Reflections:

The card's gradient surface picks up everything around it, and controlling that in a composited frame meant being explicit in the prompt about what it was reflecting and from where. 

JSON iteration let us treat specular highlights as a separate layer, running passes that adjusted placement and intensity until the card stopped reading as a flat graphic and started reading as a physical object with finish and depth.

Depth:

Background depth was handled almost entirely through prompt structure. By isolating focal falloff, background hue, and shadow density as separate JSON parameters, we could push the subject forward or pull it back without regenerating the whole scene. 

The blues were tuned across multiple iterations, warm enough to feel like atmosphere, cool enough to stay out of the way of the card's own palette.

Coin Textures

The USDC coins needed their own prompt architecture. Material properties like surface roughness, edge catch light, and emboss depth were each broken out into discrete JSON fields and iterated separately. 

The goal was physical weight: coins that looked like you could stack them, not icons floating in white space. Getting there took more passes than expected, mostly around how the dollar mark sat against the coin face in different lighting conditions.

Final Thoughts:

The throughline across all of it was the same: treating each visual element as a variable you can isolate, adjust, and test independently. JSON prompting makes that possible in a way that freeform generation doesn't. When you can name the item you want to change, you will change only that item. 

The result is a campaign that holds together across every frame because every decision in it was made deliberately, not arrived at by accident.