Command Line Usage

Walrio provides several command-line tools for audio file management and processing. These tools are located throughout the modules/ directory and can be run directly as Python scripts.

Available Tools

Addons Tools

Convert

Location: /home/runner/work/Walrio/Walrio/modules/addons/convert.py

Audio File Converter using FFmpeg

Complete Help Output:

usage: convert.py [-h] [--type {file,directory,auto}] [-o OUTPUT] [-r]
                  [--skip-existing] [-y]
                  [-f {mp3,aac,opus,ogg,flac,alac,wav,wv}] [--metadata {y,n}]
                  [-b BITRATE] [-d {16,24,32}]
                  [--sample-rate {44100,48000,96000,192000,320000}]
                  [--channels {1,2}] [-q {low,standard,high,maximum}] [-i]
                  [--logging {low,high}] [--list-formats]
                  input [input ...]

Audio File Converter using FFmpeg

positional arguments:
  input                 Input file(s) or directory to convert

options:
  -h, --help            show this help message and exit
  --type {file,directory,auto}
                        Explicitly specify if inputs are files or a directory
                        (default: auto-detect)
  -o OUTPUT, --output OUTPUT
                        Output directory (default: same as input)
  -r, --recursive       Recursively process directories
  --skip-existing       Skip existing files
  -y, --force-overwrite
                        Force overwrite of existing files without prompting
  -f {mp3,aac,opus,ogg,flac,alac,wav,wv}, --format {mp3,aac,opus,ogg,flac,alac,wav,wv}
                        Output format (default: flac)
  --metadata {y,n}      Preserve metadata: y=yes (default), n=no
  -b BITRATE, --bitrate BITRATE
                        Audio bitrate for lossy formats (e.g., 128k, 256k,
                        320k)
  -d {16,24,32}, --bit-depth {16,24,32}
                        Bit depth for lossless formats
  --sample-rate {44100,48000,96000,192000,320000}
                        Sample rate in Hz
  --channels {1,2}      Number of audio channels (1=mono, 2=stereo)
  -q {low,standard,high,maximum}, --quality {low,standard,high,maximum}
                        Encoding quality preset
  -i, --info            Display information about the input file and exit
  --logging {low,high}  Logging level: low (default) or high (verbose)
  --list-formats        List supported output formats and exit

Examples:
  # Convert a single file to MP3
  python convert.py input.wav --format mp3

  # Convert multiple files at once
  python convert.py file1.wav file2.mp3 file3.flac --format ogg

  # Convert a directory of files to FLAC (default format)
  python convert.py /music/input

  # Convert files from multiple directories
  python convert.py /music/input1 /music/input2 -o /music/output

  # Explicitly specify that inputs are files
  python convert.py file1 file2 --type file

  # Convert files recursively without metadata, high logging level
  python convert.py /music/input -o /music/output -r --metadata n --logging high

  # Force overwrite existing files without prompting
  python convert.py input.flac -f opus -y

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/addons/convert.py --help

File Relocater

Location: /home/runner/work/Walrio/Walrio/modules/addons/file_relocater.py

Audio Library Organizer - Organize files into folder structures using metadata

Complete Help Output:

usage: file_relocater.py [-h] [-r] [--folder-format FOLDER_FORMAT]
                         [--replace-char OLD NEW] [--dontreplace] [--sanitize]
                         [--dont-sanitize] [--custom-sanitize CHARS]
                         [--dry-run] [--copy] [--skip-existing]
                         [--skip-no-metadata] [--logging {low,high}]
                         [--list-metadata FILE]
                         source destination

Audio Library Organizer - Organize files into folder structures using metadata

positional arguments:
  source                Source directory containing audio files to organize
  destination           Destination root directory for organized library

options:
  -h, --help            show this help message and exit
  -r, --recursive       Recursively process subdirectories in source
  --folder-format FOLDER_FORMAT
                        Folder structure format using metadata fields in
                        {field} syntax (default:
                        '{album}/{year}/{albumartist}')
  --replace-char OLD NEW, --rc OLD NEW
                        Replace a specific character in folder names. Takes
                        two arguments: old character and new character (e.g.,
                        --replace-char '/' '-'). Use multiple times for
                        multiple replacements.
  --dontreplace, --dr   Disable default character replacements. Only use
                        custom --replace-char replacements.
  --sanitize, --s       Enable folder name sanitization using the allowed
                        character set (default behavior).
  --dont-sanitize, --ds
                        Disable folder name sanitization using the allowed
                        character set. Only apply character replacements.
  --custom-sanitize CHARS, --cs CHARS
                        Use custom character set for sanitization instead of
                        default. Provide all allowed characters as a string
                        (e.g., --cs 'abcABC123-_ ').
  --dry-run             Show what would be organized without actually moving
                        files
  --copy                Copy files instead of moving them (preserves original
                        library)
  --skip-existing       Skip organization if target file already exists
                        (default: True)
  --skip-no-metadata    Skip files that have no metadata for the specified
                        format fields
  --logging {low,high}  Logging level: low (default) or high (verbose)
  --list-metadata FILE  Show all available metadata fields for a specific file
                        and exit

Examples:
  # Organize music library using default format: album/albumartist
  python organize.py /path/to/music/library /path/to/organized/library

  # Custom folder format with year and genre
  python organize.py /music /organized --folder-format "{year}/{genre}/{albumartist}/{album}"

  # Artist-based organization
  python organize.py /music /organized --folder-format "{artist}/{album}"

  # Detailed organization with track info
  python organize.py /music /organized --folder-format "{albumartist}/{year} - {album}"

Available pre-defined metadata fields:
  {title}       - Song title (searches: title, Title, TITLE, TIT2, etc.)
  {album}       - Album name (searches: album, Album, ALBUM, TALB, etc.)
  {artist}      - Track artist (searches: artist, Artist, TPE1, etc.)
  {albumartist} - Album artist (searches: albumartist, AlbumArtist, TPE2, etc.)
  {track}       - Track number (searches: track, Track, tracknumber, etc.)
  {year}        - Release year (searches: year, Year, date, Date, etc.)
  {genre}       - Music genre (searches: genre, Genre, GENRE, etc.)
  {disc}        - Disc number (searches: disc, Disc, discnumber, etc.)
  {composer}    - Composer (searches: composer, Composer, TCOM, etc.)
  {comment}     - Comment field (searches: comment, Comment, COMM, etc.)

You can also use any raw metadata tag name (case-sensitive):
  {ARTIST}      - Use exact tag name from file
  {TPE1}        - Use ID3v2 tag directly
  {Custom_Tag}  - Use any custom tag present in the file

Character replacement examples (default: problematic chars become safe alternatives):
  --replace-char "/" "-"             # Replace forward slashes with dashes (default)
  --rc ":" "-"                       # Replace colons with dashes (default, using shortcut)
  --replace-char "&" "and"           # Replace ampersands with 'and'
  --rc "/" "-" --rc "&" "and"        # Multiple replacements using shortcuts
  --replace-char "?" ""              # Remove question marks (replace with nothing)
  --dontreplace --rc "/" "-"         # Disable defaults, only replace / with -
  --dr --rc "=" "_"                  # Disable defaults using shortcut, replace = with _

Sanitization examples (default: sanitize enabled with conservative character set):
  --sanitize                         # Explicitly enable character filtering (default behavior)
  --s                                # Same as above using shortcut
  --dont-sanitize                    # Disable character filtering, keep all characters
  --ds                               # Same as above using shortcut
  --ds --rc "/" "-"                  # No filtering, but still replace / with -
  --dont-sanitize --dontreplace      # No filtering or replacements at all
  --s --rc "&" "and"                 # Explicit sanitize with custom replacements
  --custom-sanitize "abcABC123-_ "   # Use custom allowed character set
  --cs "0123456789"                  # Only allow numbers using shortcut

Custom sanitization examples:
  --cs "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ "  # Basic set
  --cs "abcABC123[]()-_~@=+ "        # Include brackets and symbols (may cause issues)
  --custom-sanitize "αβγδεζηθικλμνξοπρστυφχψω"  # Greek letters only
  --cs "あいうえおかきくけこ"              # Japanese characters

Folder format tips:
  - Use forward slashes (/) to separate folder levels: "{artist}/{album}"
  - Missing fields will be empty (logged as warnings)
  - Use --skip-no-metadata to skip files missing critical metadata
  - Character replacements are applied before sanitization
  - When sanitization is enabled, problematic characters are removed/replaced
  - Default character set excludes apostrophes and special chars for music player compatibility

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/addons/file_relocater.py --help

Rename

Location: /home/runner/work/Walrio/Walrio/modules/addons/rename.py

Audio File Renamer - Rename files using custom metadata formats

Complete Help Output:

usage: rename.py [-h] [--type {file,directory,auto}] [-r] [-f FORMAT]
                 [--replace-char OLD NEW] [--dontreplace] [--sanitize]
                 [--dont-sanitize] [--custom-sanitize CHARS] [--dry-run]
                 [--skip-existing] [--skip-no-metadata] [--logging {low,high}]
                 [--list-metadata FILE]
                 input [input ...]

Audio File Renamer - Rename files using custom metadata formats

positional arguments:
  input                 Input file(s) or directory to process

options:
  -h, --help            show this help message and exit
  --type {file,directory,auto}
                        Explicitly specify if inputs are files or a directory
                        (default: auto-detect)
  -r, --recursive       Recursively process subdirectories
  -f FORMAT, --format FORMAT
                        Naming format using metadata fields in {field} syntax
                        (default: '{title} - {album} - {albumartist} -
                        {year}')
  --replace-char OLD NEW, --rc OLD NEW
                        Replace a specific character in filenames. Takes two
                        arguments: old character and new character (e.g.,
                        --replace-char '/' '~'). Use multiple times for
                        multiple replacements.
  --dontreplace, --dr   Disable default character replacements (/ and \ to ~).
                        Only use custom --replace-char replacements.
  --sanitize, --s       Enable filename sanitization using the allowed
                        character set (default behavior).
  --dont-sanitize, --ds
                        Disable filename sanitization using the allowed
                        character set. Only apply character replacements.
  --custom-sanitize CHARS, --cs CHARS
                        Use custom character set for sanitization instead of
                        default. Provide all allowed characters as a string
                        (e.g., --cs 'abcABC123-_ ').
  --dry-run             Show what would be renamed without actually renaming
                        files
  --skip-existing       Skip renaming if target filename already exists
                        (default: True)
  --skip-no-metadata    Skip files that have no metadata for the specified
                        format fields
  --logging {low,high}  Logging level: low (default) or high (verbose)
  --list-metadata FILE  Show all available metadata fields for a specific file
                        and exit

Examples:
  # Rename using default format: title - album
  python rename.py song.mp3

  # Custom format with artist and year
  python rename.py /music --format "{artist} - {title} ({year})"

  # Track number prefix format
  python rename.py /music --format "{track:02d} - {title}"

  # Album folder organization format
  python rename.py /music --format "{albumartist} - {album} - {title}"

  # Year and genre format
  python rename.py /music --format "{year} - {genre} - {artist} - {title}"

Available pre-defined metadata fields:
  {title}       - Song title (searches: title, Title, TITLE, TIT2, etc.)
  {album}       - Album name (searches: album, Album, ALBUM, TALB, etc.)
  {artist}      - Track artist (searches: artist, Artist, TPE1, etc.)
  {albumartist} - Album artist (searches: albumartist, AlbumArtist, TPE2, etc.)
  {track}       - Track number (searches: track, Track, tracknumber, etc.)
  {year}        - Release year (searches: year, Year, date, Date, etc.)
  {genre}       - Music genre (searches: genre, Genre, GENRE, etc.)
  {disc}        - Disc number (searches: disc, Disc, discnumber, etc.)
  {composer}    - Composer (searches: composer, Composer, TCOM, etc.)
  {comment}     - Comment field (searches: comment, Comment, COMM, etc.)

You can also use any raw metadata tag name (case-sensitive):
  {ARTIST}      - Use exact tag name from file
  {TPE1}        - Use ID3v2 tag directly
  {Custom_Tag}  - Use any custom tag present in the file

Character replacement examples (default: / and \ become ~):
  --replace-char "/" "~"             # Replace forward slashes with tildes (default)
  --rc "\" "~"                      # Replace backslashes with tildes (default, using shortcut)
  --replace-char "&" "and"           # Replace ampersands with 'and'
  --rc "/" "~" --rc "&" "and"        # Multiple replacements using shortcuts
  --replace-char "?" ""              # Remove question marks (replace with nothing)
  --dontreplace --rc "/" "-"         # Disable defaults, only replace / with -
  --dr --rc "=" "_"                  # Disable defaults using shortcut, replace = with _

Sanitization examples (default: sanitize enabled):
  --sanitize                         # Explicitly enable character filtering (default behavior)
  --s                                # Same as above using shortcut
  --dont-sanitize                    # Disable character filtering, keep all characters
  --ds                               # Same as above using shortcut
  --ds --rc "/" "~"                  # No filtering, but still replace / with ~
  --dont-sanitize --dontreplace      # No filtering or replacements at all
  --s --rc "&" "and"                 # Explicit sanitize with custom replacements
  --custom-sanitize "abcABC123-_ "   # Use custom allowed character set
  --cs "0123456789"                  # Only allow numbers using shortcut

Custom sanitization examples:
  --cs "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ "  # Basic set
  --cs "abcABC123[]()-_~@=+ "        # Include brackets and symbols
  --custom-sanitize "αβγδεζηθικλμνξοπρστυφχψω"  # Greek letters only
  --cs "あいうえおかきくけこ"              # Japanese characters

Format string tips:
  - Use Python string formatting: {track:02d} for zero-padded numbers
  - Missing fields will be empty (logged as warnings)
  - Use --skip-no-metadata to skip files missing critical metadata
  - Character replacements are applied before sanitization
  - When sanitization is enabled, problematic characters are removed/replaced
  - Use --custom-sanitize to define your own allowed character set

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/addons/rename.py --help

Core Tools

Database

Location: /home/runner/work/Walrio/Walrio/modules/core/database.py

Audio Library Analyzer - Scans directory for audio files and stores metadata in SQLite database

Complete Help Output:

usage: database.py [-h] [--db-path DB_PATH] [--playlist PLAYLIST] [directory]

Audio Library Analyzer - Scans directory for audio files and stores metadata in SQLite database

positional arguments:
  directory            Path to the directory containing audio files

options:
  -h, --help           show this help message and exit
  --db-path DB_PATH    Path to SQLite database file (default:
                       walrio_library.db)
  --playlist PLAYLIST  Load songs from an M3U playlist file into the database

Examples:
  python database.py /path/to/music --db-path ~/music.db
  python database.py --playlist myplaylist.m3u --db-path ~/music.db

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/core/database.py --help

Player

Location: /home/runner/work/Walrio/Walrio/modules/core/player.py

Audio Player using GStreamer with full playback control

Complete Help Output:

usage: player.py [-h] [--interactive] [--daemon]
                 [--command {play,pause,stop,resume,status}] [--volume VOLUME]
                 [--seek SEEK] [--loop LOOP]
                 [filepath]

Audio Player using GStreamer with full playback control

positional arguments:
  filepath              Path to the audio file to play

options:
  -h, --help            show this help message and exit
  --interactive, -i     Run in interactive mode with playback controls
  --daemon, -d          Run in daemon mode (for external control)
  --command {play,pause,stop,resume,status}, -c {play,pause,stop,resume,status}
                        Send command to running player instance
  --volume VOLUME, -v VOLUME
                        Set volume (0.0 to 1.0)
  --seek SEEK, -s SEEK  Seek to position in seconds
  --loop LOOP, -l LOOP  Set loop mode: 'none', number (e.g. '3'), or
                        'infinite'

Examples:
  python player.py /path/to/song.mp3              # Simple playback
  python player.py --interactive /path/to/song.mp3 # Interactive mode
  python player.py --daemon /path/to/song.mp3      # Daemon mode (for Electron)

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/core/player.py --help

Playlist

Location: /home/runner/work/Walrio/Walrio/modules/core/playlist.py

Playlist Manager - Create and manage M3U playlists

Complete Help Output:

usage: playlist.py [-h] [--db-path DB_PATH] [--name NAME] [--output OUTPUT]
                   [--absolute] [--artist ARTIST] [--album ALBUM]
                   [--genre GENRE] [--load LOAD]
                   [--inputs INPUTS [INPUTS ...]] [--input-file INPUT_FILE]

Playlist Manager - Create and manage M3U playlists

options:
  -h, --help            show this help message and exit
  --db-path DB_PATH     Path to the SQLite database file (default:
                        walrio_library.db)
  --name NAME           Name of the playlist (required for database mode)
  --output OUTPUT       Directory to save the playlist file (default: current
                        directory)
  --absolute            Use absolute paths instead of relative paths
  --artist ARTIST       Filter songs by artist name (partial match)
  --album ALBUM         Filter songs by album name (partial match)
  --genre GENRE         Filter songs by genre (partial match)
  --load LOAD           Load and display contents of an existing M3U playlist
  --inputs INPUTS [INPUTS ...]
                        List of audio files and/or directories to include in
                        the playlist
  --input-file INPUT_FILE
                        Text file containing list of audio files/directories
                        (one per line)

Examples:
  python playlist.py --name "My Playlist" --artist "Pink Floyd" --output playlists/
  python playlist.py --name "Files" --inputs song1.mp3 song2.flac /path/to/music/
  python playlist.py --name "From File" --input-file mylist.txt --output playlists/

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/core/playlist.py --help

Queue

Location: /home/runner/work/Walrio/Walrio/modules/core/queue.py

Audio Queue Manager - Play songs from your music library

Complete Help Output:

usage: queue.py [-h] [--db-path DB_PATH] [--shuffle] [--repeat]
                [--artist ARTIST] [--album ALBUM] [--genre GENRE]
                [--interactive] [--list] [--playlist PLAYLIST]

Audio Queue Manager - Play songs from your music library

options:
  -h, --help           show this help message and exit
  --db-path DB_PATH    Path to the SQLite database file (default:
                       walrio_library.db)
  --shuffle            Shuffle the queue
  --repeat             Repeat the queue when it ends
  --artist ARTIST      Filter songs by artist name (partial match)
  --album ALBUM        Filter songs by album name (partial match)
  --genre GENRE        Filter songs by genre (partial match)
  --interactive        Start in interactive mode
  --list               List all songs in the library and exit
  --playlist PLAYLIST  Load songs from an M3U playlist file

Example: python queue.py --artist 'Pink Floyd' --shuffle OR python queue.py
--playlist myplaylist.m3u

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/core/queue.py --help

Getting Help

Each tool provides comprehensive help with examples:

python /home/runner/work/Walrio/Walrio/modules/addons/convert.py --help
python /home/runner/work/Walrio/Walrio/modules/core/database.py --help
python /home/runner/work/Walrio/Walrio/modules/addons/file_relocater.py --help
python /home/runner/work/Walrio/Walrio/modules/core/player.py --help
python /home/runner/work/Walrio/Walrio/modules/core/playlist.py --help
python /home/runner/work/Walrio/Walrio/modules/core/queue.py --help
python /home/runner/work/Walrio/Walrio/modules/addons/rename.py --help

For detailed API documentation of these tools, see API Reference.

Dependencies

These command-line tools may require:

  • FFmpeg/FFprobe - For audio conversion and metadata extraction

  • Python 3.8+ - Required Python version

  • Additional libraries - See requirements.txt for specific tools

Installation of FFmpeg:

# Ubuntu/Debian
sudo apt install ffmpeg

# macOS (with Homebrew)
brew install ffmpeg

# Windows (with Chocolatey)
choco install ffmpeg