Repository navigation
Pictures and animations
The engine can show an image on its wall. Every pixel becomes the block whose color comes closest. Animated GIFs play by themselves.

Left the original, then previews computed from the block textures at growing wall widths.
![]()
A 200 x 298 wall building up, and a close-up from a few blocks away.
- The engine with its wand (the marked wall). No pixel block and no text.
- An image: PNG, JPEG, GIF or BMP.
- A program: the Script Box (drop the image onto the box) or a CC: Tweaked computer (image from its disk or from the internet).
-- Script Box: mona.png was dropped onto the box
engine.claim()
local ok, reason = engine.drawImage("mona.png", { fit = "fill", dither = true })
print(ok, reason)-- CC: Tweaked: from the computer's disk, or from the web
local engine = peripheral.find("billboard_engine")
local file = fs.open("mona.png", "rb")
local data = file.readAll() file.close()
-- local data = http.get("https://example.com/cat.gif", nil, true).readAll()
print(engine.drawImage(data))Options (fit, dither, loop) and the other picture functions are in the Lua reference.
A face is recognizable at 64 blocks wide and looks good from 128 up. Walls can be up to 256 x 384,
or 512 wide with max_width in the settings.
About 260 plain vanilla blocks are used: wool, concrete, terracotta, planks, logs, stones, ores, metal blocks and more. All for free, like the pixel block of a text.
Only blocks that are full, opaque, have no block entity, do not fall, tick, glow or give redstone power are used.
So no grass, no copper that oxidizes, no sand, no glowstone. A few more are left out by the block tag
billboard:not_for_pictures (TNT, pumpkin heads, sponge, bedrock, redstone lamps, copper bulbs ...). A data pack
can add blocks to that tag.
The colors were measured from the vanilla textures. Resource packs don't change the choice, and blocks from other mods are not used.
Blocks can't be as bright and saturated as a screen. Pure red (255, 0, 0) ends up as orange concrete; red concrete
is about (142, 32, 32). Pictures with soft, natural colors work best. Raise the contrast a little before you use
an image, and try dither = true for still pictures.
Transparent parts of an image keep the wall's own blocks. So does alpha below 128 in drawPixels.
Only blocks that change are set, at most blocks_per_tick (8192) per tick. A new picture on a big wall builds up
over a few ticks, about a second for 512 x 384. A new picture on the same wall replaces the old one without
showing the original wall in between.
Big animations are limited by your computer redrawing the changed chunks, not by the server. Small or mostly still animations run at their full speed; one that changes all of a 256 x 256 wall manages a few frames per second.
- File up to 16 MB (Script Box: 2 MB per image by default), image up to 4096 x 4096.
- All frames together up to 16 million wall pixels: a 256 x 256 wall takes 256 frames.
- A CC computer's disk holds 1 MB unless raised in the CC: Tweaked config, so bigger files come over
http.
The picture is not saved with the engine. After a world restart the wall keeps the last picture (still protected,
Restore works), but an animation stands still. A Script Box simply starts its program again and shows it anew;
on CC put the program into startup.lua.
Billboard Engine by Claude and Konitor · MIT License · Source · Report a problem · Made with Claude AI.
Basics
- Getting started
- Walls and the Selector Wand
- The engine screen
- Letters and sizes
- Protection and backup
Redstone
Scripting
Reference