potocolom_

One sheet, two pictures

Print a prime image. Turn the sheet 180 degrees. A second subject appears. This is research on the same worker stack as the studio. It is not a product feature yet.

Elephant and swan: Elephant
Printable prime

Printable prime

Elephant and swan

Elephant

Use Flip to turn the sheet 180 degrees.

What you are looking at

A flip illusion is one printable picture. Upright, it reads as subject A. After a 180-degree turn, it reads as subject B. The file you send to a printer is the prime. The two views on this page are that same sheet, before and after the turn.

The method is Diffusion Illusions (Burgert et al.). A frozen image model scores how much each view matches its prompt. Only a small network that paints the prime is trained. The large model stays frozen.

This page is the public study of that method on our worker stack. A typeset paper can follow. This site is the version you can read now.

How the optimizer is built

The optimizer has four parts. A prime network paints each printable image. Fixed arrangements turn primes into derived views. A frozen diffusion model scores those views. Only the prime network is trained.

Flip uses one prime and a 180-degree turn. Rotate and hidden types stack transparencies. This page shows flip only. Flip is the type we measured.

Gradients never flow through the UNet. The large model stays frozen. That is Score Distillation, then Dream Target.

Four parts: primes, arrangements, derived views, and a frozen diffusion model.
Four parts: primes, arrangements, derived views, and a frozen diffusion model.
How we bake a keeper: primes, flip views, Score Distillation, a fresh Adam optimizer, then Dream Target.
How we bake a keeper: primes, flip views, Score Distillation, a fresh Adam optimizer, then Dream Target.

The prime is a small network

Each prime is a Fourier Feature Network. Pixel coordinates go through a fixed random projection, then sine and cosine, then a small MLP, then sigmoid RGB.

The paper shows why this matters. Pixel optimization hides the signal in high frequencies. A printer cannot hold that noise. Network-weight optimization keeps the signal in printable structure.

From pixel coordinates to RGB through a Fourier Feature Network.
From pixel coordinates to RGB through a Fourier Feature Network.

Score Distillation

Phase 1 uses frozen Stable Diffusion 1.5. The step encodes each derived view to latents. It adds noise at a random timestep. The frozen UNet scores the noised latents with high classifier-free guidance.

The step applies the guided noise residual as a gradient on those latents. That gradient updates only the prime network. The paper printed pseudocode has no gradient path. The authors' code uses residual-as-gradient. Every SDS implementation uses that form.

One Score Distillation step. The UNet stays frozen. The step updates only the prime network.
One Score Distillation step. The UNet stays frozen. The step updates only the prime network.

Two phases

Phase 2 is Dream Target. It uses DreamShaper LCM. Each round asks img2img for a cleaner target. Then SSIM and MSE pull the derived views toward that target. Strength starts high and decays to a light polish.

The optimizer CLI defaults are 500 SDS steps and 8 Dream rounds. We baked the gallery with a research recipe: 5000 SDS steps and 1 Dream round.

The loop creates a fresh Adam optimizer at the phase boundary. SDS gradients are about four orders of magnitude larger than Dream Target gradients. Without the reset, phase 2 moved loss by under 2 percent per round. With the reset, it moved 44 to 60 percent. Those figures come from a short flip run. The run used 250 SDS steps and 4 Dream Target rounds of 150 steps each.

Score Distillation, a fresh Adam optimizer, then Dream Target.
Score Distillation, a fresh Adam optimizer, then Dream Target.
One Dream Target round. SDEdit makes a target. Then SSIM and MSE pull the views toward it.
One Dream Target round. SDEdit makes a target. Then SSIM and MSE pull the views toward it.

Joint Dream

Independent Dream Targets can fight over the same pixels. Joint Dream denoises both flip views together. It averages them in the upright frame. Then it steps from that consensus. The two views become two orientations of one image.

The loop averages in pixel space. The SD 1.5 VAE does not commute with a 180-degree turn in latent space. Joint Dream is an opt-in flag. It is not the product default. It can rescue a pair whose shapes can be one picture. It can also collapse a pair whose subjects cannot.

Joint Dream averages both views in the upright frame. Both prompts share one image.
Joint Dream averages both views in the upright frame. Both prompts share one image.

What we actually measured

A good result is a specific pair, seed, and viewing mode. It is not a recipe that works every time. We pick keepers by eye. An automatic CLIP screen was not good enough (ROC-AUC 0.706 against a 0.75 bar), so it is not used.

Prompt wording is the biggest lever. It is not predictable by argument. Frames and extra objects come from the specific phrase. They do not come from sketch versus oil as a medium. We kept oil for color and for fewer photographic frames. We did not keep oil because it won on yield.

We rejected negative prompts. Extra Dream rounds after the first made images worse. 256 px primes were enough. 512 px cost about 3.3 times as much for no visible gain.

These conclusions came after the gallery was baked. The 6 images below span both wordings and both styles. 5 of 6 used joint Dream. The giraffe and penguin pair used independent targets. Export window2-2026-08-clean.

Optimizer CLI defaults versus the research recipe that baked this gallery.
Optimizer CLI defaults versus the research recipe that baked this gallery.
Bake a pair. Keep it only after a blind human review. CLIP is recorded. It is not a gate.
Bake a pair. Keep it only after a blind human review. CLIP is recorded. It is not a gate.

Gallery

6 keepers from a blind review. Score 5, and no major frame defect. Flip each card. These do not promise that the same pair will work on a new seed.

How you would print it

For flip, print the prime on paper. Turn the sheet around. Laser output is enough for a desk test. Rotate and hidden types need transparency film and a backlight. They are not on this page.

Print the prime, then turn the sheet 180 degrees.
Print the prime, then turn the sheet 180 degrees.

Not in the studio yet

There is no illusion job in the API. There is no designer in the app. The optimizer is a worker CLI on an unmerged branch. This page is the public study of that research.

When jobs land, they will sit behind realtime drawing sessions. Other batch work sits there too. Until then, the live product is still the canvas loop in the whitepaper.

A typeset paper can follow. This page is the public study until then.

Images generated with Stable Diffusion 1.5 and DreamShaper LCM (CreativeML Open RAIL-M).