Just a quick path to get Skyscraper running on the Steam Deck for EmuDeck / EmulationStation-DE. ES-DE’s built-in scrapers can time out or stall on large sets. Skyscraper caches metadata and media, then writes a gamelist in a second pass so you can scrape from more than one source without starting over.
You need Desktop Mode with a sudo password set, or an SSH session as deck. Do not turn off pacman signature checks. SteamOS is a read-only image; a SteamOS update will wipe anything installed under /usr, so install Skyscraper into your home directory.
1. Unlock the rootfs and install a compiler toolchain
Prefer steamos-devmode if it exists (it initializes the keyring for you). Otherwise do it by hand:
if command -v steamos-devmode >/dev/null; then
sudo steamos-devmode enable --no-prompt
else
sudo steamos-readonly disable
sudo pacman-key --init
sudo pacman-key --populate
fi
# Qt6 if the repos have it; otherwise Qt5 still builds Skyscraper
sudo pacman -S --needed --noconfirm
base-devel git p7zip python sqlite
qt6-base qt6-tools
|| sudo pacman -S --needed --noconfirm
base-devel git p7zip python sqlite
qt5-base qt5-tools
2. Build into ~/.local (survives SteamOS updates)
There is no ~/workspace on a stock Deck. Use the official Gemba installer and set PREFIX so make install does not write into the read-only rootfs:
mkdir -p ~/skysource ~/.local
cd ~/skysource
wget -q -O - https://raw.githubusercontent.com/Gemba/skyscraper/master/update_skyscraper.sh
| PREFIX="$HOME/.local" bash -s --
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"
hash -r
Skyscraper --version
If you used steamos-readonly disable instead of steamos-devmode, lock the image again when the build is done: sudo steamos-readonly enable.
3. Scrape, then generate the gamelist
Skyscraper is two commands, not one. -s only fills the local cache. Artwork and gamelist.xml appear only when you run it again without -s. EmuDeck’s frontend is ES-DE, so pass -f esde. Replace the SD card label (or use /home/deck/Emulation if you installed internally):
ROMS="/run/media/deck/<sdcard>/Emulation/roms/mame"
# Phase 1: gather into ~/.skyscraper/cache (arcadedb is MAME-oriented;
# screenscraper is usually a better second pass if you have an account)
Skyscraper -p mame -s arcadedb -f esde -i "$ROMS" -t 4
# Phase 2: write gamelist + composited media for ES-DE
Skyscraper -p mame -f esde -i "$ROMS"
-o is the media output folder, not a substitute for phase 2. Only set it if you need a non-default location; with -f esde, Skyscraper already uses ES-DE’s downloaded_media path. After generating, fully quit ES-DE (not just Home) so it reloads the new gamelist.