<?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: Meridian Labs Software</title>
    <description>The latest articles on DEV Community by Meridian Labs Software (@leewilliam200).</description>
    <link>https://dev.to/leewilliam200</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%2F4129512%2Ff7ab0c58-2d50-4e62-952d-7bed8544eab4.png</url>
      <title>DEV Community: Meridian Labs Software</title>
      <link>https://dev.to/leewilliam200</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leewilliam200"/>
    <language>en</language>
    <item>
      <title>I built a plain-text "art director" so my AI images stop changing when I edit them</title>
      <dc:creator>Meridian Labs Software</dc:creator>
      <pubDate>Thu, 17 Sep 2026 09:13:37 +0000</pubDate>
      <link>https://dev.to/leewilliam200/i-built-a-plain-text-art-director-so-my-ai-images-stop-changing-when-i-edit-them-7o8</link>
      <guid>https://dev.to/leewilliam200/i-built-a-plain-text-art-director-so-my-ai-images-stop-changing-when-i-edit-them-7o8</guid>
      <description>&lt;p&gt;If you make images with AI, you know the specific pain: the first generation is easy. Editing it is where everything falls apart.&lt;/p&gt;

&lt;p&gt;I make YouTube thumbnails and playlist covers. I'd get a result I liked, ask to change one small thing — "make the jacket blue" — and get back a completely different picture. New face. New background. New lighting. The one thing I asked for, plus ten I didn't.&lt;/p&gt;

&lt;p&gt;After the hundredth time, I realized the problem isn't the model — it's the prompt. When you say "change the jacket," the model has no idea what you want to &lt;em&gt;keep&lt;/em&gt;, so it re-rolls the whole scene. The fix is to spell out, every time, what stays locked and what changes, in language the model actually follows.&lt;/p&gt;

&lt;p&gt;That's tedious by hand, so I turned it into a plain-text bundle you paste into ChatGPT or Claude. You describe what you want; it writes the &lt;em&gt;direction&lt;/em&gt; — one ready-to-paste prompt that says exactly what to preserve and what to change. No code, no API, nothing to install.&lt;/p&gt;

&lt;p&gt;Clearest example — same street photo, one instruction ("add falling snow"):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbsk6v790ec8rt8i0hsr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvbsk6v790ec8rt8i0hsr.jpg" alt="snow before and after" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The snow appears; the houses, the road, the parked vans stay exactly as they were. Most tools hand you a brand-new street.&lt;/p&gt;

&lt;p&gt;It can also diagnose a render that came out wrong — what's off, why, what to change, and what to keep:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frhib600hcsniv5w13foh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frhib600hcsniv5w13foh.gif" alt="diagnosis panel" width="719" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works (no magic):&lt;/strong&gt; it's plain-text reasoning, not a model or an integration. It works out how much detail a request needs, separates what's immutable from what you're changing, and phrases the result for the renderer (ChatGPT / GPT Image by default). Because ChatGPT re-renders the whole frame instead of inpainting, the trick is to restate the locked parts explicitly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honest limits:&lt;/strong&gt; it's tuned and tested on ChatGPT / GPT Image; the Midjourney, Gemini, Ideogram and FLUX profiles are starting points, not verified. And no prompt makes a whole-frame renderer do true local edits — it's a strong mitigation, not a guarantee.&lt;/p&gt;

&lt;p&gt;The free version is on GitHub and takes about a minute to try. There's a $19 one-time Pro bundle with the full preservation system, the edit-state ledger, precise single-element edits and deep diagnosis — but the free one shows the whole idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/leewilliam200/visual-director-lite" rel="noopener noreferrer"&gt;https://github.com/leewilliam200/visual-director-lite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would genuinely love feedback — especially where the "keep everything else the same" logic breaks for you. What's the one thing you always want an AI editor to preserve that it never does?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>chatgpt</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
