Local only — nothing uploaded Firmware guide Est. 2026 · Lector

Lector Xteink Firmware

Flash Lector firmware to your Xteink X3 / X4 reader, and turn any image into a sleep wallpaper — all in your browser, nothing uploaded. Use the Flasher tab to install firmware and the Converter tab for wallpapers.

Source code, release notes and downloadable builds: github.com/diogo7dias/lector

Files must match your screen within 1 px or the device rejects them, so pick the size that matches your reader. On device: set Sleep Screen = Custom and Wallpaper Format to match, then drop the files in /sleep.
Drop images here or click to choose
PNG · JPG · WebP · GIF · BMP · PXC — pick as many as you like. Drop an existing .pxc to re-target it to the other screen.
How it works & the auto settings

PXC is the device's packed format: a 4-byte little-endian width,height header then 2 bits/pixel (4 gray levels: black · dark · light · white), MSB-first. BMP output is a standard 2-bit, 4-gray bitmap the reader also accepts.

  • Auto rendering — the tonal range is measured. Photographs get dithering; logos / line art / text get crisp thresholding. Click the dither / threshold badge under any result to flip that one image; changing the Rendering dropdown resets them all.
  • Dithering — the panel's four levels sit 85 greys apart, so one mis-fired pixel is a whole step away from its neighbours, not a subtle speckle. Diffusion is Floyd–Steinberg, which passes on the whole error and so holds tone exactly; that is why photographs are usually dithered this way. Two things stop it gritting flat areas: the scan alternates direction row by row, which breaks up the diagonal streaks a one-way pass leaves, and a flat area lying close to one of the four levels is placed on that level with its error dropped, so no residue can pile up there. Gradients and detail still dither normally, and a tone genuinely between two levels still mixes both.
  • Cleaner — wallpapers converted before the above will still carry that grit. The Cleaner tab repairs finished .pxc and .bmp files in place of re-converting them, so nothing is re-scaled or re-toned. For a whole card, use scripts/clean_pxc.py from the repository.
  • Auto-contrast — stretches tones to use all four levels so flat images don't come out muddy.
  • FitCover fills and crops; Fit letterboxes; Stretch distorts to fill.
  • Invert — only if a wallpaper shows up looking like a photo negative on your panel.
  • Re-target — drop a .pxc straight in; switch Screen to re-fit and re-encode for the other reader (the badge then reads e.g. X3 → X4).
  • Names — a downloaded .pxc is named for the reader it was fitted to, e.g. sunset_X3.pxc. Re-target it and the name follows the new screen.

All conversion is local (HTML canvas). No server, no upload.