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, or accessed through the unified walrio.py interface.

Direct Module Access

You can also run modules directly:

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,n}] [--force-overwrite {y,n}]
                  [-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 {y,n}, --se {y,n}
                        Skip existing files: y=yes, n=no (prompt)
  --force-overwrite {y,n}, --fo {y,n}
                        Force overwrite of existing files: y=yes (force), n=no
                        (prompt)
  -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 CHARS] [--dont-sanitize] [--dry-run]
                         [--copy {y,n}] [--skip-existing]
                         [--process-no-metadata {y,n}] [--full-date]
                         [--logging {low,high}] [--list-metadata FILE]
                         [--check-dir]
                         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 (default:
                        False)
  --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 standard character replacements. Only use
                        custom --replace-char replacements.
  --sanitize CHARS, -s CHARS
                        Enable folder name sanitization with custom character
                        set. Provide all allowed characters as a string (e.g.,
                        --sanitize 'abcABC123-_ '). If no characters provided,
                        uses default set.
  --dont-sanitize, --ds
                        Disable folder name sanitization (default: disabled).
                        Use this to explicitly override --sanitize in longer
                        commands where you might have accidentally included
                        it.
  --dry-run             Show what would be organized without actually moving
                        files
  --copy {y,n}          Copy files instead of moving them: y=yes (copy,
                        default), n=no (move files)
  --skip-existing       Skip organization if target file already exists
                        (default: True)
  --process-no-metadata {y,n}, --pnm {y,n}
                        Process files with no metadata: y=yes (use filename as
                        folder), n=no (skip files, default)
  --full-date           Use full date from metadata instead of just the year
                        for {year} field
  --logging {low,high}  Logging level: low (default) or high (verbose)
  --list-metadata FILE  Show all available metadata fields for a specific file
                        and exit
  --check-dir           Check for common path formatting errors (like quoted
                        paths) and prompt user for confirmation

Examples:
  # Organize music library using default format (copies files, skips files with no metadata): album/albumartist
  python organize.py /path/to/music/library /path/to/organized/library

  # Move files instead of copying them
  python organize.py /music /organized --copy n

  # Process files with no metadata using filename as folder name
  python organize.py /music /organized --process-no-metadata y
  python organize.py /music /organized --pnm y

  # For music player compatibility (in the english language), use conservative character replacements and sanitization
  python organize.py /music /organized --replace-char "/" "-" --replace-char "\\" "-" --replace-char ":" "-" --replace-char "|" "-" --sanitize "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ "

  # Custom folder format with year and genre (copying files, skipping files with no metadata)
  python organize.py /music /organized --folder-format "{year}/{genre}/{albumartist}/{album}"

  # Artist-based organization with conservative sanitization, process files with no metadata, move files
  python organize.py /music /organized --folder-format "{artist}/{album}" --sanitize --pnm y --copy n

  # Detailed organization with track info and custom character replacement
  python organize.py /music /organized --folder-format "{albumartist}/{year} - {album}" --replace-char ":" "-"

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: no replacements, files kept as-is):
  --replace-char "/" "-"             # Replace forward slashes with dashes only
  --rc ":" "-"                       # Replace colons with dashes only (using shortcut)
  --replace-char "&" "and"           # Replace ampersands with 'and'
  --rc "/" "-" --rc "&" "and"        # Multiple replacements using shortcuts
  --replace-char "?" ""              # Remove question marks (replace with nothing)
  --rc "/" "-" --rc "\" "-" --rc ":" "-" --rc "|" "-"  # Conservative set for music players

Sanitization examples (default: no sanitization, keep all characters):
  --sanitize                         # Enable character filtering using conservative character set
  -s                                 # Same as above using shortcut
  --dont-sanitize                    # Explicitly disable character filtering (default behavior)
  --ds                               # Same as above using shortcut
  --sanitize "abcABC123-_ "          # Enable filtering with custom allowed character set
  --s "0123456789"                   # Only allow numbers using shortcut
  --sanitize ""                      # Enable filtering with default character set

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

Folder format tips:
  - Use forward slashes (/) to separate folder levels: "{artist}/{album}"
  - Missing fields will be empty (logged as warnings)
  - Files with no metadata are skipped by default (use --process-no-metadata y to include them)
  - When --process-no-metadata y is used, files with no metadata use filename as folder name
  - Character replacements are applied before sanitization
  - When sanitization is enabled, problematic characters are removed/replaced
  - For music player compatibility (with the english language), consider using: --sanitize "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ " --rc "/" "-" --rc ":" "-" --rc "\\" "-" --rc "|" "-"
  - Default character set excludes apostrophes and special chars for maximum compatibility

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

Imageconverter

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

Image Converter - Convert images between different formats and sizes using ImageMagick

Complete Help Output:

usage: imageconverter.py [-h] [-f FORMAT] [-o OUTPUT] [-s SIZE]
                         [--stretch {true,false}] [-q QUALITY]
                         [--no-auto-orient]
                         [--strip-exif-metadata {true,false}]
                         [--background BACKGROUND] [--overwrite] [-r] [--info]
                         [--list-formats]
                         [--logging {DEBUG,INFO,WARNING,ERROR}]
                         [input ...]

Image Converter - Convert images between different formats and sizes using ImageMagick

positional arguments:
  input                 Input image file(s) or directory

options:
  -h, --help            show this help message and exit
  -f FORMAT, --format FORMAT
                        Output format (default: jpeg)
  -o OUTPUT, --output OUTPUT
                        Output file or directory (auto-generated if not
                        specified)
  -s SIZE, --size SIZE  Target size using ImageMagick geometry (default:
                        1000x1000)
  --stretch {true,false}, --st {true,false}
                        Stretch images to exact dimensions instead of
                        maintaining aspect ratio (default: false)
  -q QUALITY, --quality QUALITY
                        Quality for lossy formats (1-100, default: 100)
  --no-auto-orient      Disable auto-orientation based on EXIF
  --strip-exif-metadata {true,false}, --sem {true,false}
                        Remove EXIF metadata from images (default: false)
  --background BACKGROUND
                        Background color for transparency removal (default:
                        white)
  --overwrite           Overwrite existing output files (default: False)
  -r, --recursive       Process directories recursively (default: False)
  --info                Show image information and exit
  --list-formats        List supported formats and exit
  --logging {DEBUG,INFO,WARNING,ERROR}
                        Logging level (default: INFO)

Examples:
  # Convert single image to 1000x1000 JPEG (default behavior)
  python imageconverter.py image.png

  # Convert to different format, keeping default 1000x1000 size
  python imageconverter.py image.png --format webp

  # Convert with custom dimensions (maintains aspect ratio by default)
  python imageconverter.py image.png --size 800x600

  # Convert with forced stretching to exact dimensions
  python imageconverter.py image.png --size 800x600 --stretch true

  # Convert and resize by percentage
  python imageconverter.py image.png --size 50%

  # Batch convert all images in directory to default 1000x1000 JPEG
  python imageconverter.py /path/to/images --recursive

  # Convert with custom quality and strip metadata
  python imageconverter.py image.jpg --quality 80 --strip-exif-metadata true

  # Get image information
  python imageconverter.py image.jpg --info

Supported formats: jpeg, jpg, png, webp, bmp, tiff, tif, gif, ico, svg, pdf, eps, psd

Note: By default, images maintain their aspect ratio when resized (e.g., 800x600 fits within those dimensions).
Use --stretch true to force exact dimensions and stretch the image instead.

ImageMagick geometry examples:
  800x600   - Fit within 800x600 maintaining aspect ratio (default behavior)
  800x600   - With --stretch true: resize to exactly 800x600 (stretches image)
  800x600!  - Force exact size (stretches - same as --stretch true)
  800x600>  - Only shrink if larger than 800x600
  800x600<  - Only enlarge if smaller than 800x600
  50%       - Resize to 50% of original size

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/addons/imageconverter.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 CHARS]
                 [--dont-sanitize] [--auto-sanitize] [--force-allow-special]
                 [--dry-run] [--skip-existing]
                 [--resolve-conflicts {true,false}] [--skip-no-metadata]
                 [--full-date] [--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 (default: False)
  -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 CHARS, --s CHARS
                        Enable filename sanitization with custom character
                        set. Provide all allowed characters as a string (e.g.,
                        --sanitize 'abcABC123-_ '). If no characters provided,
                        uses default set.
  --dont-sanitize, --ds
                        Disable filename sanitization (default: disabled). Use
                        this to explicitly override --sanitize in longer
                        commands where you might have accidentally included
                        it.
  --auto-sanitize       Automatically sanitize filenames without prompting
                        when special characters are detected (disabled by
                        default)
  --force-allow-special
                        Always allow special characters without prompting
                        (disabled by default, equivalent to --dont-sanitize
                        but still applies replacements)
  --dry-run             Show what would be renamed without actually renaming
                        files
  --skip-existing       Skip renaming if target filename already exists
                        (default: True, but overridden by conflict resolution)
  --resolve-conflicts {true,false}
                        Resolve filename conflicts by adding counter to title
                        (default: true)
  --skip-no-metadata    Skip files that have no metadata for the specified
                        format fields
  --full-date           Use full date from metadata instead of just the year
                        for {year} field
  --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}"

  # Resolve conflicts by adding counter to title (default behavior)
  python rename.py /music

  # Disable conflict resolution, skip conflicting files instead
  python rename.py /music --resolve-conflicts false

  # Custom format with conflict resolution
  python rename.py /music --format "{artist} - {title}" --resolve-conflicts

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 (extracts year from date fields, use --full-date for complete date)
  {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, prompt for special chars):
  --sanitize                         # Explicitly enable character filtering (default behavior)
  --s                                # Same as above using shortcut
  --dont-sanitize                    # Disable character filtering, keep all characters (default)
  --ds                               # Same as above using shortcut
  --ds --rc "/" "~"                  # No filtering, but still replace / with ~
  --dont-sanitize --dontreplace      # No filtering or replacements at all
  --sanitize "abcABC123-_ "          # Enable filtering with custom allowed character set
  --s "0123456789"                   # Only allow numbers using shortcut
  --sanitize ""                      # Enable filtering with default character set
  --auto-sanitize                    # Automatically remove special chars without prompting
  --force-allow-special              # Always keep special chars without prompting

Conflict resolution examples (default: resolve conflicts enabled):
  python rename.py /music                       # Resolve conflicts by adding (2), (3) to title (default)
  python rename.py /music --resolve-conflicts false # Skip files with conflicting names instead
  python rename.py /music --resolve-conflicts true  # Explicitly enable conflict resolution
  python rename.py /music --skip-existing        # Also skip existing files (when combined with --resolve-conflicts false)

Custom sanitization examples:
  --sanitize "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ "  # Basic english set
  --sanitize "abcABC123[]()-_~@=+ "        # Include brackets and symbols
  --sanitize "αβγδεζηθικλμνξοπρστυφχψω"  # Greek letters only
  --s "あいうえおかきくけこ"              # 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 --sanitize "your_chars" to define your own allowed character set

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

Replaygain

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

ReplayGain LUFS Analyzer - Analyze and tag audio files with ReplayGain values

Complete Help Output:

usage: replaygain.py [-h] (--analyze-only | --tag) [--target-lufs TARGET_LUFS]
                     [--skip-tagged] [--recursive] [--detailed] [--quiet]
                     [--json FILE] [--check-rsgain]
                     input [input ...]

ReplayGain LUFS Analyzer - Analyze and tag audio files with ReplayGain values

positional arguments:
  input                 Audio files or directories to analyze

options:
  -h, --help            show this help message and exit
  --analyze-only, --analyze
                        Only analyze files without applying ReplayGain tags
  --tag                 Analyze files and apply ReplayGain tags
  --target-lufs TARGET_LUFS, --lufs TARGET_LUFS
                        Target LUFS value for ReplayGain calculation (default:
                        -18)
  --skip-tagged         Skip files that already have ReplayGain tags (default:
                        False - process all files)
  --recursive, -r       Process directories recursively (default: False)
  --detailed, --verbose
                        Show detailed per-file analysis results
  --quiet, -q           Suppress progress messages, only show summary
  --json FILE           Save analysis results to JSON file
  --check-rsgain        Check if rsgain is available and exit

Examples:
  # Analyze files without tagging (dry run)
  python replaygain.py /path/to/music --analyze-only

  # Analyze and tag files with default -18 LUFS target
  python replaygain.py /path/to/music --tag

  # Use custom LUFS target
  python replaygain.py /path/to/music --tag --target-lufs -16

  # Analyze specific files
  python replaygain.py song1.flac song2.mp3 --analyze-only

  # Show detailed per-file results
  python replaygain.py /path/to/music --analyze-only --detailed

  # Tag files but skip those already tagged
  python replaygain.py /path/to/music --tag --skip-tagged

  # Force retag all files (default behavior - don't use --skip-tagged)
  python replaygain.py /path/to/music --tag

Supported file formats:
  - FLAC (.flac)
  - MP3 (.mp3)
  - M4A (.m4a)

LUFS Target Values:
  -18 LUFS: ReplayGain 2.0 standard (default)
  -16 LUFS: Apple Music standard
  -14 LUFS: Spotify, Amazon Music, YouTube standard
  -20 LUFS: TV broadcast standard

Requirements:
  - rsgain tool (https://github.com/complexlogic/rsgain)

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/addons/replaygain.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

Metadata

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

Modify audio file metadata using mutagen

Complete Help Output:

usage: metadata.py [-h] [--show] [--duration] [--set-title SET_TITLE]
                   [--set-artist SET_ARTIST] [--set-album SET_ALBUM]
                   [--set-albumartist SET_ALBUMARTIST] [--set-date SET_DATE]
                   [--set-year SET_YEAR] [--set-genre SET_GENRE]
                   [--set-track SET_TRACK] [--set-disc SET_DISC]
                   [--set-comment SET_COMMENT] [--set-album-art SET_ALBUM_ART]
                   [--remove-album-art] [--verbose]
                   [files ...]

Modify audio file metadata using mutagen

positional arguments:
  files                 Audio files to process

options:
  -h, --help            show this help message and exit
  --show                Display current metadata
  --duration            Show only duration in seconds
  --set-title SET_TITLE
                        Set title tag
  --set-artist SET_ARTIST
                        Set artist tag
  --set-album SET_ALBUM
                        Set album tag
  --set-albumartist SET_ALBUMARTIST
                        Set album artist tag
  --set-date SET_DATE   Set date tag
  --set-year SET_YEAR   Set year tag
  --set-genre SET_GENRE
                        Set genre tag
  --set-track SET_TRACK
                        Set track number
  --set-disc SET_DISC   Set disc number
  --set-comment SET_COMMENT
                        Set comment tag
  --set-album-art SET_ALBUM_ART
                        Set album art from image file
  --remove-album-art    Remove album art
  --verbose, -v         Enable verbose logging

Examples:
  # Display metadata
  python metadata.py --show song.mp3

  # Set title and artist
  python metadata.py --set-title "New Title" --set-artist "New Artist" song.mp3

  # Set album art
  python metadata.py --set-album-art cover.jpg song.mp3

  # Remove album art
  python metadata.py --remove-album-art song.mp3

  # Batch edit multiple files
  python metadata.py --set-album "Album Name" *.mp3

For complete options, run: python /home/runner/work/Walrio/Walrio/modules/core/metadata.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

Modules Tools

Walrio

Location: /home/runner/work/Walrio/Walrio/modules/walrio.py

For module-specific help:

Complete Help Output:

Walrio - Unified Music Library Management System
==================================================

QUICK START - Common Commands:
  python walrio.py convert /path/to/music --format flac
  python walrio.py rename /path/to/music
  python walrio.py replaygain /path/to/music

USAGE:
  python walrio.py <module_name> [arguments...]

For module-specific help:
  python walrio.py <module_name> --help

For a list of all modules and descriptions:
  python walrio.py --help-more

For detailed documentation:
  https://tapsoss.github.io/Walrio/

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

Niche Tools

Applyloudness

Location: /home/runner/work/Walrio/Walrio/modules/niche/applyloudness.py

Apply Loudness Tool - Apply gain adjustments to audio files using FFmpeg

Complete Help Output:

usage: applyloudness.py [-h] (--gain GAIN | --replaygain)
                        [--target-lufs TARGET_LUFS] [--output DIR]
                        [--recursive] [--backup {true,false}] [--dry-run]
                        [--quiet] [--verbose] [--check-deps]
                        input [input ...]

Apply Loudness Tool - Apply gain adjustments to audio files using FFmpeg

positional arguments:
  input                 Audio files or directories to process

options:
  -h, --help            show this help message and exit
  --gain GAIN           Fixed gain to apply in dB (e.g., +3, -2.5)
  --replaygain          Use ReplayGain values calculated from file analysis
  --target-lufs TARGET_LUFS, --lufs TARGET_LUFS
                        Target LUFS value for ReplayGain calculation (default:
                        -18)
  --output DIR, -o DIR  Output directory for processed files (default: modify
                        files in-place)
  --recursive, -r       Process directories recursively (default: False)
  --backup {true,false}
                        Create backup files when modifying in-place (default:
                        true)
  --dry-run             Show what would be processed without actually
                        modifying files
  --quiet, -q           Suppress progress messages, only show summary
  --verbose, -v         Show detailed processing information
  --check-deps          Check if required dependencies are available and exit

Examples:
  # Apply fixed +3 dB gain to all files in a directory
  python applyloudness.py /path/to/music --gain +3

  # Apply -2 dB gain to specific files
  python applyloudness.py song1.mp3 song2.flac --gain -2

  # Use ReplayGain values with default -18 LUFS target
  python applyloudness.py /path/to/music --replaygain

  # Use ReplayGain with custom LUFS target (Apple Music standard)
  python applyloudness.py /path/to/music --replaygain --target-lufs -16

  # Process files and save to output directory (preserve originals)
  python applyloudness.py /path/to/music --gain +1.5 --output /path/to/output

  # Apply gain without creating backup files
  python applyloudness.py /path/to/music --gain -1 --backup false

  # Dry run to see what would be processed
  python applyloudness.py /path/to/music --gain +2 --dry-run

Supported file formats:
  - FLAC (.flac)
  - MP3 (.mp3)
  - M4A (.m4a)
  - WAV (.wav)
  - OGG (.ogg)
  - Opus (.opus)

LUFS Target Values (for --replaygain mode):
  -18 LUFS: ReplayGain 2.0 standard (default)
  -16 LUFS: Apple Music standard
  -14 LUFS: Spotify, Amazon Music, YouTube standard
  -20 LUFS: TV broadcast standard

Requirements:
  - FFmpeg (for audio processing)
  - rsgain (for ReplayGain mode)

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

Resizealbumart

Location: /home/runner/work/Walrio/Walrio/modules/niche/resizealbumart.py

Resize Album Art - Extract, resize, and re-embed album art in audio files

Complete Help Output:

usage: resizealbumart.py [-h] [-s SIZE] [-q QUALITY] [-f {jpeg,jpg,png,webp}]
                         [--maintain-aspect] [--backup [BACKUP]] [-r]
                         [--logging {DEBUG,INFO,WARNING,ERROR}]
                         input [input ...]

Resize Album Art - Extract, resize, and re-embed album art in audio files

positional arguments:
  input                 Input audio file(s) or directory

options:
  -h, --help            show this help message and exit
  -s SIZE, --size SIZE  Target size for album art (default: 1000x1000)
  -q QUALITY, --quality QUALITY
                        JPEG quality for resized images (1-100, default: 95)
  -f {jpeg,jpg,png,webp}, --format {jpeg,jpg,png,webp}
                        Output format for resized album art (default: jpeg)
  --maintain-aspect     Maintain aspect ratio instead of stretching to exact
                        dimensions
  --backup [BACKUP]     Create backup files before processing. Optionally
                        specify a directory path to store backups (default:
                        same location as original files)
  -r, --recursive       Process directories recursively
  --logging {DEBUG,INFO,WARNING,ERROR}
                        Logging level (default: INFO)

Examples:
  # Resize album art to default 1000x1000 JPEG in a single file
  python resizealbumart.py song.mp3

  # Resize to custom dimensions with quality setting
  python resizealbumart.py song.mp3 --size 800x800 --quality 90

  # Maintain aspect ratio instead of stretching
  python resizealbumart.py song.mp3 --maintain-aspect

  # Process an entire directory recursively
  python resizealbumart.py /path/to/music/directory --recursive

  # Process with creating backups
  python resizealbumart.py song.mp3 --backup

  # Store backups in a specific directory
  python resizealbumart.py song.mp3 --backup /path/to/backups

  # Use PNG format instead of JPEG
  python resizealbumart.py song.mp3 --format png

Supported audio formats: .mp3, .flac, .ogg, .oga, .opus, .m4a, .mp4, .aac, .wav

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

Walrio Import

Location: /home/runner/work/Walrio/Walrio/modules/niche/walrio_import.py

Walrio Import Pipeline - Complete audio library import processing

Complete Help Output:

usage: walrio_import.py [-h] [--recursive] [--dry-run] input

Walrio Import Pipeline - Complete audio library import processing

positional arguments:
  input            Input directory or file to process through the import
                   pipeline

options:
  -h, --help       show this help message and exit
  --recursive, -r  Process directories recursively (passed to all applicable
                   modules)
  --dry-run        Show commands that would be executed without actually
                   running them

Pipeline Stages (executed in order):
  1. Convert to FLAC format (48kHz, 16-bit)
  2. Rename files with character filtering
  3. Apply ReplayGain analysis (-16 LUFS target)
  4. Apply loudness normalization using ReplayGain tags
  5. Resize album artwork to 1000x1000 JPEG

Examples:
  # Process a single directory
  python walrio_import.py /path/to/music

  # Process recursively through subdirectories
  python walrio_import.py /path/to/music --recursive

  # Show what would be executed without running
  python walrio_import.py /path/to/music --dry-run

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

Getting Help

Each tool provides comprehensive help with examples:

python /home/runner/work/Walrio/Walrio/modules/niche/applyloudness.py --help
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/addons/imageconverter.py --help
python /home/runner/work/Walrio/Walrio/modules/core/metadata.py --help
python /home/runner/work/Walrio/Walrio/modules/core/playlist.py --help
python /home/runner/work/Walrio/Walrio/modules/addons/rename.py --help
python /home/runner/work/Walrio/Walrio/modules/addons/replaygain.py --help
python /home/runner/work/Walrio/Walrio/modules/niche/resizealbumart.py --help
python /home/runner/work/Walrio/Walrio/modules/walrio.py --help
python /home/runner/work/Walrio/Walrio/modules/niche/walrio_import.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