How I Stopped Getting Soft Blobs in Pixelated Goldfish Art

AI Prompt Asset
Massive ornate fantail goldfish built from a visible 8-bit pixel grid, every scale rendered as discrete 2x2 pixel clusters, swimming through electric cyan sky (hex #00A8E8 with #0044CC ordered-dither banding). Bayer 4x4 ordered dithering across the body produces a controlled orange-to-yellow gradient from #FF2200 to #FFD400 — all intermediate values created by dot density, never by a smooth color ramp; dot clusters snap to the grid, no gaussian blur, no anti-aliasing. Below: vintage white rotary telephone in exploded view — handset floating upper-left, base unit tilted lower-right, joined by a coiled black cord drawn with pixel-perfect stair-step aliasing at 1-pixel steps. Halftone dot screen bleeding through the phone's white plastic, green seven-segment LCD on the base reading fragmented static digits. Three pixel palm trees with olive-green fronds (#6B7A1E) on burnt umber trunks (#5A2E12) anchored in the bottom corners, each frond built from horizontal 1-pixel strips. Aggressive horizontal scanlines at 240p density, one dark line every 2 pixels, tearing across the entire frame; chromatic aberration splitting R/G/B channels by 2 pixels at the frame edges only; CRT phosphor glow blooming around bright elements. 1987 IBM PC CGA monitor aesthetic: flat diffuse lighting, zero cast shadows, maximum 4 colors per scanline. Top-down orthographic projection, centered composition, native 320x240 resolution with sharp nearest-neighbor upscaling. Authentic retro digital art, zero photorealistic interpolation, no depth of field, no soft shadows, no bloom outside bright elements. --ar 9:16 --style raw --s 50
Prompt copied! ✨

Quick Tip: Copy the prompt with the button above — paste it into Midjourney as-is (--ar and --style raw included). On DALL-E, Flux, Stable Diffusion, Ideogram, Leonardo AI or Firefly, keep the descriptive text and drop the -- flags. If text in the poster renders garbled, shorten it to 2-3 words max: no current model handles long typography reliably.

Why “Pixelated” Alone Produces Soft, Modern-Looking Art

I kept typing “pixelated goldfish art” and getting soft, modern-looking fish with smooth fins and a vague retro mood. That was the frustration: the adjective described a symptom, not a system. The model had no internal representation of a fixed raster grid. It had learned from upscaled retro screenshots what “pixelated” often looks like, so it gave me blurry edges and fake nostalgia instead of a real lattice. The turning point came when I stopped treating “pixelated” as a style word and started treating it as a production constraint. The prompt needed to explain how the image was built, not just how it should feel.

I tried “8-bit style” next, and the goldfish came back as a chunky NES sprite with rounded silhouettes and a black outline I never wanted. Frustrating, but useful. That failure showed me that style labels pull from whatever visual conventions dominate their training data. The turning point was establishing the grid before any stylistic language appeared. The phrase “native 320x240 resolution with sharp nearest-neighbor upscaling” did more work than ten style adjectives. It told the model the image was produced on a lattice and then scaled, so every later instruction inherited that lattice instead of fighting it.

I still got JPEG-ish mush when I wrote “low resolution,” which was the next frustration. “Low resolution” pulled toward compression artifacts, blocky chroma noise, and muddy color. The turning point was realizing those phrases are downstream of the same mistake: describing the output instead of the construction. For pixelated goldfish art, the prompt has to lock the raster grid first, then describe the goldfish’s shape, color count, and scaling method. Once the grid is fixed, the fish can be whimsical without turning into a soft modern illustration.

Bayer Dithering Is an Algorithm, Not a Texture

Dithering is the mechanism that lets a four-color machine imply dozens of tones. Ordered dithering works by comparing each pixel against a threshold from a repeating matrix; the classic Bayer 4x4 matrix uses the values 0, 8, 2, 10 / 12, 4, 14, 6 / 3, 11, 1, 9 / 15, 7, 13, 5, normalized across the tonal range. Where the underlying tone exceeds the threshold, the pixel lights up; where it does not, it stays dark. The visible result is a regular cross-hatch whose density encodes brightness. The model does not compute this matrix, but the token "Bayer" biases sampling toward exactly that regular structure.

This matters because the alternatives look wrong in specific, recognizable ways. Error diffusion (Floyd–Steinberg and its relatives) produces organic, worm-like noise that clumps and snakes. On a photograph of a face it looks filmic; on a 1987 CGA screen it looks like a mistake, because CGA hardware could not afford per-pixel error propagation. A bare "dithering" instruction gives the model free choice and it usually picks something closer to stochastic stipple. And a halftone dot screen is a third, separate thing — a rotated grid of dots used in print, which is why the prompt asks for halftone bleed only on the phone's plastic, not on the fish.

The second half of the dithering problem is where the gradient lives. If you write "orange-to-yellow gradient," the model will build a smooth ramp and dither over it, producing a soft body with noisy skin. Instead, name the two endpoint colors in hex — #FF2200 and #FFD400 — and state explicitly that every intermediate value is created by dot density alone. That single sentence is what converts a gradient into a screen. The same discipline appears in collage-style image assembly, where each material is specified by its physical behavior rather than by a general impression.

CGA Palette Discipline: Four Colors Per Scanline

IBM's CGA adapter in 1981 offered a small set of fixed palettes, and the most recognizable graphics mode allowed four simultaneous colors. That constraint is the reason the aesthetic exists. It is also the hardest thing to hold in a modern model, because every diffusion sampler wants to interpolate. "Limited palette" does not work — the model reads it as "muted" or "monochrome" and still generates continuous gradients. What works is a hard ceiling expressed per scanline, paired with explicit hex values: four colors maximum on any horizontal line, drawn from #00A8E8, #0044CC, #FF2200, #FFD400, plus white for the telephone.

The per-scanline phrasing is deliberate. A global four-color limit would flatten the fish, the phone, and the palm trees into one shared set and destroy the tonal separation between the cyan sky and the orange body. Per-scanline limits allow the palette to shift down the image while keeping each row banded, which is precisely how real CGA art handled depth. It also produces the characteristic look where adjacent rows disagree slightly — that faint horizontal striping is not an error, it is the artifact of a machine that could not hold a tone across the whole frame.

This is also where you must forbid the model's default lighting habits. Ambient occlusion, soft falloff, and cast shadows all require continuous tone; they cannot survive a four-color-per-line budget. Stating "flat diffuse lighting, zero cast shadows" is not a stylistic preference, it is a logical consequence of the palette ceiling. Remove the constraint and the lighting breaks it for you.

CRT Artifacts and Exploded-View Anchors: Order of Operations

Scanlines, chromatic aberration, and phosphor bloom are three separate low-pass operations, and stacking them at full strength across the whole frame will erase the grid you just built. The solution is sequencing, which mirrors the real signal chain: render, dither, scan, split, glow. Scanlines at 240p density — roughly one dark line every two pixels — are safe globally because they are periodic and thin. Chromatic aberration is not: splitting RGB channels by even two pixels across the entire image destroys the 1-pixel stair-steps in the coiled cord. Confining it to the frame edges preserves the center while still reading as a mis-converged CRT. Phosphor bloom should be limited to bright elements, or it will fog the cyan sky into a single flat value.

Token order matters here as well. Models weight earlier tokens more heavily, so describing the render pipeline before the artifact stack keeps the underlying structure dominant. If you list the artifacts first, the model tends to generate an image that is mostly glow and scanline with a vague subject inside it — the filter becomes the subject.

The exploded view has its own failure mode. "Exploded view" alone gives you floating parts with no relationship: a handset, a base, and a cord arranged arbitrarily in space. What makes an exploded diagram readable is the implied assembly axis. Naming positions — handset upper-left, base tilted lower-right, cord connecting them — converts three objects into one system with a direction of separation. If you want a deeper look at how deconstructed subjects hold together across a frame, the deconstructed portrait approach treats the same problem: the parts must still describe the whole.

Once you have the constraint block written — resolution, dither algorithm, palette ceiling, artifact order — it becomes portable. Swap the goldfish for any subject and the machinery still holds. If you want to calibrate the parameters before committing, Midjourney's stylize value is the lever that controls how aggressively the model departs from your literal instructions; at --s 50 it follows the prompt closely, and pushing it higher is what reintroduces soft gradients. For testing whether a lower-fidelity base model holds the grid better than a high-fidelity one, NightCafe Studio offers enough model variety to compare outputs side by side. Try the same prompt at 160x120 with a two-color limit next; the reduced budget exposes which parts of your description are actually load-bearing and which are decoration.

Key Principle: Declare native resolution before style. State 320×240 with nearest-neighbor upscaling, then constrain every element to a countable unit — 2×2 pixel clusters, four hex colors per scanline. Style adjectives describe symptoms; resolution and units describe causes. If you want to go deeper, read the cyberpunk fashion approach that. If you want to go deeper, read chalkboard rocket art for educational.