A helper tool for the Lian Li Galahad II LCD AIO pump on Linux, built on top of galahad2lcd.
Solves the practical problem between "galahad2lcd is installed" and "my custom image is actually displaying on the pump reliably, without crashes."
$ pumpify
pumpify v1.0.0 — AIO LCD content library
# FILE SIZE FPS RES STATUS
────────────────────────────────────────────────────────────────────────────
1 Autum Girl-480fill-12s.mp4 0.39 MB 24 480x480 ok
2 Girl Looking at Stars-pump-fit.mp4 1.72 MB 24 480x480 ok
3 grok-bubbles-480.mp4 0.96 MB 24 480x480 ok
4 Red Dimension-480fill-20s.mp4 1.60 MB 24 480x480 ok
5 Red Dimension-480fill-30s.mp4 2.40 MB 24 480x480 ok
6 Train-480fill-45s.mp4 1.76 MB 24 480x480 ok
Options:
# Push that file to the pump
t Transcode a new source into the library
r Refresh library listing
s Show service status
q Quit
galahad2lcd is the solid open-source daemon that actually talks to the pump. But if you just install it and start feeding it video files, you'll learn — through frustration and repeated pump crashes — that the hardware has limits that aren't documented anywhere.
This tool:
- Encodes the pump's empirical limits (framerate, file size, resolution) as hard rules and soft warnings
- Transcodes sources to a pump-safe format using those rules
- Maintains a clean content library so you know which files are safe
- Pushes content to the pump using the specific workflow that actually works reliably
These limits were determined empirically on a Lian Li Galahad II Vision
AIO (firmware N9,01,HS,SQ,CA_II-Vision,V2.01.041,1.6), running Pop!_OS 24.04
with galahad2lcd's default ffmpeg+H.264 pipeline. Most are not documented by
Lian Li.
30 fps content ALWAYS crashes the pump mid-playback, regardless of duration, file size, or content complexity. Typical failure: plays for 5–15 seconds, LEDs freeze, pump resets to factory Lian Li logo.
The pump's MCU appears unable to decode H.264 packets arriving at 33 ms intervals (30 fps). At 42 ms intervals (24 fps) it keeps up fine.
galahad2lcd pre-loads the entire encoded H.264 payload into pump memory before streaming starts. The pump has a receive buffer limit somewhere between 3.5 and 5 MB.
| File size range | Behavior |
|---|---|
| ≤2.5 MB | Reliable in back-to-back swaps |
| 2.5–3.5 MB | Works as a one-shot load, but swapping between large files is flaky |
| ≥3.5 MB | Tends to fail upload (pump stuck on Lian Li logo) |
| ≥5 MB | Reliably fails |
Empirical results at 24 fps, fill mode:
| Duration | Frames | Typical size | Result |
|---|---|---|---|
| 6s | 144 | 0.1 MB | ✓ stable |
| 12s | 288 | 0.5 MB | ✓ stable |
| 20s | 480 | 0.6 MB | ✓ stable |
| 30s | 720 | 1.0 MB | ✓ stable |
| 45s | 1080 | 1.8–3.7 MB | ✓ stable if ≤ ~3 MB |
| 60s | 1440 | ~5 MB | ✗ upload fails |
File size varies with content complexity, not just duration. Busy visual content (e.g., particle effects, high-motion) encodes larger than calm content (landscapes, slow pans) at the same duration.
Scaling is automatic inside pumpify. Fill mode crops to square, fit mode letterboxes with black bars.
galahad2lcd appears to be more reliable when the config path it's given is
kept short and stable. Specifically, changing MYAPP_ARGS between widely
different paths across swaps showed higher crash rates than staging all files
through a fixed short-path folder. pumpify always stages through
~/.pumpify-staging/ before pointing galahad2lcd at the file; the
config path never varies, only the file contents behind it.
Whether this is galahad2lcd, ffmpeg caching, kernel I/O timing, or the pump's own behavior isn't clear. But empirically, the short-path staging pattern correlates with dramatically fewer crashes.
- galahad2lcd installed and working
ffmpeg(brings inffprobe)systemd
sudo apt install ffmpeg# Clone the repo
git clone https://github.com/arcshi/galahad2lcd-helper.git ~/galahad2lcd-helper
# Symlink pumpify into your PATH
mkdir -p ~/.local/bin
ln -s ~/galahad2lcd-helper/pumpify ~/.local/bin/pumpify
chmod +x ~/galahad2lcd-helper/pumpify
# Verify
pumpify --help~/Pictures/pumpify/— your clean content library (pump-safe transcoded files)~/.pumpify-staging/— internal staging, don't touch/etc/default/galahad2lcd— galahad2lcd's config (pumpify edits via sudo)
pumpifyLaunches a menu showing your library and what's on the pump. From there:
- Type a file number to push it to the pump
- Type
tto transcode a new source into the library - Type
sto check service status - Type
qto quit
From the menu, pick t, then:
- Paste (or drag) a source file path
- Choose fill (crop to square) or fit (letterbox)
- pumpify transcodes at 24 fps, CRF 24, up to 45 seconds
- If the result exceeds 2.5 MB, you're offered choices: shorten duration, increase compression, accept anyway, or discard
Supported sources: MP4, MOV, MKV, WebM, AVI, GIF, and still images. Basically anything ffmpeg can read.
For scripting or rapid swaps:
pumpify push ~/Pictures/pumpify/Train-480fill-45s.mp4Skips the menu, applies the file immediately.
The pump will occasionally crash during a swap — stuck on the factory Lian Li logo. This is normal and recoverable. Don't panic and don't try to "fix" it with anything drastic.
Just push another file. pumpify's next push cycle will recover the pump
~95% of the time.
pumpify push ~/Pictures/pumpify/<any-pump-safe-file>Keep pushing. Each push triggers a stop/start of galahad2lcd, which will eventually either recover the pump or push it all the way into the Lian Li logo state — which pumpify can then recover from. Pushing is cheap and safe; let it crash fully if needed.
Full OS shutdown, wait 30 seconds, power on. (Not a reboot — a true cold boot. The pump capacitors need time to fully drain for a firmware reset.)
sudo shutdown -h now
# Wait 30 seconds
# Press power buttongalahad2lcd auto-starts on boot with your last-configured file. Pump comes back clean.
sudo apt install ffmpeggalahad2lcd isn't installed (or was installed in a non-standard way). Install galahad2lcd first: https://github.com/H4rk3nz0/GalahadII_LCD_Linux
- Wait the full 15 seconds — initial upload takes that long
- Check
systemctl is-active galahad2lcd.service— must beactive - Check journal:
sudo journalctl -u galahad2lcd.service -n 30 - Look for line
[+] Streaming from RAM at 24.00 FPS. If absent, service failed to connect. Restart withsudo systemctl restart galahad2lcd.
Try these in order:
- Shorten duration (pumpify offers this automatically)
- Increase CRF (pumpify offers this too, up to CRF 32)
- Pick a less visually complex source if you can
Content with constant motion and high detail (particle effects, fireworks, rain) encodes larger than content with repeated frames (slow pans, still scenes).
- Only tested on Lian Li Galahad II Vision. Other variants (Trinity, LCD, LCD SL-INF) likely work similarly but aren't confirmed. Please open an issue if you test on another variant.
- Rotation is fixed at 0°. Edit
/etc/default/galahad2lcdmanually if you need a different rotation. - No real-time widgets. This tool only handles pre-rendered image/video content. For live CPU/GPU/RAM displays, try lianli-linux-daemon (under active development).
- H4rk3nz0 for galahad2lcd — the reliable daemon this tool builds on
- sgtaziz for lianli-linux-daemon — complementary project exploring live widget support
MIT — see LICENSE file.