Gigapixel wallpapers
driftwm’s canvas is infinite, so the background can be far larger than one screen — a gigapixel image becomes the canvas itself, something you pan over and zoom out to take in. It has to be a tiled pyramidal TIFF, because an ordinary PNG/JPG is uploaded as a single GPU texture and maxes out around 8K–16K pixels per side. Tiled (cut into small squares) and pyramidal (stored at several progressively smaller copies) lets driftwm load only the tiles in view and switch to a smaller copy as you zoom out, so it never holds the whole image at full resolution.
Converting an image
The simplest route is libvips:
vips tiffsave input.jpg output.tif --tile --pyramid --bigtiff --compression=deflate
Then point your config at the result:
[background]
type = "tile"
path = "~/Pictures/output.tif"
--compression=deflate is lossless — preferable for a wallpaper you’ll zoom
right into. --compression=jpeg is smaller but lossy, and needs --rgbjpeg
alongside it: without that flag libvips stores the tiles as YCbCr, which driftwm
can’t decode.
Alternative: GDAL
If your source is already a GeoTIFF or you work with GIS tools, GDAL produces an equivalent tiled pyramid (a Cloud-Optimized GeoTIFF is a tiled pyramidal TIFF):
gdal_translate -of GTiff -co TILED=YES -co COMPRESS=DEFLATE input.tif output.tif
gdaladdo -r average output.tif 2 4 8 16 32
Requirements
A file that misses any of these falls back to the dot grid, with the reason on the error bar:
- RGB8 or RGBA8 pixels. 16-bit, grayscale, CMYK, and YCbCr sources are rejected — convert to 8-bit RGB before tiling.
type = "tile". TIFF isn’t supported inwallpapermode, which reads PNG/JPEG only.- Tiled, not stripped, which is what
--tile/-co TILED=YESabove produces.
mirror_tile is a no-op on pyramidal TIFFs — pre-mirror the source if you want
that look.
What to expect
- The first frames are blank. Tiles load lazily, so roughly the first 5–10 frames after startup or a config reload render nothing while the visible set fills in. That’s normal, not a failure.
- The image is centered on canvas (0, 0) and repeats outward from there.
home-toggle(Mod+Aby default) brings you back to its center. [background] cache_budget_mbgoverns sharpness. It caps how much of the image is held on the GPU (128 MB by default, LRU-evicted). Too low and revisited areas stay blurry while the finer tiles reload; raise it on a large or HiDPI display, lower it on a memory-constrained machine.
Where to find images
You need a single downloadable file — a large JPEG, PNG, or TIFF past ~16K on a side — not a zoom viewer that only streams tiles. Beyond that it’s down to taste: the canvas tiles infinitely, but on something this large the repeat is far off-screen, so a non-seamless edge rarely matters.
Some sources:
- World & satellite maps — NASA’s Blue Marble is a public-domain whole-Earth image up to 43200 × 21600 px (TIFF/JPG). Maps suit the canvas nicely — panning around one feels like exploring.
- Wikimedia Commons — Large images and Gigapixel images: a big pool of maps, panoramas, and scans in the 16K–40K range, each with its license on its own page (many public domain or CC). If a download only gives you a thumbnail, see downloading very large files.
- Astronomy — ESA/Hubble’s Andromeda mosaic is 42208 × 9870 px under CC BY 4.0 (credit “ESA/Hubble”); NASA imagery is public domain.
Then run your pick through the conversion step above.