I became disillusioned with etunes and decided to work on µTunes instead.
Hackathon project!
Extremely minimal command-line music library manager and media player in the spirit of Git and UNIX. Uses a background process only for playing media files, and does not index or cache. Uses abstractions well-suited to the POSIX filesystem. Name origin: "filesystem" + "tunes" = "fstunes".
This package provides one binary, fstunes
. It has several available
subcommands:
- import: add media files to the database
- playlist: create or delete playlist
- insert: select song references using various filters, dereference, sort the results, and insert sequentially into a playlist; optionally also remove original references from playlists.
- remove: select song references using various filters and remove from playlists.
- edit: select song references using various filters, dereference, sort the results, write selected metadata to text file, open editor, write changes back and update pointers
- list: select song references using various filters, dereference, sort the results, and display selected metadata, optionally in summary format
- delete: remove media files from the database
- seek: jump to index in up-next playlist and optionally toggle play/pause
$ fstunes import <path>...
$ fstunes playlist (create | delete [-y, --yes]) NAME...
$ fstunes insert
[-m, --match FIELD=EXPR]
[ --match-literal FIELD=VALUE]
[ --match-set FIELD=VALUE1,VALUE2,...]
[ --match-range FIELD=LOW-HIGH]
[-M, --match-all FIELD]
[ --set-delimiter DELIM]
[ --range-delimiter DELIM]
[-s, --sort FIELD]
[-r, --reverse FIELD]
[-x, --shuffle FIELD]
[-t, --transfer]
[-y, --yes]
[--before | --after]
PLAYLIST INDEX
FIELD
may be artist
, album
, disk
, track
, song
,
extension
, from
, or index
. Special values for from
are media
and queue
.
$ fstunes remove
[-m, --match FIELD=EXPR]
[ --match-literal FIELD=VALUE]
[ --match-set FIELD=VALUE1,VALUE2,...]
[ --match-range FIELD=LOW-HIGH]
[-M, --match-all FIELD]
[ --set-delimiter DELIM]
[ --range-delimiter DELIM]
[-y, --yes]
$ fstunes edit
[-m, --match FIELD=EXPR]
[ --match-literal FIELD=VALUE]
[ --match-set FIELD=VALUE1,VALUE2,...]
[ --match-range FIELD=LOW-HIGH]
[-M, --match-all FIELD]
[ --set-delimiter DELIM]
[ --range-delimiter DELIM]
[-s, --sort FIELD]
[-r, --reverse FIELD]
[-x, --shuffle FIELD]
[-f, --fields FIELD1,FIELD2,...]
[-e, --editor EDITOR]
[-y, --yes]
$ fstunes list
[-m, --match FIELD=EXPR]
[ --match-literal FIELD=VALUE]
[ --match-set FIELD=VALUE1,VALUE2,...]
[ --match-range FIELD=LOW-HIGH]
[-M, --match-all FIELD]
[ --set-delimiter DELIM]
[ --range-delimiter DELIM]
[-s, --sort FIELD]
[-r, --reverse FIELD]
[-x, --shuffle FIELD]
[-f, --fields FIELD1,FIELD2,...]
$ fstunes delete
[-m, --match FIELD=EXPR]
[ --match-literal FIELD=VALUE]
[ --match-set FIELD=VALUE1,VALUE2,...]
[ --match-range FIELD=LOW-HIGH]
[-M, --match-all FIELD]
[ --set-delimiter DELIM]
[ --range-delimiter DELIM]
[-y, --yes]
$ fstunes seek [-p, --play | -P, --pause] [INDEX]
Set $FSTUNES_HOME
in the environment. The containing directory must
exist.
FSTUNES_HOME
edit
logs
media
ARTIST
ALBUM
DISK-TRACK SONG.EXTENSION
playlists
queue
N -> ../../media/ARTIST/ALBUM/DISK-TRACK SONG.EXTENSION
...
PLAYLIST
N -> ../../media/ARTIST/ALBUM/DISK-TRACK SONG.EXTENSION
...
...
temp