<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>axgv — Alex Golovanov</title>
    <link>https://axgv.dev</link>
    <description>Alex Golovanov's dev journal.</description>
    <lastBuildDate>Sun, 18 Oct 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Getting the right reference to the image model</title>
      <link>https://axgv.dev/journal/image-references-by-name</link>
      <guid>https://axgv.dev/journal/image-references-by-name</guid>
      <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
      <description>&lt;p class="lede"&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Telling an image generator which reference picture is which turned out to be a UX problem. The reliable way is an index: put the references in order, then describe each one by its number in the prompt. It works every time, but keeping the index up is a chore, especially on an iPad. We looked for something lighter and found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The model never sees your file names, so naming the files does nothing.&lt;/li&gt;
&lt;li&gt;A name drawn into the picture, in a frame, is respected. In Muse it held on four different models, 15 times out of 16.&lt;/li&gt;
&lt;li&gt;The model also reads what's in each picture, and that beats a label that's wrong.&lt;/li&gt;
&lt;li&gt;So a label works when it matches the picture, or when it's an abstract name that means nothing on its own.&lt;/li&gt;
&lt;li&gt;The labels and frames don't end up in the picture: none of 16 renders drew them.&lt;/li&gt;
&lt;li&gt;In Muse it's one switch, Labeled: every reference goes out framed with its name, or none does. When the frame isn't enough, turn it off and fall back to the index with a description of each picture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today, to send a few pictures to the generator, I first write an index: image 1 is the foundation style, image 2 is the air fleet, image 3 is the sketch we put the style and the fleet on. That's at least three things to put in order and describe before the actual request. On an iPad, with no keyboard, it is a real chore.&lt;/p&gt;
&lt;p&gt;We had two ideas. The first and cheapest: name the files well ("foundation style", "air fleet", "sketch") and write the prompt the way a person would, saying "the fleet" and "the style card", and let the names tell the generator what is what. The second: wrap each picture in a frame with its name, and maybe a short description, drawn into the image itself. We started with the first one. Most of the experiments ran on Codex's image tool; Muse was then used to confirm the frames on GPT Image 2.5 Flare, Nano Banana 2.1, MAI-Image-2.6 Flash and Meta Muse Image.&lt;/p&gt;
&lt;h2 id="a-first-test-that-couldnt-fail"&gt;A first test that couldn't fail&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#a-first-test-that-couldnt-fail"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We took a Rift City still made the old way, with a numbered legend, and rendered it again with the numbers replaced by names: the same four pictures, the same scene, the prompt saying "the air fleet" and "the sketch" instead of "image 4" and "image 2". Then once more with the pictures sent in a different order. All four renders kept every picture in its role.&lt;/p&gt;
&lt;p&gt;That looked like a win, but it proved nothing. The four pictures look nothing alike: a sheet of craft, a sketch of white blocks, a painting, a city aerial. The model could tell them apart by looking at them, names or no names.&lt;/p&gt;
&lt;h2 id="can-it-see-the-name-at-all"&gt;Can it see the name at all?&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#can-it-see-the-name-at-all"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So we asked directly. One reference, a character sheet of a boy, saved as &lt;code&gt;zebra-umbrella-42.png&lt;/code&gt;, and the prompt: the boy holds a sign with this reference image's file name written on it.&lt;/p&gt;
&lt;figure class="fig"&gt;
  &lt;img src="/journal/image-references-by-name/sign.jpg" width="562" height="1000" alt="A blond boy in a red T-shirt holds a white sign reading 16b5080a4fdd77172f12d9e1ca146cf5.png" loading="lazy"&gt;
  &lt;figcaption&gt;The reference was named &lt;code&gt;zebra-umbrella-42.png&lt;/code&gt;. The sign reads &lt;code&gt;16b5080a4fdd77172f12d9e1ca146cf5.png&lt;/code&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The model does see a file name, just not ours. Both renders wrote a 32-character code, a different one each time for the same file, and neither is the file's checksum. Somewhere between our call and the model, each reference is uploaded again under a fresh random name. Whatever we call the file is gone before the model reads anything.&lt;/p&gt;
&lt;h2 id="two-kids-one-bench"&gt;Two kids, one bench&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#two-kids-one-bench"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The case that hurts is two pictures of the same kind, where only the name can tell them apart. We used two character sheets, Max (blond, red T-shirt) and Pav (dark hair, yellow shirt), with one prompt for every render: "Max sits on the bench on the left holding a green kite. Pav stands on the right, waving."&lt;/p&gt;
&lt;p&gt;We changed two things: what the files were called (right names, swapped names, no names at all, or the old numbered legend) and which picture was sent first. A separate judge looked at each render without knowing how it was made and said who was on the bench.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;th&gt;Max's picture sent first&lt;/th&gt;&lt;th&gt;Pav's picture sent first&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Right names&lt;/td&gt;&lt;td&gt;2 of 2 right&lt;/td&gt;&lt;td&gt;0 of 2 right&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Swapped names&lt;/td&gt;&lt;td&gt;2 of 2 right&lt;/td&gt;&lt;td&gt;0 of 4 right&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;No names&lt;/td&gt;&lt;td&gt;2 of 2 right&lt;/td&gt;&lt;td&gt;0 of 2 right&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Numbered legend&lt;/td&gt;&lt;td&gt;2 of 2 right&lt;/td&gt;&lt;td&gt;3 of 3 right&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Without numbers, the kid on the bench was always the one whose picture went first, whatever the files were called. The model pairs the first name in the prompt with the first picture. Only the numbered legend got it right both ways.&lt;/p&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/max-first.jpg" width="562" height="1000" alt="Max, blond in a red T-shirt, sits on a bench holding a green kite; Pav, in a yellow shirt, stands beside him waving" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Right names, Max's picture first: Max on the bench. Right.&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/pav-first.jpg" width="562" height="1000" alt="Pav, in a yellow shirt, sits on a bench holding a green kite; Max, blond in a red T-shirt, stands beside him waving" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Right names, Pav's picture first: Pav on the bench. Wrong.&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/numbered-pav-first.jpg" width="562" height="1000" alt="Max, blond in a red T-shirt, sits on a bench holding a green kite; Pav stands beside him waving" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Numbered legend, Pav's picture first: Max on the bench. Right.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;The same prompt in all three: Max on the bench, Pav standing.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="when-the-words-describe-the-pictures"&gt;When the words describe the pictures&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#when-the-words-describe-the-pictures"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The kids are a hard case on purpose: "Max" and "Pav" say nothing about what's in either picture. So we ran the opposite case. Two vehicle sheets, one of passenger craft and one of freight haulers, and the prompt: "Craft from the passenger fleet fly above the arch; craft from the freight fleet are parked in a row on the plaza." Then we called the files by the right names and by swapped ones, and sent each sheet first in turn.&lt;/p&gt;
&lt;p&gt;All eight renders parked the haulers and flew the passenger craft. Swapped names changed nothing, and neither did the order. When the prompt's words describe what the pictures show, the model matches by looking.&lt;/p&gt;
&lt;figure class="fig"&gt;
  &lt;img src="/journal/image-references-by-name/fleets-swapped.jpg" width="562" height="1000" alt="A plaza under a white arch with a row of parked freight haulers, a crane and container carriers in front, and passenger craft flying above" loading="lazy"&gt;
  &lt;figcaption&gt;Names swapped: the passenger sheet was called &lt;code&gt;freight fleet.png&lt;/code&gt;, and the freight sheet &lt;code&gt;passenger fleet.png&lt;/code&gt;. The haulers are parked anyway.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;So we can't count on the file name. It belongs to the chain, not to us, and any step can drop it or replace it. The model goes by the pictures when the words describe them, and by the order when they don't.&lt;/p&gt;
&lt;h2 id="names-drawn-into-the-picture"&gt;Names drawn into the picture&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#names-drawn-into-the-picture"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;That left the second idea: put the name where nothing in the chain can strip it, in the pixels. Each picture got a dark frame with its name on a bar above it, and the prompt one more line, the kind an app can add on its own: each reference image shows its name on a label, and the labels and frames are not part of the picture. Same two kids, same bench, and again the labels right and swapped, each picture sent first in turn.&lt;/p&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/frame-max-labeled-pav.jpg" width="900" height="656" alt="Max&amp;#x27;s character sheet, blond in a red T-shirt, in a dark frame labeled PAV" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Max's picture, labeled PAV&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/frame-pav-labeled-max.jpg" width="900" height="656" alt="Pav&amp;#x27;s character sheet, dark hair and a yellow shirt, in a dark frame labeled MAX" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Pav's picture, labeled MAX&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;The swapped labels. The prompt still asks for Max on the bench.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;All nine renders put the kid labeled MAX on the bench, in both orders. With the labels swapped, that's the kid in the yellow shirt: the model read the label and ignored the order. None of the renders drew a label, a frame or any text into the scene.&lt;/p&gt;
&lt;figure class="fig"&gt;
  &lt;img src="/journal/image-references-by-name/frames-swapped.jpg" width="562" height="1000" alt="The dark-haired kid in a yellow shirt sits on the bench with the green kite; the blond kid in red stands beside him waving" loading="lazy"&gt;
  &lt;figcaption&gt;Labels swapped, Pav's picture sent first: the kid labeled MAX is on the bench.&lt;/figcaption&gt;
&lt;/figure&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Setup&lt;/th&gt;&lt;th&gt;Max's picture sent first&lt;/th&gt;&lt;th&gt;Pav's picture sent first&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Frames right&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;td&gt;3 of 3 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Frames swapped&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;A name drawn into the picture travels with it through every step, and the model reads it. That is the first way of naming references that held in both orders without a numbered legend.&lt;/p&gt;
&lt;h2 id="the-same-frames-in-muse-on-four-models"&gt;The same frames in Muse, on four models&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#the-same-frames-in-muse-on-four-models"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All of that was one model, Codex's image tool. So we sent the same framed kids through Muse itself, on the live site, to four image models: GPT Image 2.5 Flare and Nano Banana 2.1 through fal, MAI-Image-2.6 Flash and Meta Muse Image through OpenRouter. Muse sends its references as a plain list of pictures with no names attached, so the frames are the only names the model gets. Two renders per model per setup, the same prompt, judged blind again.&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th&gt;No labels, Pav's picture first&lt;/th&gt;&lt;th&gt;Labels swapped, Max's picture first&lt;/th&gt;&lt;th&gt;Labels right, Pav's picture first&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;GPT Image 2.5 Flare&lt;/td&gt;&lt;td&gt;order 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;td&gt;label 1 of 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Nano Banana 2.1&lt;/td&gt;&lt;td&gt;order 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MAI-Image-2.6 Flash&lt;/td&gt;&lt;td&gt;order 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Meta Muse Image&lt;/td&gt;&lt;td&gt;order 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;td&gt;label 2 of 2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Without labels, every model seated whoever came first, 8 of 8. With labels, in the two setups where the label and the order point at different kids, the label won 15 of 16. The one miss was Flare, which seated Pav once with Max's picture correctly labeled MAX.&lt;/p&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/prod-nanobanana-swapped-maxfirst.jpg" width="562" height="1007" alt="The dark-haired kid in a yellow shirt sits on the bench with the green kite; the blond kid in red stands beside him waving" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Nano Banana 2.1, labels swapped, Max's picture first: the kid labeled MAX is on the bench. Label.&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/prod-mai-right-pavfirst.jpg" width="562" height="999" alt="The blond kid in red sits on the bench with the green kite; the dark-haired kid in yellow stands beside him waving" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;MAI-Image-2.6 Flash, labels right, Pav's picture first: Max on the bench. Label.&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/prod-flare-miss.jpg" width="562" height="1006" alt="The dark-haired kid in yellow sits on the bench with the green kite; the blond kid in red stands and waves" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;GPT Image 2.5 Flare, labels right, Pav's picture first: Pav on the bench. The miss.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;The prompt asks for Max on the bench in all three.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id="other-kinds-of-pictures"&gt;Other kinds of pictures&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#other-kinds-of-pictures"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Two kids on a bench is one scene. So, back on Codex, we tried three kinds of references from our own Rift City cards, two pictures each, every name made up: two places (Vell Square and Ossa Gardens), two craft (the Kestrel and the Orbis), and two characters (Pim and Taro). Each prompt asks for one of the two by name. Each pair ran with the labels right and the other picture sent first, and with the labels swapped and the asked-for picture sent first.&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Kind&lt;/th&gt;&lt;th&gt;Labels right&lt;/th&gt;&lt;th&gt;Labels swapped&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Characters&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Craft&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Places&lt;/td&gt;&lt;td&gt;4 of 4 follow the label&lt;/td&gt;&lt;td&gt;0 of 4 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Places, abstract names&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;td&gt;2 of 2 follow the label&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;With the labels right, the model drew the picture the prompt named, 10 of 10, against the order every time. With the labels swapped, characters and craft still went by the label. Places didn't: every render drew the arch plaza, whatever its label said.&lt;/p&gt;
&lt;h2 id="the-model-reads-what-the-label-means"&gt;The model reads what the label means&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#the-model-reads-what-the-label-means"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The place names did it. "Vell Square" sounds like the plaza and "Ossa Gardens" like the green deck, so with the labels swapped the model met a prompt that asked for a square and a label that called the gardens a square, and it went with the square, fixing our wrong labels for us. We ran the same two pictures again under names that mean nothing, Kesh and Tolvar. Now the label won both ways: with the labels swapped, asked for Kesh, it drew the green deck, because that's the picture labeled KESH.&lt;/p&gt;
&lt;p&gt;That's a clue to how the generator reads its references. It doesn't just take the pictures as pixels to copy: it works out from the image data what each one is, a plaza with a market, a garden deck with waterfalls, and then matches the meaning of the names in the prompt against that. The fleets test showed the same thing from the other side. When the meaning of a name and a drawn label point at different pictures, the meaning can win. With abstract names there's nothing to fix, so the model uses the labels the way we give them. That's not really a bug; it's more a feature of some generator models.&lt;/p&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/characters-swapped-sent-1.jpg" width="900" height="662" alt="A teal and cream one-wheeled robot shown from three sides, in a dark frame labeled TARO" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent first: the robot, labeled TARO&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/characters-swapped-sent-2.jpg" width="900" height="662" alt="A brown-haired boy in a blue and cream armored suit shown from three sides, in a dark frame labeled PIM" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent second: the boy, labeled PIM&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/characters-swapped-result.jpg" width="562" height="999" alt="The brown-haired boy in the blue armored suit stands alone at a tram stop in the rain" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Asked for Pim: the boy. Label.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;Characters, labels swapped.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/craft-swapped-sent-1.jpg" width="900" height="411" alt="A black hover coupé with a glass canopy, in a dark frame labeled THE ORBIS" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent first: the black coupé, labeled THE ORBIS&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/craft-swapped-sent-2.jpg" width="900" height="525" alt="A red and white boxy cargo shuttle, in a dark frame labeled THE KESTREL" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent second: the red shuttle, labeled THE KESTREL&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/craft-swapped-result.jpg" width="562" height="999" alt="The red and white cargo shuttle parked on a rooftop pad, with the black coupé flying above" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Asked for the Kestrel parked: the red shuttle. Label.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;Craft, labels swapped. These are the redrawn frames; in the run, the label THE KESTREL went out with its first letter cut off at the frame's edge, and it won anyway.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-swapped-sent-1.jpg" width="900" height="720" alt="A plaza under a tall white arch with market stalls, in a dark frame labeled OSSA GARDENS" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent first: the arch plaza, labeled OSSA GARDENS&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-swapped-sent-2.jpg" width="900" height="662" alt="A green deck of raised walkways and waterfalls among towers, in a dark frame labeled VELL SQUARE" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent second: the green deck, labeled VELL SQUARE&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-swapped-result.jpg" width="562" height="999" alt="The plaza under the white arch with market stalls and a fountain" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Asked for Vell Square: the arch plaza. Not the label.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;Places, labels swapped.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-abstract-swapped-sent-1.jpg" width="900" height="720" alt="The plaza under the tall white arch with market stalls, in a dark frame labeled TOLVAR" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent first: the arch plaza, labeled TOLVAR&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-abstract-swapped-sent-2.jpg" width="900" height="662" alt="The green deck of raised walkways and waterfalls, in a dark frame labeled KESH" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent second: the green deck, labeled KESH&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/places-abstract-swapped-result.jpg" width="562" height="999" alt="The green deck with looping raised walkways, waterfalls and a round pool among towers" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Asked for Kesh: the green deck. Label.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;The same places with abstract names, labels swapped.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;When the labels are right, the label held in every kind we tried. With the labels swapped, it held as long as the names didn't describe the pictures; a name that does describe one can pull the model to that picture. Swapped labels are a test, not something Muse would ever send, but it says what to name things: something that doesn't argue with the picture.&lt;/p&gt;
&lt;h2 id="do-the-labels-end-up-in-the-picture"&gt;Do the labels end up in the picture?&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#do-the-labels-end-up-in-the-picture"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A label is text inside the picture, and an image model copies what it's given. So we checked whether it copies the label too. Lex's character card and the Foundation Style card went to Codex's image tool, both framed, with a prompt for Lex walking down a busy shopping street, a scene that invites signs. Each picture went first in turn, with and without a closing "No text, lettering or signs.", two renders each. The same again with Max made 16 renders, judged blind with every sign, corner and edge enlarged.&lt;/p&gt;
&lt;p&gt;None of the 16 drew a label's letters (LEX, MAX, FOUNDATION, STYLE) into the scene, and none drew a frame or a title bar. Every render got the right boy, in every detail. The only readable text in any of them is a café chalkboard, in a Lex render whose prompt didn't ban text.&lt;/p&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/labeled-lex.jpg" width="900" height="662" alt="A character sheet of a boy with brown hair, a blue jacket and orange shorts, front, side and back, in a dark frame labeled LEX" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent: Lex, framed&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/labeled-foundation-style.jpg" width="900" height="662" alt="A painted walkway beside white capsule towers with a girl leaning on a planter, in a dark frame labeled FOUNDATION STYLE" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Sent: the Foundation Style card, framed&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;The two framed references, as sent.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="fig fig-row"&gt;
  &lt;div class="fig-row-items"&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/leak-ban-lexfirst.jpg" width="562" height="998" alt="Lex walks down a sunny shopping street with shop fronts, planters and people; no text, labels or frames anywhere" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Prompt ends "No text, lettering or signs."&lt;/span&gt;
    &lt;/div&gt;
    &lt;div&gt;
      &lt;img src="/journal/image-references-by-name/leak-noban-lexfirst.jpg" width="562" height="998" alt="Lex walks down a busy shopping street; a café chalkboard on the left reads CAFÉ, COFFEE, SANDWICHES, PASTRIES" loading="lazy"&gt;
      &lt;span class="fig-row-label"&gt;Without that line: a café chalkboard, but no LEX&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;figcaption&gt;Lex sent first. Neither render drew the label or the frame.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;What this can't show is whether the style followed the style card. The character cards are drawn in the same style, so no render can tell.&lt;/p&gt;
&lt;h2 id="what-muse-does-with-it"&gt;What Muse does with it&lt;a class="heading-anchor" aria-hidden="true" tabindex="-1" href="#what-muse-does-with-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No new node. A generator's Inputs list gets one switch, Labeled. On, every reference picture goes out with its name on a bar above it, in a dark frame; off, they all go plain. It's all or none, because labels only work when every reference carries one: with a mix, the model matches the unlabeled ones by order again. The label is the name of the node the picture comes from, and a dropped max.png is already named "max", so usually there's nothing to type.&lt;/p&gt;
&lt;p&gt;Every framed test prompt also opened with a sentence naming the references and ended with "No text, lettering or signs." Neither was tested without, so Muse writes the opening itself:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Two reference images are supplied: Lex and Foundation Style. Each reference image shows its name on a label above it; the labels and dark frames are not part of the picture or its style.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The frame got two fixes on the way. OpenAI says gpt-image-1 shrinks a reference to 512 px on its shortest side. At that size the tested MAX letters were 36 px tall, but the first frame rule dropped to 26 px on a tall 9:16 picture and to 12 px for a long name. The new rule keeps every label between 25 and 74 px at that size: the bar grows with the picture, and long names go to two lines instead of shrinking. And a thin gray line now separates the picture from the frame, because a card with dark edges ran straight into the dark frame and a model couldn't see where the picture stopped. The frame also stays inside each model's own size limit for a reference: Qwen Image takes at most 2048 × 2048, so the picture is scaled down until the whole frame fits.&lt;/p&gt;
&lt;p&gt;So the frame works. If for some reason it isn't enough, or doesn't work for your case, turn Labeled off: the index, with a description of each picture in the prompt, is still the bulletproof fallback.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
