3 # id3fs - a FUSE-based filesystem for browsing audio metadata
4 # Copyright (C) 2010 Ian Beckwith <ianb@erislabs.net>
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 use lib '/home/ianb/projects/id3fs/id3fs/lib';
21 use Getopt::Long qw(Configure);
25 $me=($0=~/(?:.*\/)?(.*)/)[0];
33 Configure(qw(bundling no_ignore_case));
34 my $optret=GetOptions(
35 "verbose|v" => sub { $verbose++; },
37 "database|f=s" => \$dbpath,
38 "t|tagdepth=s" => \$tagdepth,
39 "o=s" => sub {;}, # silently drop options passed by mount
42 usage() if(scalar(@ARGV) != 2 || !$optret || $help);
47 my $db=ID3FS::DB->new($me, $verbose, 0, $source, $dbpath);
50 my $fuse=ID3FS::Fuse->new($db, $source, $mountpoint, $verbose, $tagdepth);
55 die("Usage: $me [-vqh] [-f <dbfile>] [--] <sourcedir> <mountpoint>\n".
56 " -v\t\t\tVerbose (repeat for more verbosity)\n".
57 " -h\t\t\tThis help\n".
58 " -f|--database=FILE\tPath to database file\n" .
59 " --\t\t\tEnd of options\n");
66 id3fsd - FUSE filesystem for browsing id3 tags
70 B<id3fsd> [B<-vh>] S<B<[-f >I<dbfile>]> [B<-->] I<SOURCEDIR> I<MOUNTPOINT>
74 id3fsd provides a browsable filesystem of your music files, organised
75 into sub-directories by id3 tags (or flac/ogg comments).
77 id3fsd allows you to construct boolean queries from a tag folksonomy
80 goth/AND/decade/1980s/
81 postrock/AND/NOT/rating/terrible/
82 thrash/OR/rapmetal/AND/NOT/wears-a-red-hat/
83 prog/AND/decade/1970s/OR/psychedelia/AND/decade/1960s/
84 location/sweden/AND/screamo/AND/postrock/
86 Multiple tags can be stored in the genre tag, separated by commas.
87 An index should first be created with L<id3fs-index(1)>, then id3fsd
88 can mount the files in I<SOURCEDIR> on the directory I<MOUNTPOINT>.
90 If not explicitly specified (with B<-f>), the index is searched for
91 at I<SOURCEDIR>/B<.id3fs>.
93 The resulting filesystem is read-only. Tags appear as directories,
94 and files appear as symlinks to the actual files in I<SOURCEDIR>.
98 To mount a view of F<~/music> on F<~/tags>:
101 $ id3fs-index ~/music
102 $ id3fsd ~/music ~/tags
104 You may need to be in the I<fuse> group, or be root.
112 Enable verbose operation. Repeat for more verbosity.
116 Show a short help message.
118 =item S<B<-f >I<FILE>> | S<B<--database=>I<FILE>>
120 Use database in I<FILE>. The default is I<SOURCEDIR>/B<.id3fs>.
128 =head1 FILESYSTEM LAYOUT
130 A path in the filesystem consists of a tag query expression, followed
131 by directories containing the matching files, arranged by artist and
136 /krautrock/AND/year/1971/
137 /krautrock/AND/year/1971/Can
138 /krautrock/AND/year/1971/Can/Tago Mago/01-Paperhouse.mp3
139 /krautrock/AND/year/1971/Can/NOALBUM/Can - Oh Yeah (Live).mp3
140 /krautrock/AND/year/1971/Can/TRACKS/01-Paperhouse.mp3
141 /krautrock/AND/year/1971/Can/TRACKS/Can - Oh Yeah (Live).mp3
142 /krautrock/AND/year/1971/NOARTIST/unknown-track.mp3
143 /krautrock/AND/year/1971/TRACKS/01-Paperhouse.mp3
147 Tags are extracted from the B<genre> tag of audio files with
150 Within the genre frame/comment, tags are separated by commas.
152 Tags can have values, separated by a slash, eg I<metal/thrash>,
153 I<rating/5>. Certain tags are automatically filled in from other file
154 metadata, see L</"Special Tags>.
156 =head2 Special Directories
162 This is a special directory in the root of the filesystem, that
163 provides access to all the indexed files, regardless of tags assigned.
167 All tracks that match the given tag expression, whether they have an
168 assigned artist and album or not.
172 Tracks matching the given expression that do not have an artist tag.
176 Tracks matching the given expression that do not have an album tag.
182 Several tags are automatically derived from other metadata in the
189 Extracted from the B<year> or B<DATE> tag. If not found defaults to
194 Also extracted from the B<year> or B<DATE> tag. If not found
195 defaults to B<decade/UNKNOWN>.
199 If a mp3 file has an ID3V1.1 genre tag, its value is assigned to
204 Type of audio file (mp3, ogg, flac). Always set.
208 =head1 FUSE AND MOUNTING AUTOMATICALLY
210 For others to be able to view your id3fs mount(s), you need to set the
211 option B<user_allow_other> in F</etc/fuse.conf>.
213 To mount a filesystem automatically, put an entry in F</etc/fstab>
216 id3fsd#/source/dir /mount/point defaults 0 0
220 Because id3fs offers a combinatorial explosion of views of your files,
221 processes recursing into the mount point will take a B<long> time to
224 Ensure your backups, cron jobs, F</etc/updatedb.conf>, etc. are
225 configured to exclude the mount point.
229 To mount an id3fs filesystem which indexes B<~/music/albums> on
232 First create the index:
234 id3fs-index -v ~/music/albums
236 If you have a large collection of music, this may take some time.
238 Then create the mountpoint:
242 and mount the filesystem:
244 id3fsd ~/music/albums ~/music/tags
246 Then explore the tags in ~/music/tags/
250 Please report any found to ianb@erislabs.net
254 L<id3fs-index(1)>, L<http://fuse.sourceforge.net>
258 Ian Beckwith <ianb@erislabs.net>
260 Many thanks to Aubrey Stark-Toller for help wrangling SQL.
264 The latest version can be found at:
266 L<http://erislabs.net/ianb/projects/id3fs/>
270 Copyright (C) 2010 Ian Beckwith <ianb@erislabs.net>
272 This program is free software: you can redistribute it and/or modify
273 it under the terms of the GNU General Public License as published by
274 the Free Software Foundation, either version 3 of the License, or
275 (at your option) any later version.
277 This program is distributed in the hope that it will be useful,
278 but WITHOUT ANY WARRANTY; without even the implied warranty of
279 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
280 GNU General Public License for more details.
282 You should have received a copy of the GNU General Public License
283 along with this program. If not, see <http://www.gnu.org/licenses/>.