README
¶
discoteca
Golang implementation of xklb/library
Quick Start
go install -tags fts5 github.com/chapmanjacobd/discoteca/cmd/disco@latest
disco add library.db ./audio
disco add library.db ./video --scan-subtitles
disco serve library.db
Screenshots
Grid View

Group View

Details View

Disk Usage View

Video Player

Audio Player

EPUB Viewer

Settings Modal

Optional dependencies
Core Media Features
ffmpeg- Media transcoding, streaming, duration detection, subtitle extraction, image conversionmpv- Playback control, keyboard shortcuts, playlist management
Document & Ebook Support
calibre- Ebook conversion (mobi, azw, fb2, djvu, cbz, cbr, old Office formats)poppler-utils- PDF text extraction (pdftotext) and thumbnails (pdftoppm)unrtf- RTF document text extractionghostscript- PostScript text extraction (ps2ascii,pstotext)
OCR & Image Processing
tesseract- OCR text extraction from images (ingest scanning)paddleocr- Advanced OCR with better accuracy on complex layouts (optional, requires Python)imagemagick- Image format conversion and manipulation
Speech Recognition
vosk+python3- Speech-to-text extraction from audio/video (offline, lightweight)whisper(openai-whisper) - High-accuracy speech-to-text (optional, requires Python, GPU recommended)
Archive & Legacy Formats
catdoc- Old Microsoft Office formats (.doc, .xls, .ppt)xls2csv- Excel .xls spreadsheet extractionunarorp7zip-full- 7-Zip archive listing (7z)unarorunrar- RAR archive listing and CBR extractionchmextractororlibmspack-tools- CHM help file extraction
Accessibility & TTS
espeak-ng- Text-to-speech generation
Web & Proxy
kiwix-serve- ZIM file serving (Wikipedia offline)
See INSTALL.md for installation instructions on your platform.
Pre-built Binaries
Download from GitHub Releases for:
- Linux: amd64, arm64
- Windows: amd64
- macOS: amd64, arm64 (Apple Silicon)
Build from Source
git clone https://github.com/chapmanjacobd/discoteca.git
cd discoteca
go build -tags "fts5" -o disco ./cmd/disco
Usage
add
Add media to database
Examples:
$ disco add my_videos.db ~/Videos
$ disco add --video-only my_videos.db /mnt/media
All Options
$ disco add --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-p, --parallel
Number of parallel extractors (default: CPU count * 4)
--extract-text
Extract full text from documents (PDF, EPUB, TXT, MD) for caption search
--ocr
Extract text from images using OCR (tesseract) for caption search
--ocr-engine
OCR engine to use
--speech-recognition
Extract speech-to-text from audio/video files for caption search
--speech-recognition-engine
Speech recognition engine to use
check
Check for missing files and mark as deleted
All Options
$ disco check --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--dry-run
Don't actually mark files as deleted
Print media information
Examples:
$ disco print my_videos.db
$ disco print my_videos.db -u size --reverse
$ disco print my_videos.db --big-dirs -u count
All Options
$ disco print --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
-B, --big-dirs
Aggregate by parent directory
--file-counts
Filter by number of files in directory (e.g., >5, 10%1)
--group-by-extensions
Group by file extensions
--group-by-size
Group by size buckets
--group-by-parent
Group media by parent directory with counts and totals
-D, --depth
Aggregate at specific directory depth
--min-depth
Minimum depth for aggregation
--max-depth
Maximum depth for aggregation
--parents
Include parent directories in aggregation
--folders-only
Only show folders
--files-only
Only show files
--folder-sizes
Filter folders by total size
--folder-counts
Filter folders by number of subfolders
--regex-sort
Sort by splitting lines and sorting words
--regexs
Regex patterns for line splitting
--word-sorts
Word sorting strategies
--line-sorts
Line sorting strategies
--compat
Use natsort compat mode
--preprocess
Remove junk common to filenames and URLs
--stop-words
List of words to ignore
--duplicates
Filter for duplicate words (true/false)
--unique-only
Filter for unique words (true/false)
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
search
Search media using FTS
Examples:
$ disco search my_videos.db 'matrix'
$ disco search my_videos.db 'cyberpunk' --video-only
All Options
$ disco search --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
search-captions
Search captions using FTS
All Options
$ disco search-captions --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
--open
Open results in media player
--overlap
Overlap in seconds for merging captions
playlists
List scan roots (playlists)
All Options
$ disco playlists --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
search-db
Search arbitrary database table
All Options
$ disco search-db --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
media-check
Check media files for corruption
All Options
$ disco media-check --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
--chunk-size
Chunk size in seconds. If set, recommended to use >0.1 seconds
--gap
Width between chunks to skip. Values greater than 1 are treated as number of seconds
--delete-corrupt
Delete media that is more corrupt or equal to this threshold. Values greater than 1 are treated as number of seconds
--full-scan-if-corrupt
Full scan as second pass if initial scan result more corruption or equal to this threshold. Values greater than 1 are treated as number of seconds
--full-scan
Decode the full media file
--audio-scan
Count errors in audio track only
files-info
Show information about files
All Options
$ disco files-info --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
disk-usage
Show disk usage aggregation
Examples:
$ disco du my_videos.db
$ disco du my_videos.db --depth 2
All Options
$ disco disk-usage --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
-B, --big-dirs
Aggregate by parent directory
--file-counts
Filter by number of files in directory (e.g., >5, 10%1)
--group-by-extensions
Group by file extensions
--group-by-size
Group by size buckets
--group-by-parent
Group media by parent directory with counts and totals
-D, --depth
Aggregate at specific directory depth
--min-depth
Minimum depth for aggregation
--max-depth
Maximum depth for aggregation
--parents
Include parent directories in aggregation
--folders-only
Only show folders
--files-only
Only show files
--folder-sizes
Filter folders by total size
--folder-counts
Filter folders by number of subfolders
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
dedupe
Dedupe similar media
All Options
$ disco dedupe --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
--audio
Dedupe database by artist + album + title
--extractor-id
Dedupe database by extractor_id
--title-only
Dedupe database by title
--duration-only
Dedupe database by duration
--filesystem
Dedupe filesystem database (hash)
--compare-dirs
Compare directories
--basename
Match by basename similarity
--dirname
Match by dirname similarity
--min-similarity-ratio
Filter out matches with less than this ratio (0.7-0.9)
--dedupe-cmd
Command to run for deduplication (rmlint-style: cmd duplicate keep)
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
--hash-gap
Gap between segments (0.0-1.0 as percentage of file size, or absolute bytes if >1)
--hash-chunk-size
Size of each segment to hash
--hash-threads
Number of threads to use for hashing a single file
big-dirs
Show big directories aggregation
All Options
$ disco big-dirs --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-B, --big-dirs
Aggregate by parent directory
--file-counts
Filter by number of files in directory (e.g., >5, 10%1)
--group-by-extensions
Group by file extensions
--group-by-size
Group by size buckets
--group-by-parent
Group media by parent directory with counts and totals
-D, --depth
Aggregate at specific directory depth
--min-depth
Minimum depth for aggregation
--max-depth
Maximum depth for aggregation
--parents
Include parent directories in aggregation
--folders-only
Only show folders
--files-only
Only show files
--folder-sizes
Filter folders by total size
--folder-counts
Filter folders by number of subfolders
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
categorize
Auto-group media into categories
All Options
$ disco categorize --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
--other
Analyze 'other' category to find potential new categories
--full-path
Use full path for categorization suggestions instead of just filename
similar-files
Find similar files
All Options
$ disco similar-files --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--similar
Find similar files or folders
--sizes-delta
Size difference threshold (%)
--counts-delta
File count difference threshold (%)
--durations-delta
Duration difference threshold (%)
--filter-names
Cluster by name similarity
--filter-sizes
Cluster by size similarity
--filter-counts
Cluster by count similarity
--filter-durations
Cluster by duration similarity
--total-sizes
Compare total sizes (folders only)
--total-durations
Compare total durations (folders only)
--only-duplicates
Only show duplicate items
--only-originals
Only show original items
-C, --cluster-sort
Group items by similarity
--clusters
Number of clusters
--tfidf
Use TF-IDF for clustering
--move-groups
Move grouped files into separate directories
--print-groups
Print clusters as JSON
similar-folders
Find similar folders
All Options
$ disco similar-folders --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--similar
Find similar files or folders
--sizes-delta
Size difference threshold (%)
--counts-delta
File count difference threshold (%)
--durations-delta
Duration difference threshold (%)
--filter-names
Cluster by name similarity
--filter-sizes
Cluster by size similarity
--filter-counts
Cluster by count similarity
--filter-durations
Cluster by duration similarity
--total-sizes
Compare total sizes (folders only)
--total-durations
Compare total durations (folders only)
--only-duplicates
Only show duplicate items
--only-originals
Only show original items
-C, --cluster-sort
Group items by similarity
--clusters
Number of clusters
--tfidf
Use TF-IDF for clustering
--move-groups
Move grouped files into separate directories
--print-groups
Print clusters as JSON
watch
Watch videos with mpv
Examples:
$ disco watch my_videos.db
$ disco watch my_videos.db -r --limit 10
$ disco watch my_videos.db --size '>1GB'
All Options
$ disco watch --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
--cmd-0
Command to run if mpv exits with code 0
--cmd-1
Command to run if mpv exits with code 1
--cmd-2
Command to run if mpv exits with code 2
--cmd-3
Command to run if mpv exits with code 3
--cmd-4
Command to run if mpv exits with code 4
--cmd-5
Command to run if mpv exits with code 5
--cmd-6
Command to run if mpv exits with code 6
--cmd-7
Command to run if mpv exits with code 7
--cmd-8
Command to run if mpv exits with code 8
--cmd-9
Command to run if mpv exits with code 9
--cmd-10
Command to run if mpv exits with code 10
--cmd-11
Command to run if mpv exits with code 11
--cmd-12
Command to run if mpv exits with code 12
--cmd-13
Command to run if mpv exits with code 13
--cmd-14
Command to run if mpv exits with code 14
--cmd-15
Command to run if mpv exits with code 15
--cmd-20
Command to run if mpv exits with code 20
--cmd-127
Command to run if mpv exits with code 127
-I, --interactive
Interactive decision making after playback
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
listen
Listen to audio with mpv
Examples:
$ disco listen my_music.db
$ disco listen my_music.db --random
All Options
$ disco listen --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
--cmd-0
Command to run if mpv exits with code 0
--cmd-1
Command to run if mpv exits with code 1
--cmd-2
Command to run if mpv exits with code 2
--cmd-3
Command to run if mpv exits with code 3
--cmd-4
Command to run if mpv exits with code 4
--cmd-5
Command to run if mpv exits with code 5
--cmd-6
Command to run if mpv exits with code 6
--cmd-7
Command to run if mpv exits with code 7
--cmd-8
Command to run if mpv exits with code 8
--cmd-9
Command to run if mpv exits with code 9
--cmd-10
Command to run if mpv exits with code 10
--cmd-11
Command to run if mpv exits with code 11
--cmd-12
Command to run if mpv exits with code 12
--cmd-13
Command to run if mpv exits with code 13
--cmd-14
Command to run if mpv exits with code 14
--cmd-15
Command to run if mpv exits with code 15
--cmd-20
Command to run if mpv exits with code 20
--cmd-127
Command to run if mpv exits with code 127
-I, --interactive
Interactive decision making after playback
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
stats
Show library statistics
All Options
$ disco stats --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
history
Show playback history
Examples:
$ disco history my_videos.db
$ disco history my_videos.db --inprogress
All Options
$ disco history --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
history-add
Add paths to playback history
All Options
$ disco history-add --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--done
Mark as done
mpv-watchlater
Import mpv watchlater files to history
All Options
$ disco mpv-watchlater --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
serve
Start Web UI server
Examples:
$ disco serve my_videos.db my_music.db
$ disco serve --readonly my_videos.db
All Options
$ disco serve --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
-B, --big-dirs
Aggregate by parent directory
--file-counts
Filter by number of files in directory (e.g., >5, 10%1)
--group-by-extensions
Group by file extensions
--group-by-size
Group by size buckets
--group-by-parent
Group media by parent directory with counts and totals
-D, --depth
Aggregate at specific directory depth
--min-depth
Minimum depth for aggregation
--max-depth
Maximum depth for aggregation
--parents
Include parent directories in aggregation
--folders-only
Only show folders
--files-only
Only show files
--folder-sizes
Filter folders by total size
--folder-counts
Filter folders by number of subfolders
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
-p, --port
Port to listen on
--public-dir
Override embedded web assets with local directory
--dev
Enable development mode (auto-reload)
--read-only
Disable write operations (progress tracking, playlist modifications, deletions)
--no-browser
Don't open browser on startup
optimize
Optimize database (VACUUM, ANALYZE, FTS optimize)
Examples:
$ disco optimize my_videos.db
All Options
$ disco optimize --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
repair
Repair malformed database using sqlite3
All Options
$ disco repair --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
tui
Interactive TUI media picker
All Options
$ disco tui --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
readme
Generate README.md content
All Options
$ disco readme --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-q, --query
Raw SQL query (overrides all query building)
-L, --limit
Limit results per database
-a, --all
Return all results (no limit)
--offset
Skip N results
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
--created-after
Created after date (YYYY-MM-DD)
--created-before
Created before date (YYYY-MM-DD)
--modified-after
Modified after date (YYYY-MM-DD)
--modified-before
Modified before date (YYYY-MM-DD)
--downloaded-after
Downloaded after date (YYYY-MM-DD)
--downloaded-before
Downloaded before date (YYYY-MM-DD)
--deleted-after
Deleted after date (YYYY-MM-DD)
--deleted-before
Deleted before date (YYYY-MM-DD)
--played-after
Last played after date (YYYY-MM-DD)
--played-before
Last played before date (YYYY-MM-DD)
--hide-deleted
Exclude deleted files from results
--only-deleted
Include only deleted files in results
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
-B, --big-dirs
Aggregate by parent directory
--file-counts
Filter by number of files in directory (e.g., >5, 10%1)
--group-by-extensions
Group by file extensions
--group-by-size
Group by size buckets
--group-by-parent
Group media by parent directory with counts and totals
-D, --depth
Aggregate at specific directory depth
--min-depth
Minimum depth for aggregation
--max-depth
Maximum depth for aggregation
--parents
Include parent directories in aggregation
--folders-only
Only show folders
--files-only
Only show files
--folder-sizes
Filter folders by total size
--folder-counts
Filter folders by number of subfolders
--regex-sort
Sort by splitting lines and sorting words
--regexs
Regex patterns for line splitting
--word-sorts
Word sorting strategies
--line-sorts
Line sorting strategies
--compat
Use natsort compat mode
--preprocess
Remove junk common to filenames and URLs
--stop-words
List of words to ignore
--duplicates
Filter for duplicate words (true/false)
--unique-only
Filter for unique words (true/false)
--similar
Find similar files or folders
--sizes-delta
Size difference threshold (%)
--counts-delta
File count difference threshold (%)
--durations-delta
Duration difference threshold (%)
--filter-names
Cluster by name similarity
--filter-sizes
Cluster by size similarity
--filter-counts
Cluster by count similarity
--filter-durations
Cluster by duration similarity
--total-sizes
Compare total sizes (folders only)
--total-durations
Compare total durations (folders only)
--only-duplicates
Only show duplicate items
--only-originals
Only show original items
-C, --cluster-sort
Group items by similarity
--clusters
Number of clusters
--tfidf
Use TF-IDF for clustering
--move-groups
Move grouped files into separate directories
--print-groups
Print clusters as JSON
--audio
Dedupe database by artist + album + title
--extractor-id
Dedupe database by extractor_id
--title-only
Dedupe database by title
--duration-only
Dedupe database by duration
--filesystem
Dedupe filesystem database (hash)
--compare-dirs
Compare directories
--basename
Match by basename similarity
--dirname
Match by dirname similarity
--min-similarity-ratio
Filter out matches with less than this ratio (0.7-0.9)
--dedupe-cmd
Command to run for deduplication (rmlint-style: cmd duplicate keep)
--fts
Use FTS5 full-text search
--fts-table
FTS table name
--no-fts
Disable full-text search, use substring search only
-R, --related
Find media related to the first result
-O, --play-in-order
Play media in order
--no-play-in-order
Don't play media in order
--loop
Loop playback
-M, --mute
Start playback muted
--override-player
Override default player (e.g. --player 'vlc')
--start
Start playback at specific time/percentage
--end
Stop playback at specific time/percentage
--volume
Set initial volume (0-100)
--fullscreen
Start in fullscreen
--no-subtitles
Disable subtitles
--subtitle-mix
Probability to play no-subtitle content
-4, --interdimensional-cable
Duration to play (in seconds) while changing the channel
--speed
Playback speed
--save-playhead
Save playback position on quit
--mpv-socket
Mpv socket path
--watch-later-dir
Mpv watch_later directory
--player-args-sub
Player arguments for videos with subtitles
--player-args-no-sub
Player arguments for videos without subtitles
--cast
Cast to chromecast groups
--cast-device
Chromecast device name
--cast-with-local
Play music locally at the same time as chromecast
--cmd-0
Command to run if mpv exits with code 0
--cmd-1
Command to run if mpv exits with code 1
--cmd-2
Command to run if mpv exits with code 2
--cmd-3
Command to run if mpv exits with code 3
--cmd-4
Command to run if mpv exits with code 4
--cmd-5
Command to run if mpv exits with code 5
--cmd-6
Command to run if mpv exits with code 6
--cmd-7
Command to run if mpv exits with code 7
--cmd-8
Command to run if mpv exits with code 8
--cmd-9
Command to run if mpv exits with code 9
--cmd-10
Command to run if mpv exits with code 10
--cmd-11
Command to run if mpv exits with code 11
--cmd-12
Command to run if mpv exits with code 12
--cmd-13
Command to run if mpv exits with code 13
--cmd-14
Command to run if mpv exits with code 14
--cmd-15
Command to run if mpv exits with code 15
--cmd-20
Command to run if mpv exits with code 20
--cmd-127
Command to run if mpv exits with code 127
-I, --interactive
Interactive decision making after playback
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
--hash-gap
Gap between segments (0.0-1.0 as percentage of file size, or absolute bytes if >1)
--hash-chunk-size
Size of each segment to hash
--hash-threads
Number of threads to use for hashing a single file
-t, --only-tables
Comma separated specific table(s)
--primary-keys
Comma separated primary keys
--business-keys
Comma separated business keys
--upsert
Upsert rows on conflict
--ignore
Ignore rows on conflict (only-new-rows)
--only-target-columns
Only copy columns that exist in target
--skip-columns
Columns to skip during merge
--databases
Specific database paths to query (must be in server's allowed list). Can be specified multiple times.
regex-sort
Sort by splitting lines and sorting words
All Options
$ disco regex-sort --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
--regex-sort
Sort by splitting lines and sorting words
--regexs
Regex patterns for line splitting
--word-sorts
Word sorting strategies
--line-sorts
Line sorting strategies
--compat
Use natsort compat mode
--preprocess
Remove junk common to filenames and URLs
--stop-words
List of words to ignore
--duplicates
Filter for duplicate words (true/false)
--unique-only
Filter for unique words (true/false)
--output-path
Output file path (default stdout)
cluster-sort
Group items by similarity
All Options
$ disco cluster-sort --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--similar
Find similar files or folders
--sizes-delta
Size difference threshold (%)
--counts-delta
File count difference threshold (%)
--durations-delta
Duration difference threshold (%)
--filter-names
Cluster by name similarity
--filter-sizes
Cluster by size similarity
--filter-counts
Cluster by count similarity
--filter-durations
Cluster by duration similarity
--total-sizes
Compare total sizes (folders only)
--total-durations
Compare total durations (folders only)
--only-duplicates
Only show duplicate items
--only-originals
Only show original items
-C, --cluster-sort
Group items by similarity
--clusters
Number of clusters
--tfidf
Use TF-IDF for clustering
--move-groups
Move grouped files into separate directories
--print-groups
Print clusters as JSON
--regex-sort
Sort by splitting lines and sorting words
--regexs
Regex patterns for line splitting
--word-sorts
Word sorting strategies
--line-sorts
Line sorting strategies
--compat
Use natsort compat mode
--preprocess
Remove junk common to filenames and URLs
--stop-words
List of words to ignore
--duplicates
Filter for duplicate words (true/false)
--unique-only
Filter for unique words (true/false)
--output-path
Output file path (default stdout)
sample-hash
Calculate a hash based on small file segments
All Options
$ disco sample-hash --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--hash-gap
Gap between segments (0.0-1.0 as percentage of file size, or absolute bytes if >1)
--hash-chunk-size
Size of each segment to hash
--hash-threads
Number of threads to use for hashing a single file
-c, --columns
Columns to display
-j, --json
Output results as JSON
--summarize
Print aggregate statistics
-f, --frequency
Group statistics by time frequency (daily, weekly, monthly, yearly)
--tui
Interactive TUI mode
open
Open files with default application
All Options
$ disco open --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
--trash
Trash files after action
--post-action
Post-action: none, delete, mark-deleted, move, copy
--delete-files
Delete files after action
--delete-rows
Delete rows from database
--mark-deleted
Mark as deleted in database
--move-to
Move files to directory
--copy-to
Copy files to directory
--action-limit
Stop after N files
--action-size
Stop after N bytes (e.g., 10GB)
--track-history
Track playback history
browse
Open URLs in browser
All Options
$ disco browse --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
-s, --include
Include paths matching pattern
-E, --exclude
Exclude paths matching pattern
--regex
Filter paths by regex pattern
--path-contains
Path must contain all these strings
--paths
Exact paths to include
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
--category
Filter by category
--genre
Filter by genre
--language
Filter by language
-e, --ext
Filter by extensions (e.g., .mp4,.mkv)
--video-only
Only video files
--audio-only
Only audio files
--image-only
Only image files
--text-only
Only text/ebook files
--portrait
Only portrait orientation files
--scan-subtitles
Scan for external subtitles during import
--online-media-only
Exclude local media
--local-media-only
Exclude online media
-u, --sort-by
Sort by field
-V, --reverse
Reverse sort order
-n, --nat-sort
Use natural sorting
-r, --random
Random order
-k, --re-rank
Add key/value pairs re-rank sorting by multiple attributes (COLUMN=WEIGHT)
--browser
Browser to use
now
Show current mpv playback status
All Options
$ disco now --help
Flags:
--mpv-socket
Mpv socket path
--cast-device
Chromecast device name
-v, --verbose
Enable verbose logging
next
Skip to next file in mpv
All Options
$ disco next --help
Flags:
--mpv-socket
Mpv socket path
--cast-device
Chromecast device name
-v, --verbose
Enable verbose logging
stop
Stop mpv playback
All Options
$ disco stop --help
Flags:
--mpv-socket
Mpv socket path
--cast-device
Chromecast device name
-v, --verbose
Enable verbose logging
pause
Toggle mpv pause state
All Options
$ disco pause --help
Flags:
--mpv-socket
Mpv socket path
--cast-device
Chromecast device name
-v, --verbose
Enable verbose logging
seek
Seek mpv playback
All Options
$ disco seek --help
Flags:
--mpv-socket
Mpv socket path
--cast-device
Chromecast device name
-v, --verbose
Enable verbose logging
merge-dbs
Merge multiple SQLite databases
All Options
$ disco merge-dbs --help
Flags:
-v, --verbose
Enable verbose logging
--simulate
Dry run; don't actually do anything
-y, --no-confirm
Don't ask for confirmation
-T, --timeout
Quit after N minutes/seconds
--search
Search terms (space-separated for AND, | for OR)
-S, --size
Size range (e.g., >100MB, 1GB%10)
-d, --duration
Duration range (e.g., >1hour, 30min%10)
--modified
Filter by modification time
--created
Filter by creation time
--downloaded
Filter by download time
--duration-from-size
Constrain media to duration of videos which match any size constraints
--watched
Filter by watched status (true/false)
--unfinished
Has playhead but not finished
-P, --partial
Filter by partial playback status
--play-count-min
Minimum play count
--play-count-max
Maximum play count
--completed
Show only completed items
--in-progress
Show only items in progress
--with-captions
Show only items with captions
--flexible-search
Flexible search (fuzzy)
--exact
Exact match for search
-w, --where
SQL where clause(s)
--exists
Filter out non-existent files
-o, --fetch-siblings
Fetch siblings of matched files (each, all, if-audiobook)
--fetch-siblings-max
Maximum number of siblings to fetch
-t, --only-tables
Comma separated specific table(s)
--primary-keys
Comma separated primary keys
--business-keys
Comma separated business keys
--upsert
Upsert rows on conflict
--ignore
Ignore rows on conflict (only-new-rows)
--only-target-columns
Only copy columns that exist in target
--skip-columns
Columns to skip during merge
explode
Create symlinks for all subcommands (busybox-style)
All Options
$ disco explode --help
update
Check for and install updates from GitHub
All Options
$ disco update --help
version
Show version and build information
All Options
$ disco version --help
Flags:
-v, --verbose
Show verbose output including dependencies
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
disco
command
|
|
|
internal
|
|
|
filter
Package filter provides legacy in-memory filtering for media.
|
Package filter provides legacy in-memory filtering for media. |
|
utils/pathutil
Package pathutil provides cross-platform path handling utilities.
|
Package pathutil provides cross-platform path handling utilities. |