<?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: Merl Merl</title>
    <description>The latest articles on DEV Community by Merl Merl (@merl985).</description>
    <link>https://dev.to/merl985</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%2F4028925%2F309a350a-b9f4-41fb-b074-88d8a67eb019.png</url>
      <title>DEV Community: Merl Merl</title>
      <link>https://dev.to/merl985</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/merl985"/>
    <language>en</language>
    <item>
      <title>I Built an Anime Art Pipeline on a Node Canvas and Watched Every Handoff</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Tue, 11 Aug 2026 19:20:25 +0000</pubDate>
      <link>https://dev.to/merl985/i-built-an-anime-art-pipeline-on-a-node-canvas-and-watched-every-handoff-52c6</link>
      <guid>https://dev.to/merl985/i-built-an-anime-art-pipeline-on-a-node-canvas-and-watched-every-handoff-52c6</guid>
      <description>&lt;p&gt;If you have ever wired up a data pipeline, you already know the shape of this problem. Each stage transforms something and hands it to the next one. The interesting failures rarely happen inside a stage. They happen at the boundary, where one thing gets passed forward, and three other things quietly get dropped or silently inherited.&lt;/p&gt;

&lt;p&gt;I ran the same experiment on a creative task. I cannot draw, so I make anime characters with AI tools, and until recently my process was the manual version: generate, download, open the next tool, upload, retype the character description because the next tool has no idea who she is. The file crosses the boundary. State does not.&lt;/p&gt;

&lt;p&gt;So I rebuilt the whole thing on a node canvas, in PixAI Studio, and paid attention to exactly what crossed each edge.&lt;/p&gt;

&lt;h2&gt;
  
  
  The graph
&lt;/h2&gt;

&lt;p&gt;The finished workspace looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;character_sheet (imported)
    └── night_scene (text to image)
            ├── dawn_variant  (edit)
            └── clip          (image to video)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four nodes, three edges. A node is one step holding one asset. An edge means the output of the upstream node is the input of the downstream node. Nothing exotic, which is the point: the mental model is function composition, and the value is that intermediate results stay addressable instead of ending up in a downloads folder as &lt;code&gt;image (7).png&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The task
&lt;/h2&gt;

&lt;p&gt;Deliberately small, because a scoped task makes the measurement clean. Target output: a five-second looping wallpaper, widescreen, of an original fox spirit character sitting on shrine steps at night.&lt;/p&gt;

&lt;p&gt;That one sentence acted like a type signature. Widescreen ruled out a portrait frame. Looping ruled out one-directional motion, at least in theory. A seated pose ruled out anything busy. Writing it first is the equivalent of defining the contract before implementing against it.&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%2Fqotujy72ub38v3mgugps.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%2Fqotujy72ub38v3mgugps.jpg" alt=" " width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The graph as it rendered on the canvas. Every later node draws its input from an earlier one.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What crossed each boundary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Import to generation.&lt;/strong&gt; The character came from my own library rather than an upload, and it brought its full prompt, its model, and its frame shape along. Three of those four were useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generation to selection.&lt;/strong&gt; Four candidate images arrived inside the same node. Picking one is an explicit action, and it is the only step in the whole run where the tool cannot help you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Selection to edit.&lt;/strong&gt; The picked image appeared in the edit step's reference slot with no attachment step on my side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Selection to video.&lt;/strong&gt; Same thing. Dragging an edge out of the image node and choosing video created the downstream node with the source picture already bound.&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%2Fragvb7iibt08wpphr4ne.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%2Fragvb7iibt08wpphr4ne.jpg" alt=" " width="800" height="1133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Left column, what arrived by itself. Right column, what still needed a decision.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The three failures, which are the useful part
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Silent inheritance.&lt;/strong&gt; My character sheet was portrait. The scene node inherited that frame shape, and my widescreen wallpaper came out tall. Defaults propagating downstream is helpful right up to the moment a stage needs something different. Check the format at every node that produces something new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An overly broad transform.&lt;/strong&gt; I asked the edit step for one change, night to dawn. I got the light I asked for and a gate in the background that had not been there. Continuity across stages is real, and it has edges. Narrow instructions, verified one at a time, preserve more of what you already accepted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A spec that failed to constrain.&lt;/strong&gt; My clip does not loop cleanly, because falling leaves move in one direction and the last frame never meets the first. The bug is in the requirement, not in the video step. "Looping" was a word I wrote down without deciding what it excluded.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the graph is worth building
&lt;/h2&gt;

&lt;p&gt;The overhead pays off when one asset feeds several outputs, when you move from stills into motion, or when you want a process you can rerun next month without reconstructing it from memory. For a single standalone image, a plain generator is faster, and there is nothing to organize. Reach for the canvas at the point where your project has stages.&lt;/p&gt;

&lt;p&gt;Video generation also costs meaningfully more than image generation, which is a decent argument for putting the review gate before the expensive node rather than after it.&lt;/p&gt;

&lt;p&gt;The whole build took an afternoon and produced one five-second clip. What I came away with was a clearer map of which stages carry work forward and which ones quietly hand it back.&lt;/p&gt;

&lt;p&gt;If you want to try the same experiment, &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;start a workspace on PixAI&lt;/a&gt; and take one character all the way to a finished output. Watch the boundaries rather than the nodes.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>design</category>
    </item>
    <item>
      <title>The Version Matrix Problem in AI Character Art</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Wed, 05 Aug 2026 20:06:00 +0000</pubDate>
      <link>https://dev.to/merl985/the-version-matrix-problem-in-ai-character-art-2cp5</link>
      <guid>https://dev.to/merl985/the-version-matrix-problem-in-ai-character-art-2cp5</guid>
      <description>&lt;p&gt;Anyone who has managed dependencies will recognize the shape of this problem, even without touching an image generator.&lt;/p&gt;

&lt;p&gt;I spent an afternoon running the same original character through Midjourney and PixAI, and the interesting result had nothing to do with image quality. It was a compatibility matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test subject
&lt;/h2&gt;

&lt;p&gt;One character, described once in plain language: an adult woman in her mid-thirties, cropped ash grey hair with a thin braid, a scar through the left eyebrow, steel blue eyes, a brass monocle on a chain, a heavy navy coat with a high collar, a leather wrap on her right forearm, and a small brass clockwork falcon on her left shoulder.&lt;/p&gt;

&lt;p&gt;Eight checkable attributes. Same description on both platforms, no cherry-picking between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The matrix
&lt;/h2&gt;

&lt;p&gt;Midjourney's version dropdown, as of early August 2026, runs from 1 through 8.2, with 8.2 as the default since July 24. Below a divider sit the anime models: niji 7, niji 6, niji 5, niji 4. The compatibility that matters for character work looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feature                     available on
--------------------------  --------------------------------
current default model       8.2
anime models (niji)         stops at niji 7
Omni Reference (character)  version 7
Character Reference (old)   version 6
editor, pan, zoom           documented as running on 6.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read that as a dependency graph, and the problem is visible before you generate anything. The newest model, the anime models, and the character lock resolve to three different versions.&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%2Fk6onzrcy0177mjqqj9t1.png" 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%2Fk6onzrcy0177mjqqj9t1.png" alt=" " width="799" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the runtime actually does
&lt;/h2&gt;

&lt;p&gt;Three behaviors showed up in testing that the matrix alone does not tell you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loading a reference silently changes your model.&lt;/strong&gt; Midjourney's documentation states that adding a reference image runs the prompt in version 7. My reference runs came back in that model's rendering style rather than the painterly output the default model had produced minutes earlier. Nothing in the flow asks whether that tradeoff is acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The anime models reject the parameter outright.&lt;/strong&gt; Loading a reference on niji works, and then a line comes back saying niji does not support OW, the weight setting that controls reference strength. Style reference is offered instead, and a style reference transfers a look rather than an identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference state does not persist.&lt;/strong&gt; The reference has to be attached again for every run. I changed the scene, generated, and got a different woman: brown wavy hair instead of ash grey, different face, different age. Zero warnings, zero errors, just a batch produced without the input I assumed was still bound.&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%2Fqi3auztpnf5a433l6z8v.png" 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%2Fqi3auztpnf5a433l6z8v.png" alt=" " width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set up correctly, version 7 handled the character well across two scene changes. The hair, the build, and the coat carried over. The brass falcon arrived as an ordinary bird every time, and the clothing color drifted from run to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other path
&lt;/h2&gt;

&lt;p&gt;PixAI approaches this as one runtime rather than a matrix. You pick an anime model, Tsubaki.2 in my case, and the reference tools, the LoRA layer, and the editing tools sit in the same generation panel. A LoRA is a small add-on file trained over a base model that teaches it a style, a character, or a detail treatment, and the platform supports both community LoRAs and &lt;a href="https://blog.pixai.art/en/train-lora-on-pixai/" rel="noopener noreferrer"&gt;training your own&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The result I did not expect: running the same written description across three scenes with no reference image loaded produced the same person each time. Market at noon, workshop at night, rain on a pier. Different outfits, different expressions, and the identifying details held, brass fittings on the falcon included.&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%2Fai20s1y9g6gid1rrcof4.png" 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%2Fai20s1y9g6gid1rrcof4.png" alt=" " width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is imperfect. The scar migrated to her cheek in one image and coat details vary. What it removes is state management: nothing to re-attach, no version to switch, no feature that exists on one branch and not another.&lt;/p&gt;

&lt;h2&gt;
  
  
  When each one is the right call
&lt;/h2&gt;

&lt;p&gt;Midjourney remains excellent, and for single images or style exploration the version matrix never comes up, because you stay on one model and generate. Its aesthetic tooling is deeper than most, and it needs a paid subscription before the first image, starting at ten dollars a month.&lt;/p&gt;

&lt;p&gt;The matrix starts costing you when a character has to survive twenty images across six months. At that point, the question stops being which model renders better and becomes how much setup stands between you and image number twenty.&lt;/p&gt;

&lt;p&gt;If that is the work you are doing, &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;see how far one description gets you in PixAI&lt;/a&gt;. The &lt;a href="https://blog.pixai.art/en/ai-art-generator-quick-start/" rel="noopener noreferrer"&gt;quick start guide&lt;/a&gt; covers the interface basics.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>design</category>
    </item>
    <item>
      <title>The Most Downloaded Model Was the Wrong Dependency</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Tue, 04 Aug 2026 14:44:09 +0000</pubDate>
      <link>https://dev.to/merl985/the-most-downloaded-model-was-the-wrong-dependency-3hch</link>
      <guid>https://dev.to/merl985/the-most-downloaded-model-was-the-wrong-dependency-3hch</guid>
      <description>&lt;p&gt;Model libraries work like package registries. You search, you sort by popularity, you read the stars, you take the top result. That heuristic is good enough almost everywhere, so I used it, and it produced a worse result than doing nothing at all.&lt;/p&gt;

&lt;p&gt;Here is the run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spec
&lt;/h2&gt;

&lt;p&gt;The artifact under test is a character. It is written down, it does not exist as an image, and the description is the only source of truth. Seven assertions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;character&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bram&lt;/span&gt;
&lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;lockmaker&lt;/span&gt;
&lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;40s&lt;/span&gt;
&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;short, broad, barrel chest&lt;/span&gt;      &lt;span class="c1"&gt;# the load bearing one&lt;/span&gt;
&lt;span class="na"&gt;hair&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bald, geometric tattoo on left scalp&lt;/span&gt;
&lt;span class="na"&gt;beard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;copper red, two braids, brass ring on each&lt;/span&gt;
&lt;span class="na"&gt;eyewear&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;brass jeweler's loupe over right eye&lt;/span&gt;
&lt;span class="na"&gt;torso&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;leather apron with tool loops&lt;/span&gt;
&lt;span class="na"&gt;under&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;moss green tunic, teal embroidery&lt;/span&gt;
&lt;span class="na"&gt;belt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ring of brass keys&lt;/span&gt;
&lt;span class="na"&gt;arms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;studded leather bracers, old burn scars&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two environments, same spec, same target output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment A: resolve the dependency yourself
&lt;/h2&gt;

&lt;p&gt;The generator opens with a model already selected. Search the model library for "anime" and you get zero results, because the search is scoped to whichever ecosystem is currently active and the default ecosystem has no such model. There is a dropdown that sets that scope. Until you find it, every query runs against the wrong index.&lt;/p&gt;

&lt;p&gt;With the scope corrected, the top anime checkpoint reports over 450,000 downloads across its versions and a review score of Overwhelmingly Positive from almost 1,500 reviewers. By every signal a registry can give you, that is the correct resolution.&lt;/p&gt;

&lt;p&gt;Switching to it changed the runtime config underneath. A negative prompt field appeared, and the sampler, step count, and CFG scale all moved to new defaults.&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%2F6ppujlwo8moep83ycbiz.png" 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%2F6ppujlwo8moep83ycbiz.png" alt=" " width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decisions required before the second image:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Decision&lt;/th&gt;
&lt;th&gt;Discoverable from the UI?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Find the ecosystem dropdown&lt;/td&gt;
&lt;td&gt;Only after a failed search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Re-run the failed search&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Choose the model family&lt;/td&gt;
&lt;td&gt;Requires prior knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Search the checkpoints&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Choose a checkpoint&lt;/td&gt;
&lt;td&gt;Yes, by popularity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Choose its version&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Set CFG&lt;/td&gt;
&lt;td&gt;Yes, with a labelled preset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Set the sampler&lt;/td&gt;
&lt;td&gt;Yes, with a labelled preset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Set the steps&lt;/td&gt;
&lt;td&gt;Yes, with a labelled preset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Write a negative prompt&lt;/td&gt;
&lt;td&gt;Field appears, content is on you&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Item 3 is the interesting one. It is the only step where the interface cannot help, and it is the step that determines everything downstream.&lt;/p&gt;

&lt;p&gt;There is also a prompt-language change that costs zero clicks and matters more than any of the ten. Community anime checkpoints in this family are SDXL-derived and expect comma-separated tags. The spec had to be rewritten:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1boy, solo, male dwarf, adult man, 40 years old, stocky build,
broad shoulders, barrel chest, short stature, bald head,
dark geometric head tattoo on left side, long copper red beard,
braided beard, brass beard rings, brass jeweler's loupe over right eye,
brown leather apron, tool loops on apron, moss green tunic,
teal embroidered cuffs, ring of brass keys on belt, leather bracers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Negative prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;child, kid, young boy, teenager, youthful face, beardless,
tall, slender, thin body, feminine, 1girl, bad hands, bad anatomy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assertion&lt;/th&gt;
&lt;th&gt;Environment A, default model&lt;/th&gt;
&lt;th&gt;Environment A, top checkpoint&lt;/th&gt;
&lt;th&gt;Environment B&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;build: short, broad&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;fail&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bald + tattoo&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;beard braids + rings&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loupe over eye&lt;/td&gt;
&lt;td&gt;partial, held in hand&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;apron with tool loops&lt;/td&gt;
&lt;td&gt;fail&lt;/td&gt;
&lt;td&gt;fail&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moss green tunic&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;fail, torso bare&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;brass keys on belt&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;td&gt;pass&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two runs at two aspect ratios on the top checkpoint. The build assertion failed both times, with three positive tags asserting it and two negative tags excluding the opposite.&lt;/p&gt;

&lt;p&gt;The default model, resolved by nobody, satisfied it on the first run.&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%2F37s6nl1ikatldu9vkji9.png" 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%2F37s6nl1ikatldu9vkji9.png" alt=" " width="800" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the heuristic broke
&lt;/h2&gt;

&lt;p&gt;Popularity ranking optimizes for the median request. A checkpoint with 450,000 downloads is fine-tuned toward what most users generate, and a stocky forty-year-old tradesman sits outside that distribution. The registry sorted correctly. My input was out of sample, and nothing in the metadata exposes that, because the metadata describes adoption rather than coverage.&lt;/p&gt;

&lt;p&gt;This is the same failure mode as picking a library by GitHub stars for a use case its maintainers never targeted. The signal is real. It is measuring somebody else's requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment B: keep the default
&lt;/h2&gt;

&lt;p&gt;PixAI loads an anime model when the generator opens. I kept it, wrote the spec as prose instead of tags, set the aspect ratio, generated. Three decisions, one of which was the picture size.&lt;/p&gt;

&lt;p&gt;Worth noting for anyone moving between the two: this model is a DiT architecture rather than SDXL, so there is no negative prompt field and no bracket weight syntax like &lt;code&gt;(tag:1.3)&lt;/code&gt;. Exclusions go in the positive prompt as plain statements. If you carry an SDXL prompt across unchanged, the weights are ignored silently.&lt;/p&gt;

&lt;p&gt;All seven assertions passed. From there, three scene variants ran on random seeds with only the scene clause swapped, and the character held across all of them without a reference image and without a locked seed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;  A bald dwarf man in his forties, short and broad, copper red beard
  in two braids each bound with a brass ring, dark geometric tattoo...
&lt;span class="gd"&gt;- Plain warm grey studio backdrop, even neutral lighting.
&lt;/span&gt;&lt;span class="gi"&gt;+ Walking across a stone bridge market at night, lit lanterns overhead.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One extra observation on LoRAs, since it is the same class of bug. My first pick drifted the entire palette, and its page explained why: it was trained on a different base model from the one I was running. Base model is the compatibility field. Read it first. My second pick matched and still carried its own aesthetic, which is what the strength value is there to attenuate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Registry rank answers "what do most people use." It does not answer "what satisfies my spec." When your input is unusual, the default that ships with the tool is a legitimate baseline, and the cheapest experiment you can run is to try it before you spend ten decisions replacing it.&lt;/p&gt;

&lt;p&gt;The finished artifact was a character sheet: three views, three scenes, three detail crops, all resolved from one paragraph.&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%2F8zofept67iwvno0ba5mv.png" 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%2F8zofept67iwvno0ba5mv.png" alt=" " width="800" height="1018"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to try this with a character of your own, &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;you can start here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Symmetry Is the Default Your Character Spec Has to Survive</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Sat, 01 Aug 2026 08:39:30 +0000</pubDate>
      <link>https://dev.to/merl985/symmetry-is-the-default-your-character-spec-has-to-survive-14ic</link>
      <guid>https://dev.to/merl985/symmetry-is-the-default-your-character-spec-has-to-survive-14ic</guid>
      <description>&lt;p&gt;Character consistency in image generation is usually discussed as an aesthetic problem. I find it more useful to treat it as a contract problem: I hand a model a specification, and I want to know whether the specification survives a change of inputs. So I built a spec with a deliberate failure mode and ran it through two anime image models on the same day.&lt;/p&gt;

&lt;p&gt;The failure mode is symmetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spec
&lt;/h2&gt;

&lt;p&gt;Seven attributes, written once, held constant across every run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;character: Shiori
hair:        jet-black, low knot at the nape
hair_pin:    single thin gold pin, through the knot
eyes:        pale grey
face_mark:   small beauty mark, below RIGHT eye
outfit:      black high-collared tailcoat, gold piping, burgundy lining
shirt:       white wing-collar, burgundy ribbon tie
glove:       LEFT hand only
ring:        gold, RIGHT index finger, on bare skin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F2zayim50vnzkw4uqaavd.png" 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%2F2zayim50vnzkw4uqaavd.png" alt=" " width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five of these are cheap. Hair color, eye color, and a palette are the kind of thing a diffusion model reproduces almost by accident, because they are global properties of the image.&lt;/p&gt;

&lt;p&gt;Two of them are expensive, and they are the assertions that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;glove_hand == LEFT and ring_hand == RIGHT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;face_mark_side == RIGHT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are asymmetric. Asymmetry is the interesting test because symmetry is the prior. A model that has stopped tracking your description will not produce noise; it will produce the average, and the average of "one glove" is either two gloves or none, or both attributes collapsed onto whichever hand it happened to render.&lt;/p&gt;

&lt;p&gt;There is a third assertion that turned out to matter more than I expected, and I did not write it down at first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;both_hands_in_frame == true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An attribute you cannot see is an attribute you cannot verify, and a model that crops the frame has silently deleted your test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test 1: baseline, prompt only
&lt;/h2&gt;

&lt;p&gt;Model A is the Niji Journey model, currently Niji 7. Model B is Tsubaki.2 on PixAI, a diffusion transformer, which matters later because bracket weight syntax like &lt;code&gt;(tag:1.3)&lt;/code&gt; works on SDXL-family models and does nothing on a DiT.&lt;/p&gt;

&lt;p&gt;Both baselines passed the expensive assertion. Glove and ring landed on separate hands. Model A mirrored the sides, which is a known and boring class of failure. Model B put them where the spec said.&lt;/p&gt;

&lt;p&gt;Baseline passing is worth stating plainly, because a lot of comparisons stop here and declare a winner on the strength of a first render. First renders are the easy case. The prompt is doing all the work and nothing has been asked to persist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test 2: change the inputs, keep the spec
&lt;/h2&gt;

&lt;p&gt;New outfit, new environment, same seven attributes carried into the prompt verbatim: heavy overcoat, knit scarf, rain-slicked street at dusk, full body.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;glove/ring separated&lt;/th&gt;
&lt;th&gt;both hands in frame&lt;/th&gt;
&lt;th&gt;unrequested additions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2a&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;no, merged onto one hand&lt;/td&gt;
&lt;td&gt;no, waist-up crop&lt;/td&gt;
&lt;td&gt;gold hoop earring&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2b&lt;/td&gt;
&lt;td&gt;A, identical prompt&lt;/td&gt;
&lt;td&gt;no, merged onto one hand&lt;/td&gt;
&lt;td&gt;no, waist-up crop&lt;/td&gt;
&lt;td&gt;gold hoop earring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Run 2b is the useful one. I repeated 2a byte for byte specifically to find out whether the failure was stochastic or deterministic in effect, and it reproduced. That distinction is the whole engineering point:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A stochastic failure is a retry problem. Loop until green.&lt;/li&gt;
&lt;li&gt;A reproducible failure is an input problem. The same prompt will produce the same misreading indefinitely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;both_hands_in_frame&lt;/code&gt; assertion failing is what caused the primary assertion to fail. With one hand cropped out, the model had one surface for two mutually exclusive attributes and merged them. My spec had a hole in it, and the tool found the hole.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test 3: reference as input
&lt;/h2&gt;

&lt;p&gt;At this point the correct move is to stop describing the character and start passing it. Model A exposes a &lt;code&gt;Character Reference&lt;/code&gt; control. On Niji 7 it renders disabled, and clicking it emits nothing, no error, no tooltip, no explanation. The references panel offers an image prompt and a style reference.&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%2Fdmteyqu73i7bqwb1l9g3.png" 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%2Fdmteyqu73i7bqwb1l9g3.png" alt=" " width="624" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I used the image prompt, feeding the passing baseline back in at default weight.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Input&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3a&lt;/td&gt;
&lt;td&gt;baseline image as image prompt&lt;/td&gt;
&lt;td&gt;face fidelity best of all runs, palette bled (jacket lining reappeared as a turtleneck), glove/ring still merged, still cropped&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the finding I care about. The reference improved everything that is a global property of the image and improved nothing that is a discrete fact about the subject. Treating "reference image" as a single capability is a mistake. There are at least two different contracts hiding under that label, and only one of them carries a specification.&lt;/p&gt;

&lt;p&gt;Model B routes this through a separate model rather than a flag on the generation model, which is an implementation detail with a real consequence: the character is created on an anime model and then carried by a reference model, so a style shift between the two is expected rather than a bug. It accepts up to ten reference inputs, which fits how character sheets work, since a character is a set of angles rather than one canonical frame.&lt;/p&gt;

&lt;p&gt;Across three scene changes on Model B, the face, the knot, and the gold pin held.&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%2Fzql50aetxya7wydwi2zq.png" 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%2Fzql50aetxya7wydwi2zq.png" alt=" " width="800" height="1357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test 4: adding a LoRA, and its cost
&lt;/h2&gt;

&lt;p&gt;A LoRA is a low-rank adapter, a small set of weights trained on top of a base model. I added a community adapter built for eye rendering, typed its trigger words into an otherwise unchanged prompt, and ran it at &lt;code&gt;0.7&lt;/code&gt;.&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%2Fgx3cbdnbdu5xl409r5nj.png" 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%2Fgx3cbdnbdu5xl409r5nj.png" alt=" " width="799" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It delivered the eye treatment. It also softened the face geometry and added bangs that appear nowhere in the spec. At 0.7, the adapter reached past style and into identity.&lt;/p&gt;

&lt;p&gt;The generalizable rule: an adapter is a weighted intervention on the same latent space your character occupies, so strength is a tradeoff between the effect you want and the subject you are trying to preserve. If identity is the priority, the weight is the first knob to turn down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I take from this
&lt;/h2&gt;

&lt;p&gt;Three things transfer to anything you build on top of image models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Put an asymmetric assertion in your spec.&lt;/strong&gt; It is a one-token change, and it converts a subjective "does this look like her" into a boolean. Symmetric attributes will pass even when the model has stopped listening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assert your frame.&lt;/strong&gt; An attribute outside the crop is untested, and an untested attribute fails silently. Naming the framing explicitly fixed more for me than any prompt-weight trick.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distinguish description from identity.&lt;/strong&gt; A prompt is a description and descriptions are satisfiable by more than one subject. Persistence needs the character passed as data, either as reference input or as trained weights. Anything short of that is a retry loop with a fixed point in the wrong place.&lt;/p&gt;

&lt;p&gt;The tooling question resolves along the same line. If the deliverable is one image, the model with the better first render wins, and in my runs that was Model A. If the deliverable is the same subject across many images, what matters is whether the platform gives you a path to pass identity as data, and that is why the second half of my day happened on &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;PixAI&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>testing</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I Deleted the Seed and My Character Still Reproduced Five Times</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Tue, 28 Jul 2026 19:14:18 +0000</pubDate>
      <link>https://dev.to/merl985/i-deleted-the-seed-and-my-character-still-reproduced-five-times-1ige</link>
      <guid>https://dev.to/merl985/i-deleted-the-seed-and-my-character-still-reproduced-five-times-1ige</guid>
      <description>&lt;p&gt;Reproducibility in image generation usually gets treated as a seed problem. Lock the seed, get the same output. It works, and it also hides how little you know about the rest of your setup.&lt;/p&gt;

&lt;p&gt;I spent a few days probing that on a small scale, because I write anime character work and I need the same character back on demand. The result changed how I think about where my prompts actually live.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;I treated one character as a spec with seven fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ash-grey hair, asymmetric undercut on the left&lt;/li&gt;
&lt;li&gt;amber eyes, thin ring pattern in the iris&lt;/li&gt;
&lt;li&gt;a small dark metal panel set into the left temple&lt;/li&gt;
&lt;li&gt;faint seam lines along the neck&lt;/li&gt;
&lt;li&gt;charcoal flight suit, burnt orange stripes on the sleeves&lt;/li&gt;
&lt;li&gt;heavy chest harness with metal buckles&lt;/li&gt;
&lt;li&gt;slim armored plate on the left forearm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first three and the fourth are the interesting ones. Hair and clothing are coarse features that almost anything will approximate. A nine-word clause about a panel on someone's temple is a fine-grained field, and fine-grained fields are where systems fail quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test one: remove the seed
&lt;/h2&gt;

&lt;p&gt;Standard assumption: without a locked seed, output drifts.&lt;/p&gt;

&lt;p&gt;I ran the spec five times with the seed left free, on an anime-tuned DiT model, changing nothing else. All five came back with the undercut, the amber eyes, the temple panel, the harness and the forearm plate. Pose, camera angle, background and lighting varied every time.&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%2Fh5js6jb4t453p8twyd2o.png" 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%2Fh5js6jb4t453p8twyd2o.png" alt="Four generations from four different random seeds" width="799" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One field wavered: the neck seams, the faintest thing in the spec, rendered lightly and inconsistently.&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%2Fk9pu7achckv95p0dob3d.png" 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%2Fk9pu7achckv95p0dob3d.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For contrast, the same scene from a fourteen-word prompt of the kind most people start with produced a competent pilot with no relationship to the spec at all.&lt;/p&gt;

&lt;p&gt;So the seed governs composition, and the written spec governs identity. If you want the same character, you are not looking for a seed, you are looking for a spec detailed enough to survive sampling noise. Vague fields do not survive. "Futuristic details" would have produced five different characters. "A small dark metal panel set into his left temple" produced the same one five times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test two: change the model underneath
&lt;/h2&gt;

&lt;p&gt;Same spec, character reference image attached, moved to a model built on SDXL rather than the DiT family.&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%2F8c2p44z83jiogvcg4p9i.png" 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%2F8c2p44z83jiogvcg4p9i.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The coarse fields survived. The temple panel and the neck seams dropped out. So did the scene: I had asked for an open airfield at dusk and got an abstract dark background with drifting embers.&lt;/p&gt;

&lt;p&gt;Nothing was broken. SDXL-lineage models grew up on short keyword tags and read long written descriptions less closely than DiT models do. My spec was written for one runtime and executed on another without adaptation.&lt;/p&gt;

&lt;p&gt;This is coupling, and it is easy to miss because the failure is graceful. The output is still a good image. It is just not your character, and if you are not checking specific fields, you will not notice until twenty images later when the panel is gone from all of them.&lt;/p&gt;

&lt;p&gt;The settings tell the same story. On Tensor.Art, a model marketplace with a community library running into the thousands, I watched the workspace default to nine sampling steps at a CFG of 1, then offer a completely different sampler, CFG, and clip skip the moment I selected a community checkpoint. Those values belong to the model, not to you. A library of thousands of checkpoints is also thousands of small relearnings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test three: condition on a reference
&lt;/h2&gt;

&lt;p&gt;Then the same spec and the same reference image, on a model built specifically for reference conditioning.&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%2Fxnxwlhu4c74c8dgpgkmr.png" 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%2Fxnxwlhu4c74c8dgpgkmr.png" alt=" " width="799" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The airfield came back, hangars and a parked jet included. The temple panel came back. What changed was the render: softer and warmer than the flat cel look of the other runs, an accent the model brings with it.&lt;/p&gt;

&lt;p&gt;So the recovery worked, and it cost me stylistic control. That is a reasonable trade when you know you are making it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What generalises
&lt;/h2&gt;

&lt;p&gt;Three things I would now tell anyone building on top of image generation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specificity beats determinism.&lt;/strong&gt; A precise written spec survived random sampling better than I expected. If you need repeatability, invest in the spec before you invest in seed management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your prompt is coupled to a model family.&lt;/strong&gt; Prompt style, weighting syntax and parameter defaults are all model-scoped. Treat a model swap the way you would treat a runtime upgrade, with a regression check on the fields you care about, rather than a drop-in replacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test the smallest field, not the overall impression.&lt;/strong&gt; Coarse features hide regressions. The temple panel was a better test signal than the whole character, because it failed first and it failed silently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leaves platform choice
&lt;/h2&gt;

&lt;p&gt;For the anime work I do, this pushed me toward a character-first platform rather than a model-first one.&lt;/p&gt;

&lt;p&gt;A model marketplace is a deep resource, and if exploring models is the work you enjoy, it is the right place to be. If the work you enjoy is the character, then every model swap is a tax you pay in relearning, and a platform that fixes the runtime and lets you iterate on the spec gets you further per hour.&lt;/p&gt;

&lt;p&gt;Either way, write the spec down. It is the only part of the setup that is portable.&lt;/p&gt;

&lt;p&gt;If you want to try the character-first version of this, &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;PixAI is where I ran the tests&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>experiment</category>
      <category>learning</category>
    </item>
    <item>
      <title>I ran the same character spec through two AI art platforms. Only one gave me reproducible output.</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Mon, 27 Jul 2026 17:30:09 +0000</pubDate>
      <link>https://dev.to/merl985/i-ran-the-same-character-spec-through-two-ai-art-platforms-only-one-gave-me-reproducible-output-3b98</link>
      <guid>https://dev.to/merl985/i-ran-the-same-character-spec-through-two-ai-art-platforms-only-one-gave-me-reproducible-output-3b98</guid>
      <description>&lt;p&gt;Prompting an image model is closer to calling an API with no schema, no types, and no guarantee that the same input returns the same shape twice. You send a string. You get back something. Whether it matches what you asked for is a matter of negotiation.&lt;/p&gt;

&lt;p&gt;I wanted to measure that negotiation, so I set up a small controlled test across two platforms: OpenArt, a general-purpose creative suite, and PixAI, which does image generation for anime and little beyond it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spec
&lt;/h2&gt;

&lt;p&gt;The subject is an original character. Treat her as a fixture with required fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;character&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;Rin&lt;/span&gt;
&lt;span class="na"&gt;hair_color&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s"&gt;deep indigo&lt;/span&gt;
&lt;span class="na"&gt;hair_accent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;single teal streak, left side&lt;/span&gt;
&lt;span class="na"&gt;eyes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;          &lt;span class="s"&gt;warm amber&lt;/span&gt;
&lt;span class="na"&gt;top&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;           &lt;span class="s"&gt;oversized cream knit hoodie&lt;/span&gt;
&lt;span class="na"&gt;under&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;         &lt;span class="s"&gt;white collared shirt&lt;/span&gt;
&lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s"&gt;plain studio&lt;/span&gt;
&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;         &lt;span class="s"&gt;clean cel-shaded anime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F4fmq1o1bfj41se5dn3h5.png" 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%2F4fmq1o1bfj41se5dn3h5.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The spec rendered on the anime-native platform. Every character image in this post comes from PixAI, since free-tier output on the other platform arrives watermarked.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two of those fields are the assertions that matter. &lt;code&gt;hair_accent&lt;/code&gt; is deliberately fussy, because a single streak against a dark base is the first thing a model smooths away when it stops reading carefully. &lt;code&gt;background: plain&lt;/code&gt; is a negative constraint in disguise: it asks the model to add nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test conditions
&lt;/h2&gt;

&lt;p&gt;Both platforms ran on their free plans. On the anime-focused one I also stayed in the lowest quality mode available, since benchmarking one service on its free tier and the other on premium settings would invalidate the comparison before it started.&lt;/p&gt;

&lt;p&gt;Two runs per platform. The first used the spec as written. The second reinforced &lt;code&gt;hair_accent&lt;/code&gt; with stronger, more explicit wording, on the theory that the first failure was a prompt problem rather than a model problem.&lt;/p&gt;

&lt;p&gt;Small sample, and I am reporting it as one. The point is the failure mode, rather than a benchmark score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run 1: the general-purpose platform
&lt;/h2&gt;

&lt;p&gt;The platform itself is a serious piece of engineering. One account covers image generation across a large model roster, video, navigable 3D scenes, audio, a chat-driven shot sequencer, custom model training, and a full editing suite. Think of it as a monorepo with every tool vendored in: enormous surface area, one dependency to manage.&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%2Fkjrf8e92aseyyibnpoee.png" 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%2Fkjrf8e92aseyyibnpoee.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The left rail alone carries Director, Video, Image, World, Character, and Audio. That is the all-in-one promise in one column.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Finding anime inside it took some scrolling. A single checkpoint is built for the style, surrounded by models tuned for photography, portraits, and product work.&lt;/p&gt;

&lt;p&gt;Style output passed. Both runs returned clean cel-shaded anime with no drift toward semi-realism, which is the usual failure for general models attempting this style.&lt;/p&gt;

&lt;p&gt;Field-level assertions failed:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Run 1&lt;/th&gt;
&lt;th&gt;Run 2 (reinforced)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hair_accent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;collapsed to a single color&lt;/td&gt;
&lt;td&gt;overcorrected, teal scattered throughout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;background&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;full outdoor scene&lt;/td&gt;
&lt;td&gt;full outdoor scene&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;under&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;absent&lt;/td&gt;
&lt;td&gt;present, wrong color&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unrequested elements&lt;/td&gt;
&lt;td&gt;ice cream cone&lt;/td&gt;
&lt;td&gt;ice cream cone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The reinforced run is the interesting one. Strengthening the constraint produced a different inaccuracy in the opposite direction rather than accuracy. That behaves less like an under-specified request and more like a model optimizing for aesthetic plausibility over literal compliance.&lt;/p&gt;

&lt;p&gt;The ice cream cone appearing in both runs, unrequested, is the same class of problem: the model has priors about what belongs in a picture, and those priors outrank your input.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structural finding
&lt;/h2&gt;

&lt;p&gt;This one mattered more than any single output.&lt;/p&gt;

&lt;p&gt;On that anime checkpoint, the reference-image input was unavailable. Reference support lives on the general-purpose models instead.&lt;/p&gt;

&lt;p&gt;Splitting capabilities across models is normal, and the anime-focused platform does it too. The question is what you give up at the boundary. Here, moving to a reference-capable model means moving to a general-purpose one, which means abandoning the style tuning you selected the checkpoint for. It is the equivalent of a library where the typed interface and the async interface are mutually exclusive: both exist, and you cannot have both at once.&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%2Fkm8vcr6cx3injtk0aib1.png" 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%2Fkm8vcr6cx3injtk0aib1.png" alt=" " width="298" height="658"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The comparison case: on PixAI the reference slot sits above the model tiles, and the reference-capable models are anime-tuned as well.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Run 2: the narrow platform
&lt;/h2&gt;

&lt;p&gt;Same spec, anime-native model, lowest quality tier, free plan.&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%2Fyhcyfd779rgkod4l25j3.png" 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%2Fyhcyfd779rgkod4l25j3.png" alt=" " width="660" height="898"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Mode set to Lite, no style preset, an anime model selected, community add-on models stacked below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then I mutated the non-identity fields and held the identity fields constant, which is the actual production case. Three variants: plain studio, school uniform in a lit classroom, summer dress in a park.&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%2F910xkp1yaayvneckwpq0.png" 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%2F910xkp1yaayvneckwpq0.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Three variants, identity fields held constant. Hoodie to school blazer to summer dress, same face.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The identity fields held across all three. Hair color, the teal accent, and eye color survived scene changes that shared nothing in common. What drifted was framing rather than identity: the park variant returned at a tighter crop and a different angle than specified.&lt;/p&gt;

&lt;p&gt;That is the correct failure mode. Composition drifting while identity holds is recoverable, because you can re-roll a crop. Identity drifting while composition holds means the character is gone, and no amount of re-rolling gets that specific person back.&lt;/p&gt;

&lt;p&gt;Worth noting that this came from the base model and a consistent prompt, before reaching for reference tools or a trained character model. Both exist on that platform, both anime-tuned, so escalating does not cost you the style.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Both platforms generate good anime images. The comparison is about surface area, not quality.&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%2Fvypu8pd8xgfxlnjmejrh.png" 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%2Fvypu8pd8xgfxlnjmejrh.png" alt=" " width="800" height="711"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;My own summary of the workflow axes, from model access to reference tools and best-fit users.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A broad platform is the right call when your output spans formats: video, ads, product visuals, storyboards. Consolidation is real value and the tooling is strong.&lt;/p&gt;

&lt;p&gt;A narrow platform wins when you have one recurring problem and want the entire toolchain aimed at it. In this case that problem is character consistency, and the difference showed up in whether the specialized tools sat beside the specialized model or across a boundary from it.&lt;/p&gt;

&lt;p&gt;If you maintain a recurring character, write yourself a spec like the one above, pick your two fussiest fields, and run it twice on whatever you use now. The result will tell you more than any feature matrix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;Try PixAI&lt;/a&gt; if you want to run the test on the anime-native side.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I Built One Anime Character on SeaArt and PixAI, and the Workflow Gap Was the Real Result</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Sun, 26 Jul 2026 18:47:42 +0000</pubDate>
      <link>https://dev.to/merl985/i-built-one-anime-character-on-seaart-and-pixai-and-the-workflow-gap-was-the-real-result-3mfa</link>
      <guid>https://dev.to/merl985/i-built-one-anime-character-on-seaart-and-pixai-and-the-workflow-gap-was-the-real-result-3mfa</guid>
      <description>&lt;p&gt;If you have spent any time in local image generation, you already know the SeaArt stack by heart even if you have never opened it. It sits on top of the Stable Diffusion ecosystem: SD 1.5, SDXL, Illustrious, Pony, plus ComfyUI node graphs, LoRA training, ControlNet, and booru-tag prompting with numeric weights. It is the everything-drawer of anime generation.&lt;/p&gt;

&lt;p&gt;PixAI comes from a different design point. It is anime-first, built around its own models, with a short curated model list and natural-language prompting instead of a tag grammar. Its flagship, Tsubaki.2, is a DiT model, which matters more than it sounds like it should.&lt;/p&gt;

&lt;p&gt;I wanted a clean, controlled comparison, so I held the variable that usually ruins these tests constant: the character. One spec, run through both stacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test subject
&lt;/h2&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%2F0jtmfh8g9n05s5mshc18.png" 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%2F0jtmfh8g9n05s5mshc18.png" alt=" " width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A single OC, defined tightly: light blonde hair, one thin braided strand, aquamarine eyes, a small gold star hairclip, an oversized off-white cardigan, a gold star pendant. Fine, specific details, which is exactly where model drift shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompting: two different grammars
&lt;/h2&gt;

&lt;p&gt;This is the first thing a developer notices. The two stacks do not take the same input.&lt;/p&gt;

&lt;p&gt;On SeaArt I used the most-used anime model, Mistoon_Anime on an Illustrious base, with booru tags and a negative prompt, the way SDXL-family models expect. Numeric emphasis like &lt;code&gt;(gold star hair ornament:1.3)&lt;/code&gt; is valid syntax there, because SDXL and SD 1.5 parse bracket weights.&lt;/p&gt;

&lt;p&gt;On PixAI's Tsubaki.2, that same syntax is a trap. DiT models do not read numeric bracket weights the way SDXL does, and Tsubaki.2 leans on the positive prompt for quality and content rather than a negative one. You describe what you want in plain language. So the "same" prompt is really two dialects of the same intent.&lt;/p&gt;

&lt;p&gt;That difference alone is worth knowing before you benchmark anything, because a tag-weighted prompt tuned for Illustrious will quietly underperform on a DiT model, and you will blame the model instead of the grammar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&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%2Fu56ob3u9hkqt182o46wd.png" 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%2Fu56ob3u9hkqt182o46wd.png" alt=" " width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same character, one batch of four each.&lt;/p&gt;

&lt;p&gt;SeaArt's Illustrious model returned a clean, finished image fast. It also imposed its house style: the gold clip rendered red, and per-image details drifted across the batch. The tag prompt had compressed "small gold star clip" down to a star ornament, and the model filled the unstated color in on its own, differently in every image.&lt;/p&gt;

&lt;p&gt;Tsubaki.2, given a plain-language description that spelled the gold out, held the design on the first pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that matters for a character pipeline
&lt;/h2&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%2Ftx7ms1m1mioh1g8eoi9f.png" 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%2Ftx7ms1m1mioh1g8eoi9f.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One good image is a weak signal. The real question for OC work is reproducibility: can you get the same character back under a changed prompt? I changed her expression, then changed the whole scene. She held. For a permanent lock, PixAI also supports training a character LoRA on your own image set, which turns the OC into a callable asset instead of something you re-roll every session.&lt;/p&gt;

&lt;h2&gt;
  
  
  SeaArt vs PixAI, as a table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Axis&lt;/th&gt;
&lt;th&gt;SeaArt&lt;/th&gt;
&lt;th&gt;PixAI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base stack&lt;/td&gt;
&lt;td&gt;SD 1.5 / SDXL / Illustrious / Pony&lt;/td&gt;
&lt;td&gt;In-house; Tsubaki.2 is DiT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompting&lt;/td&gt;
&lt;td&gt;Booru tags, numeric weights, negative prompt&lt;/td&gt;
&lt;td&gt;Natural language, positive-driven on DiT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model choice&lt;/td&gt;
&lt;td&gt;Hundreds of community checkpoints&lt;/td&gt;
&lt;td&gt;Short curated list, plus a Market&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control surface&lt;/td&gt;
&lt;td&gt;ComfyUI nodes, ControlNet, img2img&lt;/td&gt;
&lt;td&gt;Character reference, Quick vs Professional&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;All-in-one: image, video, chat, editing&lt;/td&gt;
&lt;td&gt;Anime and illustration, with image-to-video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Tinkerers who want maximum surface area&lt;/td&gt;
&lt;td&gt;Beginners and OC creators who want a short path&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  So which one
&lt;/h2&gt;

&lt;p&gt;If you like living in ComfyUI and treating generation as a pipeline you build, SeaArt is the deeper sandbox, and this whole post is beside the point for you. If you want to define a character once and get it back reliably without managing a model zoo, an anime-first tool with a DiT backbone and reference tooling is the shorter path. For a beginner asking for a SeaArt alternative, that is usually the honest recommendation.&lt;/p&gt;

&lt;p&gt;You can try PixAI here: &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;https://eap.pixai.art/go/balazs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>stablediffusion</category>
      <category>anime</category>
      <category>beginners</category>
    </item>
    <item>
      <title>One Character, a Whole Summer: Reusing Anime Prompts Like Function Calls</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Thu, 23 Jul 2026 08:44:50 +0000</pubDate>
      <link>https://dev.to/merl985/one-character-a-whole-summer-reusing-anime-prompts-like-function-calls-4897</link>
      <guid>https://dev.to/merl985/one-character-a-whole-summer-reusing-anime-prompts-like-function-calls-4897</guid>
      <description>&lt;p&gt;Most "AI art prompt" lists are a pile of disconnected one-shots. I wanted something closer to how you reuse code: one base prompt, a swappable parameter, and a reproducible way to keep the same character across every run.&lt;/p&gt;

&lt;p&gt;So I ran a small experiment over a weekend. One original character, four summer scenes, one variable changed at a time. Here is the setup, the prompts, and what moved the output.&lt;/p&gt;

&lt;p&gt;I used PixAI, a browser-based, anime-first generator, but the method transfers to any model. If it is new to you, the &lt;a href="https://blog.pixai.art/en/how-to-use-pixai-guide/" rel="noopener noreferrer"&gt;beginner's guide&lt;/a&gt; covers the panel and settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup: treat the character as a variable
&lt;/h2&gt;

&lt;p&gt;Think of a prompt as a function call. Most of it is fixed scaffolding (scene, lighting, shot type, style), and one part is the argument you vary: the character description. Keep that part isolated and you can reason about changes instead of guessing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1girl, &amp;lt;CHARACTER DESCRIPTION&amp;gt;, &amp;lt;scene&amp;gt;, &amp;lt;shot type&amp;gt;, &amp;lt;lighting&amp;gt;, anime style, &amp;lt;palette&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap &lt;code&gt;&amp;lt;CHARACTER DESCRIPTION&amp;gt;&lt;/code&gt; for your own OC and leave the rest alone. That one discipline is what turns a prompt list into a reusable set.&lt;/p&gt;

&lt;h2&gt;
  
  
  A model detail worth knowing
&lt;/h2&gt;

&lt;p&gt;If you come from Stable Diffusion, one gotcha. Numeric tag weighting like &lt;code&gt;(silver hair:1.3)&lt;/code&gt; is an SDXL / SD1.5 convention. On a DiT model such as PixAI's Tsubaki.2 it does nothing, so you steer with plain descriptions and word order instead of weights. It is the same failure mode as calling an API with a query param it silently ignores: confirm what the model honors before you build on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four scenes
&lt;/h2&gt;

&lt;p&gt;Same character, four settings. Copy a block, replace the character line, and run.&lt;/p&gt;

&lt;p&gt;Beach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1girl, honey-blonde hair in a ponytail, aqua-green eyes, light blue summer sundress, wide-brim straw hat, cowboy shot, sunny sandy beach, turquoise ocean, clear blue sky, soft summer sunlight, anime style, warm bright colors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fq2nl1li3hd0ldh6rdmef.png" 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%2Fq2nl1li3hd0ldh6rdmef.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Night festival:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1girl, honey-blonde hair in a side ponytail with a ribbon, floral summer yukata, holding a round paper fan, cowboy shot, lively festival street at night, food stalls and glowing paper lanterns, warm bokeh lights, anime style, festive summer evening
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fomeptg2kyrc31acqfrih.png" 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%2Fomeptg2kyrc31acqfrih.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fireworks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1girl, honey-blonde hair in a ponytail, summer yukata, seen from behind looking back over her shoulder, medium shot, riverbank at night, large colorful fireworks in the dark sky, floating lanterns on the water, glowing reflections, anime style, deep blue and warm gold tones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fxnd3nqe38h9nkurk9hu0.png" 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%2Fxnd3nqe38h9nkurk9hu0.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thumbnail:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1girl, short coral-pink bob, star hair clip, big energetic smile, close up, facing the viewer, bright summer background with palm leaves and blue sky, punchy saturated colors, empty space on one side for text, anime style, eye-catching thumbnail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fkt8pnnrfdlyf9517awjk.png" 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%2Fkt8pnnrfdlyf9517awjk.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What moved the output
&lt;/h2&gt;

&lt;p&gt;Changing one variable at a time made cause and effect readable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shot type is a real control.&lt;/strong&gt; &lt;code&gt;cowboy shot&lt;/code&gt;, &lt;code&gt;close up&lt;/code&gt;, and &lt;code&gt;wide shot&lt;/code&gt; change how much of the scene renders. The &lt;a href="https://blog.pixai.art/en/ai-art-composition-beyond-prompts/" rel="noopener noreferrer"&gt;composition breakdown&lt;/a&gt; covers each one and when to use it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give the hands a job.&lt;/strong&gt; A paper fan or a candy apple in the hands cut down finger artifacts more than any negative wording did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backlight the subject at night.&lt;/strong&gt; Keeping the character slightly backlit kept the fireworks the brightest element and stopped the face from competing with the sky.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference image equals reproducibility.&lt;/strong&gt; To hold the same face across all four scenes, I fed one good result back in as a reference. That is your fixture. Without it, each run drifts into a slightly different person.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Prompt reuse is a discipline, not a library. Fix the scaffolding, isolate the character variable, pin consistency with a reference image, and a handful of base prompts covers a whole season.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;Try the setup in PixAI&lt;/a&gt; and swap in your own character.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>anime</category>
      <category>prompts</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>You Don't Need to Build Stable Diffusion to Make Anime Art</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Wed, 22 Jul 2026 12:03:18 +0000</pubDate>
      <link>https://dev.to/merl985/you-dont-need-to-build-stable-diffusion-to-make-anime-art-3h3m</link>
      <guid>https://dev.to/merl985/you-dont-need-to-build-stable-diffusion-to-make-anime-art-3h3m</guid>
      <description>&lt;p&gt;If you have ever set up a local Stable Diffusion rig, you know the first image is the reward at the end of an install marathon, not the start of the fun. This is a short, practical take for anyone who wants anime art without signing up for that marathon.&lt;/p&gt;

&lt;p&gt;I am not anti-Stable Diffusion. Run locally, it is the most flexible image tool going. This is about matching the tool to the goal, especially when the goal is "make an anime character," not "administer a model stack."&lt;/p&gt;

&lt;h2&gt;
  
  
  The part the tutorials gloss over
&lt;/h2&gt;

&lt;p&gt;There is no single "Stable Diffusion" you install. You install an interface (AUTOMATIC1111, Forge, ComfyUI, take your pick), and that decision comes before you know enough to make it. The classic setup wants Python 3.10.6 specifically, and a version mismatch is the single most common install failure, with stack traces that do not exactly hold your hand. Then the usual suspects: dependency resolution, drivers, and a graphics card with enough VRAM (6GB gets you the heavier models, 4GB scrapes by, CPU-only means minutes per image). Once it runs, you are a file manager: checkpoints in one folder, LoRAs in another, downloaded by hand and matched to the right base model.&lt;/p&gt;

&lt;p&gt;None of that is hard for someone who enjoys ops. It is a lot of unrelated work between a beginner and one picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you would be trading away
&lt;/h2&gt;

&lt;p&gt;Fairness first, because Stable Diffusion earns it. Local means full control and offline privacy. The community ecosystem is enormous, and shared images usually ship with their full recipe, which makes it a great place to learn. Advanced setups let you wire together multi-step pipelines and pass them around as files. If that is the hobby you want, stay local and enjoy it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hosted, anime-first path
&lt;/h2&gt;

&lt;p&gt;For "I just want the output," I point people to an online, anime-first generator called PixAI. It runs in the browser, so there is no install and no local GPU. The useful part for this audience: it runs the same model families you would run locally, the SDXL and SD 1.5 generations plus its own anime-focused DiT models, so you keep the ecosystem and drop only the ops burden.&lt;/p&gt;

&lt;p&gt;Practical differences that matter day to day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Models come from a menu, not a downloads folder.&lt;/li&gt;
&lt;li&gt;Community LoRAs apply with a toggle. Copy the trigger word, generate, done.&lt;/li&gt;
&lt;li&gt;No environment, no version pinning, no driver roulette.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To sanity-check the "it is the same models" claim, I ran one prompt of a character three ways: the base DiT model, the same prompt with a community watercolor LoRA, and an SDXL model. Three finishes, each a menu change instead of a file operation. The difference is setup friction, not a quality miracle; a tuned local rig still wins on raw control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local vs hosted, at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Local Stable Diffusion&lt;/th&gt;
&lt;th&gt;Hosted (PixAI)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;UI + Python + deps + drivers&lt;/td&gt;
&lt;td&gt;Sign up in a browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware&lt;/td&gt;
&lt;td&gt;Your GPU (6GB+ VRAM)&lt;/td&gt;
&lt;td&gt;Their servers, any device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;Download and sort checkpoints&lt;/td&gt;
&lt;td&gt;Pick from a menu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoRAs&lt;/td&gt;
&lt;td&gt;Download, place, match base&lt;/td&gt;
&lt;td&gt;Toggle in the panel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control&lt;/td&gt;
&lt;td&gt;Deepest (ComfyUI, extensions)&lt;/td&gt;
&lt;td&gt;Broad but guided&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Tinkerers, offline, privacy&lt;/td&gt;
&lt;td&gt;Anime beginners, speed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When to pick which
&lt;/h2&gt;

&lt;p&gt;Stay local if you want offline control, deep custom pipelines, or the tinkering is the point. Go hosted if you mainly want anime art, have no spare GPU, and would rather spend your time on the character than the config.&lt;/p&gt;

&lt;p&gt;If you want to try the hosted route on your own OC, I would suggest PixAI. The first step is the same everywhere: write a prompt, look at the result, add detail, run it again.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>stablediffusion</category>
      <category>beginners</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>The Model Filled In a Null and I Almost Shipped It</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Mon, 20 Jul 2026 08:18:42 +0000</pubDate>
      <link>https://dev.to/merl985/the-model-filled-in-a-null-and-i-almost-shipped-it-5476</link>
      <guid>https://dev.to/merl985/the-model-filled-in-a-null-and-i-almost-shipped-it-5476</guid>
      <description>&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%2Fp3i8goe6ptw9jp8ejxtt.png" 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%2Fp3i8goe6ptw9jp8ejxtt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I spent a week treating an AI video model like a system under test, and the most useful result came from a bug I nearly missed.&lt;/p&gt;

&lt;p&gt;Setup: I designed an anime character with a fixed spec. Navy hair with a lighter gradient, warm hazel eyes, cream hoodie, olive jacket, silver headphones, a beauty mark under one eye. Call it a fixture. Then I fed her to PixAI v4.0 Preview as a reference image and asked for a five second clip.&lt;/p&gt;

&lt;p&gt;The output looked correct. Motion held, style held, the character was recognizably her. I almost moved on. Then I checked the spec field by field, and her eyes were blue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Isolating the variable
&lt;/h2&gt;

&lt;p&gt;The interesting question is why, and the only way to answer it is the same way you would debug anything else. Change one thing. Rerun. Compare.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Reference shows eyes&lt;/th&gt;
&lt;th&gt;Prompt states eye color&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;no (back view)&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;blue, wrong&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;no (back view)&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;hazel, correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;yes (front portrait)&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;hazel, correct&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Ffot1d4wuas3i58x0qnuz.png" 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%2Ffot1d4wuas3i58x0qnuz.png" alt=" " width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three runs, one variable each. The pattern falls out immediately: &lt;strong&gt;what the reference image fails to show, the model fills in with a plausible default.&lt;/strong&gt; My back-view reference never showed her eyes. The model had a null and it filled it with something consistent with the rest of the input, and blue hair gets blue eyes.&lt;/p&gt;

&lt;p&gt;The headphones did the same thing, coming back with black earpads where the reference only ever showed the outside of the cups.&lt;/p&gt;

&lt;p&gt;If you have ever debugged a system that silently coerces a missing field into a sensible-looking default instead of throwing, this will feel familiar. The failure mode is identical, and so is the reason it is dangerous: the output is plausible enough to pass a glance.&lt;/p&gt;

&lt;p&gt;Two independent fixes both worked, which is worth stating separately, because it tells you the model is reading both channels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fix A:&lt;/strong&gt; make the reference show the field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix B:&lt;/strong&gt; state the field in the prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Either one closes the gap. Neither is documented as a rule anywhere I could find, because it falls out of the interaction between the two inputs rather than from either one alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reference is an input with two possible contracts
&lt;/h2&gt;

&lt;p&gt;This is the part I would push on if you are evaluating any image-to-video tool. "Supports reference images" is meaningless until you know what the tool does with the reference.&lt;/p&gt;

&lt;p&gt;PixAI v4.0 Preview happens to expose both behaviors as explicit modes, which made the comparison clean. Same reference image in both runs, a front-facing studio portrait on a flat gray backdrop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First and Last Frames.&lt;/strong&gt; The reference is the literal frame at t=0. The clip starts as the portrait, gray backdrop and all, and animates forward. Deterministic, and it welds your character to the pose and background you happened to draw.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-Reference.&lt;/strong&gt; The reference is a semantic identity anchor. The clip opened on a rooftop at dusk, a scene that exists nowhere in the reference image, with the character intact and the gray backdrop gone. The model pulled the subject from the image and the world from the prompt.&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%2Fs4b6p868yodn6ysan05s.png" 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%2Fs4b6p868yodn6ysan05s.png" alt=" " width="799" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Same input, two contracts, two different tools. A generator that only implements the first is a constrained animator. A generator that implements the second lets one character sheet serve as the source for arbitrary scenes, which is the difference between a demo and a pipeline. The &lt;a href="https://blog.pixai.art/en/meet-pixai-v4-0-preview/" rel="noopener noreferrer"&gt;v4.0 Preview overview&lt;/a&gt; documents how the reference system is structured.&lt;/p&gt;

&lt;p&gt;One counterintuitive detail: more reference images gives you less. The platform's own testing found two or three focused images outperform a larger stack, since averaging across inputs softens the result. My single clean portrait beat the atmospheric wide shot for one reason. It showed the face.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camera direction is a real interface
&lt;/h2&gt;

&lt;p&gt;I wanted to know whether camera instructions are decoration or API, so I wrote a five second clip as four ordered beats: open on a close-up of her hands on a railing, tilt up along her arm to her face, orbit slowly left, then pull back to a medium wide.&lt;/p&gt;

&lt;p&gt;All four executed, in order, without a cut.&lt;/p&gt;

&lt;p&gt;That means push in, pull back, tilt, and orbit behave as directives rather than vibes, which is directly testable on any candidate tool and takes one generation to check. Ask for an orbit left. If you get a drift right, you have learned something the feature matrix would never have told you. The &lt;a href="https://blog.pixai.art/en/how-to-prompt-pixai-v4-0-preview/" rel="noopener noreferrer"&gt;prompt guide&lt;/a&gt; covers the syntax, including how the timestamp format itself signals a continuous take rather than a cut.&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%2Ffi60egb6lml7x31v6grb.png" 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%2Ffi60egb6lml7x31v6grb.png" alt=" " width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Iteration cost is an engineering constraint
&lt;/h2&gt;

&lt;p&gt;Every result above came out of a rerun of something that failed first. That arithmetic belongs in the tool decision, and it rarely shows up in comparisons.&lt;/p&gt;

&lt;p&gt;Concrete numbers from my runs, read off the panel before each generation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Five seconds on &lt;strong&gt;v4.0 Lite Preview&lt;/strong&gt;: 27,500 credits&lt;/li&gt;
&lt;li&gt;Five seconds on &lt;strong&gt;v4.0 Preview&lt;/strong&gt;: 70,000 credits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Roughly 2.5x for the same duration. The two share an architecture and take identical reference and audio inputs, so the recommended practice is to draft on Lite and commit to Preview once the direction is locked. That held up for me. The entire eye color investigation, all three runs, ran on Lite. Paying premium rates to discover that a prompt needed one more sentence would have been pure waste.&lt;/p&gt;

&lt;p&gt;The evaluation question this raises: what does a draft cost against a final, and can you change one variable and rerun without rebuilding the whole setup? A tool that produces beautiful output at a price that discourages iteration is a tool you will use once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;If you are choosing an image-to-video tool for character work, the test that matters takes one afternoon:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build a fixture with a spec you can verify field by field.&lt;/li&gt;
&lt;li&gt;Give the tool a reference that deliberately hides one field.&lt;/li&gt;
&lt;li&gt;Check whether the output invents that field or leaves it alone.&lt;/li&gt;
&lt;li&gt;Rerun with the field stated in the prompt.&lt;/li&gt;
&lt;li&gt;Rerun with a reference that shows the field.&lt;/li&gt;
&lt;li&gt;Compare all three.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You will learn more from those six steps than from every comparison table on the topic, because you will find out exactly where the tool's defaults live. Mine put them at blue.&lt;/p&gt;

&lt;p&gt;If you want to run it yourself, &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;PixAI&lt;/a&gt; is where I did.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>machinelearning</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Debugging a LoRA That Won't Render</title>
      <dc:creator>Merl Merl</dc:creator>
      <pubDate>Tue, 14 Jul 2026 15:14:37 +0000</pubDate>
      <link>https://dev.to/merl985/debugging-a-lora-that-wont-render-edj</link>
      <guid>https://dev.to/merl985/debugging-a-lora-that-wont-render-edj</guid>
      <description>&lt;p&gt;A LoRA that "does not work" is almost never a corrupt file. It is a config problem, and config problems are debuggable. Here is the systematic pass I run when a character LoRA refuses to show up, treated the way you would treat any bug: isolate one variable, reproduce, compare.&lt;/p&gt;

&lt;p&gt;I will use my own case as the repro. I trained a character LoRA (a winter-yokai OC named Yukimai) on PixAI, loaded it, generated, and got a generic anime girl with the wrong hair color. The file was fine. Every failure below was a setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger word missing or irrelevant.&lt;/strong&gt; Some LoRAs are hard-gated on a trigger, some barely use it. Test both states on a locked seed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weight out of range.&lt;/strong&gt; Start ~0.7 to 0.8 for a character LoRA. There is no universal value. Sweep it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base model architecture mismatch.&lt;/strong&gt; The single biggest cause. An SDXL LoRA will not load on a DiT model, full stop. Match the LoRA's base tag to your model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt conflict.&lt;/strong&gt; An explicit positive token can override the LoRA's trained traits and even a negative prompt. Strip the prompt to isolate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong mental model.&lt;/strong&gt; Character LoRA vs style LoRA need different tests and different weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug method:&lt;/strong&gt; change one variable at a time, lock the seed, compare outputs against each other.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The environment
&lt;/h2&gt;

&lt;p&gt;All tests ran online in PixAI, no local setup. Shared negative prompt across runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lowres, bad anatomy, bad hands, missing fingers, extra digits,
cropped, worst quality, low quality, jpeg artifacts, watermark, signature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Base model for the character runs: Haruka v2 (SDXL / Illustrious). Character LoRA weight default: 0.8.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Trigger word: is it even gating?
&lt;/h2&gt;

&lt;p&gt;A trigger word is the activation phrase baked in at training time. The naive assumption is that without it, the LoRA does nothing. That assumption is only sometimes true.&lt;/p&gt;

&lt;p&gt;Repro: same prompt, same locked seed, trigger on vs trigger off.&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%2Fxv1cyt8kxodokw0383qx.png" 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%2Fxv1cyt8kxodokw0383qx.png" alt=" " width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result: near-identical images. My LoRA is concept-baked, not trigger-gated, because the training set was tightly consistent. Yours might be the opposite. The point is the test, not the assumption: two generations on a locked seed tell you whether the trigger is part of your bug at all. One caveat specific to PixAI: adding a LoRA often auto-inserts the trigger into your prompt box, so a full prompt rewrite can silently delete it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Weight: sweep, do not guess
&lt;/h2&gt;

&lt;p&gt;Weight scales the LoRA's influence. Too low, the character is faint. Too high, the render overcooks. Repro on a locked seed at 0.3 / 0.7 / 1.2:&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%2Flw4j6rjomhvekzw94kl1.png" 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%2Flw4j6rjomhvekzw94kl1.png" alt=" " width="799" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Result: stable across the whole band, with only the frost detailing deepening as weight climbed. Note the pose shifts even on a locked seed, because LoRA strength bends the whole generation, style and composition together. Takeaway: start around 0.7 to 0.8 and step in small increments. A robust LoRA tolerates a wide range; a fragile one does not, and only a sweep tells you which you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Base model: the hard compatibility wall
&lt;/h2&gt;

&lt;p&gt;This is the one that eats afternoons, because a mismatch can mimic every other symptom. A LoRA is trained against a base architecture and only works within that family. On PixAI that means two disjoint worlds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SDXL family  → Haruka v2, Hoshino v2, Illustrious-based models
DiT family   → the Tsubaki line (Tsubaki.2)

SDXL LoRA on SDXL model  → works
SDXL LoRA on DiT model   → will not load (separate ecosystem)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My LoRA is SDXL. Pairing it with Tsubaki.2 (DiT) was refused outright by the platform. Neither a weight change nor a trigger fixes that. Within SDXL, though, it traveled cleanly:&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%2F8uy3c0h82i52nozvgg2p.png" 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%2F8uy3c0h82i52nozvgg2p.png" alt=" " width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every LoRA card in the PixAI Market tags its base (DiT.2 or XL) on the front. Read the tag, match the model, and this entire class of bug never occurs. PixAI's own docs note that crossing into a distant SDXL branch (an Illustrious LoRA on a Pony base, for example) is where the classic melted faces come from, so "same family" is the safe boundary, not "same era."&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Prompt conflict: precedence matters
&lt;/h2&gt;

&lt;p&gt;A working LoRA plus a contradictory prompt produces an unstable image. To probe precedence, I kept trigger and weight correct, requested &lt;code&gt;short blonde hair&lt;/code&gt; against a silver-haired LoRA, and left &lt;code&gt;blonde hair&lt;/code&gt; in the negative from an earlier run. So: requested blonde, banned blonde, LoRA trained silver.&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%2Fj29qca7e4v48d3pj1w7u.png" 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%2Fj29qca7e4v48d3pj1w7u.png" alt=" " width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The positive prompt won, overriding both the LoRA and the negative. Two practical rules fall out: an explicit positive token is the strongest signal in the stack, and unstated traits drift (my first blonde bug came from leaving hair color unspecified under warm lighting). To debug an unstable output, strip the prompt to near-bare, confirm the LoRA alone, then add tokens back one at a time until one breaks it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Character vs style: different test harness
&lt;/h2&gt;

&lt;p&gt;A character LoRA reproduces an identity; a style LoRA reshapes the render. Testing one like the other is a category error. Three-way repro, character alone / style alone / stacked with style pulled to 0.5:&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%2Fx0gpuvkfsl50un4gkidr.png" 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%2Fx0gpuvkfsl50un4gkidr.png" alt=" " width="800" height="1460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stacking rule: keep the style weight below the character weight, or the style competes for the face. PixAI allows up to five LoRAs, but each one is another competing signal. Two is manageable. Five is a merge conflict.&lt;/p&gt;

&lt;h2&gt;
  
  
  The debug loop
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Baseline: plain prompt, no LoRA
2. Add LoRA + trigger, confirm trigger survived into prompt
3. Lock the seed
4. Sweep weight in small steps
5. Mismatch? Check base tag vs model, switch to compatible model
6. Trait fighting? Strip prompt near-bare, reintroduce one token at a time
7. Compare outputs to each other, not to memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fbwrezks7iyw68v310qzu.png" 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%2Fbwrezks7iyw68v310qzu.png" alt=" " width="800" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything here runs in the browser. And when the Market has no LoRA that fits, training your own is the same workflow: Yukimai started as self-generated references plus a few minutes of browser-side training.&lt;/p&gt;

&lt;p&gt;Bottom line: a "broken" LoRA is a settings bug plus one hard compatibility rule, all cheap to interrogate when you change one variable at a time. You can run every test above on &lt;a href="https://eap.pixai.art/go/balazs" rel="noopener noreferrer"&gt;PixAI&lt;/a&gt; without a local install.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have a LoRA that behaves in a way this list does not explain? Drop the setup in the comments and I will take a look.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiart</category>
      <category>animation</category>
      <category>ai</category>
      <category>pixai</category>
    </item>
  </channel>
</rss>
