Repository: kageurufu/steamdeck_startup_animations Branch: main Commit: f911b20acfad Files: 22 Total size: 6.6 KB Directory structure: gitextract_6pe7eui1/ ├── README.md ├── deck_startup/ │ ├── deck_startup.3ds.webm │ ├── deck_startup.64dd.webm │ ├── deck_startup.dreamcast.webm │ ├── deck_startup.ds.webm │ ├── deck_startup.dsi.webm │ ├── deck_startup.gamecube.webm │ ├── deck_startup.gb.webm │ ├── deck_startup.gba.webm │ ├── deck_startup.gbc.webm │ ├── deck_startup.ps1.webm │ ├── deck_startup.ps2.webm │ ├── deck_startup.ps4.webm │ ├── deck_startup.switch.webm │ ├── deck_startup.switchfirst.webm │ ├── deck_startup.x360.webm │ ├── deck_startup.xbone.webm │ └── deck_startup.xbox.webm ├── install.sh ├── randomize_deck_startup.service ├── randomize_deck_startup.sh └── uninstall.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # steamdeck_startup_animations A collection of steamdeck startup animations, plus a script to randomize your startup on each boot # So far, I've made boot animations from the following consoles: * dreamcast * ps1 * ps2 * ps4 * switch * gamecube * ps2 * switchfirst (first boot animation) * switch (regular boot animation) * xbox * xbox 360 * xbox one # Installation ```sh curl -o - https://raw.githubusercontent.com/kageurufu/steamdeck_startup_animations/main/install.sh | bash - ``` If you're (justifiably) not a fan of `curl | bash`, you can run this: ```sh mkdir -p "$HOME/homebrew" mkdir -p "$HOME/.config/systemd/user" git clone https://github.com/kageurufu/steamdeck_startup_animations "$HOME/homebrew/startup_animations" ln -sf "$HOME/homebrew/startup_animations/randomize_deck_startup.service" "$HOME/.config/systemd/user/randomize_deck_startup.service" systemctl --user daemon-reload systemctl --user enable --now randomize_deck_startup.service ``` # Uninstallation ```sh bash $HOME/homebrew/startup_animations/uninstall.sh ``` # Making an animation (somewhat advanced) I used youtube-dl to grab the best video and audio tracks from youtube, and then ffmpeg to merge them, resizing down to fit the Deck's 1280x800 screen. Then I use `truncate` to make the file the right size. This all does work on the steamdeck ### Getting the dependencies ```sh python3 -m ensurepip ~/.local/bin/pip install --user youtube-dl ``` ### Creating the animation ```sh # Get ps1.webm and ps1.m4a. Your file extensions may differ here ~/.local/bin/youtube-dl -f bestvideo -o 'ps1.%(ext)s' https://www.youtube.com/watch?v=1JwbfIi5Uio ~/.local/bin/youtube-dl -f bestaudio -o 'ps1.%(ext)s' https://www.youtube.com/watch?v=1JwbfIi5Uio # Convert the video from whatever input formats to a webm video in VP9 encoding, with vorbis encoded audio ffmpeg -i ps1.webm -i ps1.m4a \ -map 0:v:0 -map 1:a:0 \ -filter:v "scale='min(1280,iw)':min'(800,ih)':force_original_aspect_ratio=decrease,pad=1280:800:(ow-iw)/2:(oh-ih)/2" \ -c:v vp9 \ -c:a libvorbis \ my_deck_startup_ps1.webm # Make sure the generated file is less than 1840847B here # Mine was `389670`, plenty small enough stat -c '%s' my_deck_startup_ps1.webm truncate -s 1840847 my_deck_startup_ps1.webm ``` The ffmpeg command is a bit confusing, so heres a breakdown * `-i ps1.webm -i ps1.m4a` Load both the video and audio files we downloaded. * `-map 0:v:0 -map 1:a:0` Only use the first video stream from the first file, and first audio stream from the second. This prevents having multiple video or audio streams in the final file * `-filter:v "scale='min(1280,iw)':min'(800,ih)':force_original_aspect_ratio=decrease,pad=1280:800:(ow-iw)/2:(oh-ih)/2"` This is most confusing part, basically we're resizing the video to fit 1280x800 `min'(1280,iw)':min'(800,ih)'` ensures the target size is never upscaled `force_original_aspect_ratio=decrease` scales to fit within a given size, keeping the original aspect ratio `pad=1280:800:(ow-iw)/2:(oh-ih)/2` pad the video size to 1280:800, centering the original video. This is optional and I might not use it in the future * `-c:v vp9 c:a libvorbis` Select our output VP9 / vorbis codecs ================================================ FILE: install.sh ================================================ #!/usr/bin/env bash # Create required directories echo ":: Creating required directories" mkdir -p "$HOME/homebrew" mkdir -p "$HOME/.config/systemd/user" # Clone the startup animations repository if [[ ! -d "$HOME/homebrew/startup_animations" ]]; then echo ":: Installing to $HOME/homebrew/startup_animations" git clone https://github.com/kageurufu/steamdeck_startup_animations "$HOME/homebrew/startup_animations" cd "$HOME/homebrew/startup_animations" else echo ":: Updating $HOME/homebrew/startup_animations" cd "$HOME/homebrew/startup_animations" git pull fi # Install the service file echo ":: Installing the startup service" ln -sf "$HOME/homebrew/startup_animations/randomize_deck_startup.service" "$HOME/.config/systemd/user/randomize_deck_startup.service" systemctl --user daemon-reload systemctl --user enable --now randomize_deck_startup.service ================================================ FILE: randomize_deck_startup.service ================================================ [Unit] Description=Randomize deck_startup.webm after boot [Install] WantedBy=default.target [Service] Type=oneshot WorkingDirectory=/home/deck/homebrew/startup_animations # ExecStartPre=/bin/sleep 30 ExecStart=/home/deck/homebrew/startup_animations/randomize_deck_startup.sh ================================================ FILE: randomize_deck_startup.sh ================================================ #!/usr/bin/env bash Color_Off='\033[0m' # Text Reset # Regular Colors Black='\033[0;30m' # Black Red='\033[0;31m' # Red Green='\033[0;32m' # Green Yellow='\033[0;33m' # Yellow Blue='\033[0;34m' # Blue Purple='\033[0;35m' # Purple Cyan='\033[0;36m' # Cyan White='\033[0;37m' # White msg() { echo -e ":: ${*}$Color_Off" } msg2() { echo -e "$Red!!$Color_Off ${*}$Color_Off" } DECK_UIOVERRIDES="/home/deck/.steam/root/config/uioverrides" DECK_UIOVERRIDES_MOVIES="${DECK_UIOVERRIDES}/movies" DECK_UIOVERRIDES_STARTUP="${DECK_UIOVERRIDES_MOVIES}/deck_startup.webm" restore_backup() { DECK_STARTUP_FILE="/home/deck/.steam/steam/steamui/movies/deck_startup.webm" DECK_STARTUP_STOCK_MD5="4ee82f478313cf74010fc22501b40729" if [[ -f "$DECK_STARTUP_FILE.backup" ]]; then checksum="$(md5sum "$DECK_STARTUP_FILE" | cut -d ' ' -f 1)" if [[ "$checksum" != "$DECK_STARTUP_STOCK_MD5" ]]; then rm "$DECK_STARTUP_FILE" mv "$DECK_STARTUP_FILE.backup" "$DECK_STARTUP_FILE" fi rm "$DECK_STARTUP_FILE.backup" fi } list_animations() { find deck_startup/ -type f -iname '*.webm' -print0 } random_animation() { mapfile -d $'\0' animations < <(list_animations) echo "${animations[$RANDOM % ${#animations[@]}]}" } restore_backup animation="$(random_animation)" msg "Using $animation" mkdir -p "${DECK_UIOVERRIDES_MOVIES}" ln -f "$animation" "$DECK_UIOVERRIDES_STARTUP" ================================================ FILE: uninstall.sh ================================================ #!/usr/bin/env bash if [[ -e "$HOME/.config/systemd/user/randomize_deck_startup.service" ]]; then echo ":: Removing the boot service" systemctl --user disable randomize_deck_startup.service rm "$HOME/.config/systemd/user/randomize_deck_startup.service" fi if [[ -f "$HOME/.steam/steam/steamui/movies/deck_startup.webm.backup" ]]; then echo ":: Restoring deck_startup.webm.backup" rm "$HOME/.steam/steam/steamui/movies/deck_startup.webm" mv "$HOME/.steam/steam/steamui/movies/deck_startup.webm.backup" "$HOME/.steam/steam/steamui/movies/deck_startup.webm" fi if [[ -L "$HOME/.steam/root/config/uioverrides/movies/deck_startup.webm" ]]; then rm "$HOME/.steam/root/config/uioverrides/movies/deck_startup.webm" fi if [[ -e "$HOME/homebrew/startup_animations" ]]; then echo ":: Deleting the startup_animations directory" rm -rf "$HOME/homebrew/startup_animations" fi