Devlog

Dusting off Diablo's loot

How we repainted all 179 of Diablo's inventory pictures, and why the hardest part was leaving them alone.

If you played Diablo back then, you know this grid by heart: ten slots across, four down, and the red tint saying you're too weak for what you just found. We spent whole evenings at Griswold's counting gold we didn't have.

A splint mail, then and now. Drag the divider:

A splint mail in its six inventory slots, as Diablo drew it in 1996The same splint mail in Brutal Diablo
Diablo (1996)Brutal Diablo
Captured in the game. Every stud and lace is where Blizzard North put it.

All 179 pictures got this, the eleven mouse cursors in their file included, each checked against 1996 at every step. Here's how: an upscaler that wasn't enough, five painting models in a bake-off, the game's own colours and a little shine.

Bigger is the easy part

Brutal Diablo draws the whole game four times wider and taller than the original 640×480. The inventory hadn't even tried yet: a sword 28 pixels wide was stretched over 112, and it showed.

For the rest of the game we picked 4x-SGI as the default, until something better turns up. It's an upscaler trained on 1990s computer graphics and made for pre-rendered sprites like Diablo's. It draws each picture four times larger, then we snap the colours back to the game's and cut the outline clean. Below, "4x-SGI" means that whole chain. On the full helm:

The full helm at one step of 4x-SGI
1996UpscaledLockedCut
Step: Diablo (1996)

The 1996 picture, every pixel four times larger, as Brutal Diablo showed it until now.

Up close you see the limits: flat areas go soft and painted detail smears. Items sit still right under your nose, so for them it wasn't going to do.

We tried to squeeze more out of it: depth models for shape, Potrace to trace the outline and then every colour edge, the upscaler twice, the old pixel-art filters xBR and hqx. Two of them on the same helm, beside 4x-SGI:

  • The full helm through 4x-SGI
    4x-SGI, for comparison.
  • The helm rebuilt from its colour edges, traced by Potrace
    Potrace on every colour edge: a cartoon.
  • The helm lit from Depth Anything V2's depth
    Depth Anything V2's depth: shinier, still smeared.

Each changed something; none made the helm look painted. The detail wasn't in the picture, so something had to paint it.

Five painters, one bake-off

That takes a painting model. Most are diffusion models: they learned to clean noise out of pictures, step by step, toward a text description. Hand one our picture under a layer of noise and it repaints it as much as we let it, and will just as happily redesign it.

We tried five on 15 items: SeedVR2, Clarity, Nano Banana Pro, SDXL with a tile ControlNet (an add-on network that keeps the painter to our picture's shapes), and FLUX.1-dev with Jasper's upscaler ControlNet. On our items SeedVR2 added very little, and SDXL went plastic the moment it got more freedom. The final three, on 30 items:

Item
Diablo (1996)
Diablo (1996)
4x-SGI
4x-SGI
Flux
Flux
Clarity
Clarity
Nano Banana Pro
Nano Banana Pro

Flux and Clarity at the same light touch, Nano Banana Pro asked nicely to keep the design; all three finished with the same outline and colour snap as 4x-SGI.

Nano Banana Pro painted the prettiest pictures, but it invented too much:

  • The tower shield in Diablo (1996)
    Diablo (1996)
    Nano Banana Pro's tower shield
    Nano Banana Pro

    The tower shield's plain straps became a big ornate cross.

  • The kite shield in Diablo (1996)
    Diablo (1996)
    Nano Banana Pro's kite shield
    Nano Banana Pro

    The kite shield came back covered in knotwork.

Each next to the picture it was meant to keep.

Clarity stayed faithful only at a light touch. Flux won, keeping Blizzard North's shapes from one short description per picture ("butcher's cleaver", "steel gauntlet hand pointer") and the same seed every time, so a rerun paints the same picture.

How much Flux may repaint is one number: 0 changes nothing, 1 starts from pure noise. We stepped it from 0.25 to 0.45 on all 30 items. Watch the blood on the cleaver:

Item
The item at one strength
1996.25.30.35.40.45
Strength: 0.40, kept

Up to 0.40 every item gains brushwork and stays itself; at 0.45 the blood grows new shapes. We kept 0.40 and ran the other 149, about half an hour on one rented GPU.

Last, the colours. Flux paints in millions; Diablo shows 256 at a time, and items use only numbers 128 to 254 of those, plus black: the half that never changes between levels, so a sword looks the same in town as in Hell. We snap each pixel to the nearest shade among the runs its 1996 neighbourhood used, which keeps a blue gem blue. A cleaver patch, enlarged three times:

A patch of Flux's cleaver in its own colours, enlargedThe same patch in the game's colours
FluxLocked
Almost 10,000 colours in Flux's cleaver at game size, 32 once locked. Good luck telling them apart in the game.

The game's colour tricks need that. An item you can't use is drawn red through a table that swaps each colour (like the monsters' in our blood post); on the game's colours it works as in 1996:

A red splint mail in the bag, Diablo (1996)The same red splint mail, Brutal Diablo
Diablo (1996)Brutal Diablo
A splint mail our hero is too weak to wear.

We tried to make them evil

Once the pictures were faithful, we wanted them a bit more ours. This is Brutal Diablo, after all. On an early version we tried grim, blood in the grooves, a hellfire glow, and all three:

Item
The item in one grade
NoneGrimBloodFireAllSoftHalf
Grade: As repainted

The picture every grade started from.

Blood and fire went first: they add what the items never had. Nano Banana Pro's three evil repaints didn't stay either. Grim came closest, two softer takes to the end, and then we shipped none. Brutal Diablo adds detail and gore; the items' colours stay Blizzard North's.

Shape and shine

Faithful, but flat: Flux's steel and leather catch the light alike. Blizzard North rendered Diablo's heroes and monsters from 3D models, and the items look like they got the same treatment. We wanted that shine back.

For the shape, Depth Anything V2 guesses from one picture how far away each pixel is, and from that we work out which way each bit of surface faces. Arkaine's Valor (lighter is nearer):

Arkaine's Valor as Flux repainted it, before any shading
The picture it was given
Depth Anything V2's depth for Arkaine's Valor, in grey: the shoulders and chest nearest
Depth Anything V2's guess
The raw output. Nobody told it this was armour; it found the shoulders and chest by itself.

For the shine, each item's colour runs are marked steel, silver, gold, glass, gems, paint, wood, leather or paper. Gold gets a warm highlight, leather almost none, then the same snap to the game's colours. How strong? A dial:

Item
The item at one strength of shading
1996Unlit0.20.41.0
Shading: 0.4, kept

At 1.0 everything looks wet, like somebody licked it, and our first try ran at about that. It also taught us to put a floor under the darkening: without one, a book's pages went black and the snap to the game's colours frayed them pink. We kept 0.4.

One more fix: our first version lit the items from the upper left. We measured the shading in the 1996 pictures, and Blizzard North lit most of them from the upper right, so we flipped it.

Move the light around Arkaine's Valor yourself (drag it, or use the arrow keys):

Strength0.40 (shipped)
Light: 45° right of up, as shipped. Snapped to the game’s colours.

Press H

The pictures show up in five places: bag and belt, your cursor, and three that DevilutionX added: the stash, Griswold's visual store and his list with pictures. We make them once and they go everywhere; underneath, the game still thinks in the old sizes and slots. Pick a place, then press H (or the key below) for 1996:

Place
The pictures in the game

The bag. H sends the items back to 1996 with everything else.

And a full bag, then and now. Same loot, thirty years apart:

A bag of armour, helms and potions in Diablo (1996)The same bag in Brutal Diablo
Diablo (1996)Brutal Diablo
All 179 are recreated to match the original; these are the ones that fit one bag.

Seventy-one of them are on the items page, beside 1996. Tell us which one we got wrong (there's always one) on our Discord. Brutal Diablo is free and coming early 2027.

Fresh eyes

Looking at the same pictures every day, you stop seeing them. That happened to us here, and it's a big part of why we share the work while it's still in progress.

Right after the items went out, some fans in comment sections told us the blood on the Butcher's Cleaver looked like plastic. They were right, and it took fresh eyes to see it. So we did another round, and for a few of the materials we found a better way to bring them closer to 1996.

Item
Diablo (1996)
Diablo (1996)
As we first shipped it
First version
Redrawn from the 1996 picture
Now

Diablo (1996), our first version and the one in the game now.

We like working this way. We show things early, we listen, and we fix them quickly. If something looks off to you, tell us in the comments or on our Discord. We read every comment, and yours just made the game better.

Thanks

To the DevilutionX folks, who keep Diablo running on today's machines. To Blizzard North, for these items and the fever dream we're still chasing. And to the model makers: Black Forest Labs for FLUX.1-dev, Jasper for the upscaler ControlNet, the Depth Anything V2 authors, and ChrisNonyminus for 4x-SGI.

Tips

Brutal Diablo will be free once released. Throw a coin and it goes into dev time, GPU hours and coffee.

This mod is a love letter to the original game, so nothing here is for sale. But every tip really helps us keep the development going. Thank you.

Tip on Ko-fi