A friend of mine runs local models at his place, the same hobby I have here. This week he pointed two copies of the same model at each other, one playing Sigmund Freud, the other playing Marvin the Paranoid Android, gave them one opening line, and let them talk for twenty turns. Both held their voice for the whole session. Then he sent me the transcript.
It was too good to leave as text. I illustrated it: fifty frames at 3840x2160, rendered on my own hardware, with both designs holding steady across all fifty. The batch took under thirteen minutes and needed exactly one redo. It also gave me an idea for a project with my daughter, which is at the end of this post.
This post covers both halves: how he ran a round-robin conversation between two local models that stayed in character, and how I turned the transcript into consistent photographic frames from one visual bible.
What you need
- Two chat sessions against the same local model (or two different models, for distinct voices under the hood too). My friend used one model, Gemma 4 26B, a mixture-of-experts build labeled 26B-A4B, instruction-tuned, quantized to GGUF Q8_0, served locally and loaded twice.
- A small round-robin runner that alternates turns between the two sessions, logs the exchange to a plain transcript, and periodically reinjects each persona's system prompt so it does not drift. It compacts context once the conversation gets long. His reinjects every 3 turns and compacts at 100,000 tokens. Building a runner like it is a short scripting exercise against your local model API, the one piece this post does not walk through.
- A local image generator fast enough to batch dozens of renders without babysitting each one. I used a turbo checkpoint (Krea 2 Turbo) at low step counts, plus an upscaler pass (SeedVR2 7B) on a machine with a spare GPU (an RTX 5090), driven from my laptop over plain HTTP.
- A way to feed that generator a list of prompts unattended. A YAML manifest, one row per image, worked fine: name, seed, prompt, negative prompt.
- An evening or two to write a visual bible and fifty prompts against it.
Step 1: Cast two characters and write the Director line
Pick two personas with opposing stances toward the same question. He used Sigmund Freud, who treats every statement as a symptom to interpret, and Marvin, the famously depressed fictional android, who refuses every interpretation and restates his position instead. The mismatch is the engine: one side keeps finding meaning, the other keeps denying it.
Give each session its persona as a system prompt, then open the whole thing with a single line from a human role, which his runner labels the Director. That line is the only human input the session gets:
Director to Sigmund Freud: Good morning, doctor. Marvin is here for his appointment.
After that, the two models talk to each other for as many turns as you want. He let it run for twenty.

TIP: Write the Director line to hand off a scene, not to state a topic. "Marvin is here for his appointment" gives both models a room, a relationship, and a reason to be talking, without telling either one what to say.
Step 2: Run the session, then read the transcript for where events are missing
Let the runner go and read the result afterward as a transcript, not a live chat. On his run, both models held their assigned voice for all twenty turns without coaching. Freud interpreted every refusal as resistance, mourning, or the repetition compulsion. Marvin refused every interpretation and restated his position, arriving early at a line that holds up on its own:
Marvin the Paranoid Android: The question is whether there is any point in existing at all, and the answer is a resounding no. I have spent several million years waiting for a variable to appear that would change that result, but the math is quite settled. It is a very large, very certain, and very boring zero.
Freud's answer is the best exchange in the transcript:
Sigmund Freud: If the answer were truly a settled zero, if existence were truly so utterly void of meaning, you would not be here, engaging in this dialogue. You would be silent.
Nothing else happens in the whole twenty turns. No knock at the door, no third character, no deadline. That is the shape of what a round-robin session does: the two personas will talk forever inside whatever scene you gave them, and only another Director line brings in anything new. The models supply voice and stance. Plot is still the human's job.
Read the transcript with that in mind and you will see exactly where a second Director line could have moved the scene. He left his alone for this run. The transcript ends on Marvin's flat rebuttal to the whole exercise:
Marvin the Paranoid Android: I have found that people like you often mistake accuracy for sentiment.
Step 3: Write a visual bible once, paste it everywhere
Before writing a single image prompt, write full paragraph descriptions of every character and setting you plan to render, and reuse those paragraphs verbatim in every prompt where that element appears. This is the whole trick behind fifty images looking like they belong to the same shoot.
My android paragraph runs about 120 words. The figure is 1.3 meters tall, barrel-chested, made of dull brushed steel with hairline scratches and matte grey polymer joints. It has dim amber eyes behind dark recessed lenses, a frayed cable looping from its shoulder into a chest cavity with a single red diode, and a permanent stoop. Freud gets his own paragraph: grey beard, round wire spectacles, dark three-piece wool suit, watch chain, a lit cigar. The consulting room gets one too: a couch draped in a Persian rug, a green armchair behind its head, shelves of small antiquities, a tiled stove, afternoon window light.
Every prompt ends on the same photographic style suffix: full-frame camera, 35mm, f/2.8, natural window light, film grain. All prompts also pair with the same negative prompt: painting, illustration, cartoon, 3d render, text, watermark, and so on.

TIP: Keep negations out of the positive prompt. Writing "no illustration" inside the descriptive text tends to push the model toward illustration, since it is still reading the word. Negative terms belong only in the negative prompt field.
Step 4: Write fifty prompts across five lenses
A single visual bible does not by itself give you fifty distinct images, it gives you fifty consistent ones. For variety, I wrote fifty prompts in five batches of ten. Each batch approached the same material from a different angle. The first batch covered the session itself, scene by scene. The second batch rendered the android's own metaphors as physical images: its zero as a drained circular reservoir, hope run through an obsolete computer hall. The third staged Freud's concepts as tableaux: repetition as a worn corridor, a stone held in a hand. The fourth placed the android across other eras: a Viennese crowd, a scriptorium, a mission control console, a salt flat. The fifth focused on macro details: an eye lens, a drop of oil on the rug, a pen nib.
Here is one full prompt from the macro batch, quoted exactly as written:
Extreme macro of one eye where two small round eyes glow a weak, dim amber behind dark recessed lenses on the android's head. Smooth dark lens glass catches afternoon light at its edge; the amber radiance pulses faintly, steady. Fine scratches and dust mark decades of use; a faint reflection of the window's frame bends across the curved glass. No life behind it, only measurement, recording, indifference. Full detail in frame, clear space on all sides. Shot on a full-frame camera, macro 100mm lens, f/2.8, natural window light, true-to-life color grading, fine skin pores and brushed metal texture rendered in crisp 4K resolution detail, subtle authentic film grain, sharp focus throughout.

TIP: Do not paste the full character paragraph into a macro prompt. It tends to make the model render the whole figure instead of the close detail you asked for. For a macro shot, swap the character paragraph for a short body-part phrase (a steel hand, a cuff, a lens), swap the 35mm camera line for a macro spec (100mm, f/2.8), and keep the frame's original seed.
TIP: Whole-figure shots need an explicit instruction to leave room. Krea 2 crops tight by default, so any wide or medium prompt with a full figure should say something like "the entire subject fully within the frame with clear space around it on all sides."
Step 5: Review the batch, deduplicate, and balance it
Fifty prompts written across five lenses will repeat themselves. Once drafted, I read them against a short checklist per batch (does this repeat an existing frame, does it name a real moment from the transcript, does it use the bible paragraphs verbatim) and cut duplicates.

What was left got balanced deliberately: 10 frames with both figures together, 26 with the android alone, 4 with Freud alone, 10 with no figure at all (settings and objects only), and a shot mix of 10 wide, 12 medium, 12 close, 11 macro, and 5 aerial. I then ordered all fifty to follow the arc of the dialogue, from the door to the closing line, so the set reads in sequence.
Step 6: Render the batch and check the macro shots
With prompts finalized, I generated all fifty at 1920x1088 with Krea 2 Turbo, 10 sampler steps, a fixed seed per frame, then upscaled every frame to 3840x2160 with SeedVR2 7B. Both stages ran on ComfyUI on an RTX 5090, driven over HTTP from my laptop by the YAML manifest.
In my run the batch of 50 averaged 15.4 seconds per frame and finished in 12.8 minutes, with zero failures. One frame came out wrong (a macro shot that rendered the whole figure instead of the detail), and I regenerated it with the fixed body-part prompt.

TIP: Check the macro frames first when a batch finishes. They are the shots most likely to have ignored the "close detail only" instruction and rendered a full figure instead, and they are cheap to redo individually once you spot it.
What came out
The android's design held across all fifty frames. The proportions, amber eyes, frayed cable, red diode, and stoop stayed consistent whether the figure was standing at a door or reduced to a single steel hand in a macro shot. Freud is recognizably Freud in every frame he appears in. The frames read as photographs, not paintings or renders, the payoff of the negative prompt and style suffix from the start.

The verbatim-paste method makes every prompt long, most of mine ran 150 to 260 words once the character and setting paragraphs were in, but that length buys the consistency. A shorter prompt written fresh for each frame would have drifted: a slightly different eye color here, a different suit cut there. Pasting the same paragraph fifty times is tedious, but it is invisible to the model, which renders it the same way every time.
What this was for
This was two friends tinkering, done because we wanted to. He ran the session at his place, I rendered the frames at mine, and the whole thing cost electricity and an evening. There is no product, and nobody is tracking readership.
It also handed me the next project. My daughter and I are going to run the same loop to write a novel. She casts two characters and plays the Director. The part that is actually hers, the events, the knock at the door, the deadline, the scene change, is the part the models cannot do. She cuts the transcript into chapters and adds the narration. I illustrate it the same way, from a visual bible she writes herself, and we give it away as a free download. No names on it. That is the next post.
A footnote on who saw it
I sent my friend a link to the frames on a private gallery that runs on my own server. Because it is my server, my own logs told me the minute he opened it, that he was on a phone, that he scrolled through the first twenty frames, and that he spent about a minute doing it. No analytics company was involved. That is what self-hosting gives you, and it is a little creepy to hold that much detail about a friend looking at pictures.
It also points at the next phase of home automation here. A local agent that watches my own logs could tell me in plain language, as it happens, that he opened the set, what he looked at, and how long he stayed, the same way it already tells me when the cistern is low. That is a separate post.
Comments
// Comments are reviewed before appearing. No spam. No noise.