<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gurleen Singh Khurana</title>
    <description>The latest articles on DEV Community by Gurleen Singh Khurana (@gurleen_cherryshot).</description>
    <link>https://dev.to/gurleen_cherryshot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4114745%2Fbee186a4-61e4-4c62-939e-f013b5d36606.png</url>
      <title>DEV Community: Gurleen Singh Khurana</title>
      <link>https://dev.to/gurleen_cherryshot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gurleen_cherryshot"/>
    <language>en</language>
    <item>
      <title>How we made AI product photography promptless: a vision pass writes the prompt, not the user</title>
      <dc:creator>Gurleen Singh Khurana</dc:creator>
      <pubDate>Tue, 08 Sep 2026 01:49:46 +0000</pubDate>
      <link>https://dev.to/gurleen_cherryshot/how-we-made-ai-product-photography-promptless-a-vision-pass-writes-the-prompt-not-the-user-2eg8</link>
      <guid>https://dev.to/gurleen_cherryshot/how-we-made-ai-product-photography-promptless-a-vision-pass-writes-the-prompt-not-the-user-2eg8</guid>
      <description>&lt;p&gt;Hi, I'm Gurleen, founder of CherryShot. We build AI product photography and video ads for e-commerce brands, and the design decision devs ask about most is that there is no prompt box anywhere in the product. I want to share how that works, because "promptless" is a technical claim, not a UX one.&lt;/p&gt;

&lt;p&gt;The core problem: brands upload terrible photos. A flat-lay on a bedsheet, a mannequin shot under office lights. If you hand that plus a user-written prompt to an image model, you get drift: wrong proportions, melted label text, a different product on the other end.&lt;/p&gt;

&lt;p&gt;Our pipeline instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A Gemini 3 Flash vision pass reads only the product in the upload, deliberately ignoring its background and styling. It returns a structured JSON shoot blueprint: category, material, cut, colour, finish, how the product is worn, then lighting design, surface, scene, a model brief, and an ordered list of art-directed shots with a camera angle each, sized to the requested set.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That blueprint, not the user's words, is what prompts the image model. Imagery runs on Nano Banana Pro at 2K for pro work and Gemini 3.1 Flash Image for volume, chosen per job at a router so cost per shot stays controlled.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hyperreal mode is a two-stage composite: Recraft V4.1 Pro builds the scene, the user approves it, then Nano Banana Pro composites the real product and model into the approved scene. Two stages is why geometry and label text hold on real catalogs where one-shot generation fails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;QC runs inside the pipeline. A vision checker reads finished ad-style frames and lists any third-party brand names or logos that are not on the product itself. A hit rejects the shot and regenerates with a hardened directive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Video is directed, not prompted: a Claude Opus creative director returns a schema-constrained storyboard (shot size, exactly one camera move per shot, subject binding to numbered reference images, a six-beat arc), length-budgeted to the video model's 4,000 character prompt cap, then rendered on ByteDance Seedance 2.0 across two providers with moderation retries and refund on failure.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is a REST API and an OAuth 2.0 MCP server, so Claude and other agents can generate campaign imagery directly (docs at cherryshot.mintlify.app).&lt;/p&gt;

&lt;p&gt;To be clear about limits: there are still shots where a traditional shoot wins, and I would rather say so than oversell. Ask me about a specific product category and I will tell you straight how the pipeline handles it.&lt;/p&gt;

&lt;p&gt;It is live at &lt;a href="https://cherryshot.ai" rel="noopener noreferrer"&gt;https://cherryshot.ai&lt;/a&gt;, first 5 shots free without a card. Happy to answer anything about the blueprint schema, the QC loop, or where this breaks.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>api</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
