Don't reinvent the wheel! Use metadata systems that work!
Your application has great potential. But...
Do not use the file name to store metadata! File names should not contain any user generated information. Storing metadata has numerous problems: security, privacy, non-portability, just to name a few.
If you are going to support every kind of file, then you should use what is already there. Audio, video, image and document files already contain metadata. You have to read that metadata and import it to your application. Don't force the user to reenter all of it.
Besides format specific metadata, there's also multiformat metadata. It's called XMP. It's even an international standard.
XMP is right format for what you are trying to accomplish. Support already exist for the most used file formats and those that can't embed the metadata itself can use sidecar files.
XMP support is widespread and exist in every platform. That make it portable and future proof.
XMP already supports that metadata of your application without any hacks: Title; Author; Description; Keywords(Tags); Ratings. And if your application generates specific metadata, you can add it in a standard way by using namespaces.
I suggest that you use XMP sidecar files. XMP sidecar files are just text files with a XML structure, they are very small and anyone edit them, even with a text editor. By using sidecar files you lower the risk of corrupting the users' files when metadata is added.
There's very good backend support for XMP metadata writing, reading and modification: ExifTool (http://www.sno.phy.queensu.ca/~phil/exiftool/), Exiv2 (http://www.exiv2.org/) and Adobe XMP SDK (http://www.adobe.com/devnet/xmp.html) and Exempi (http://libopenraw.freedesktop.org/wiki/Exempi/). They are all open source and they are all cross-platform.
ExifTool can even read other types of metadata in almost every type of file format, form audio to office documents.
You can use ExifTool to import metadata that already exist in the files.
The ExifTool website contains an wealth of information about metadata in general and XMP in particular: http://www.sno.phy.queensu.ca/~phil/exiftool/
Alice Treat commented
Using filename to store tag... Cant use lot of tag coz filename limit.
Using filemeta to store tag... NTFS only, no crossplatform
Using database to store tag... Its ok, but still need to able to store tag for
individual file/folder for cloud/other device. Perhaps can be not vendor-locked but idk
Mmm, how about store the tag in file...
File is should not touched
Looking at video file... mkv... store video audio subtitle... container...
Container! container that can insert all file type...
zip! rar! 7z!
How about the tag is stored in zip. so all file is in zip.
Not vendor locked, easier to transport. file is not touched, tag is accessable, crossplatfrom, future-proff
Custom thumbnail feature is nice too
@nick - if you bear in mind that changing a filename of movie in Linux while watching the movie has zero effect on your moving watching. The assumption doesn't hold up.
I found this info:
In Linux using EXT filesystem, a file name is not stored in a file, it is stored in the directory entry (dentry) that the file lives in, where the inode of the file is then mapped to a name. Changing a filename will have no affect on its md5sum in Linux.
That, IMO is the way it should be, and it explains why my movies continue playing :9
In answer to a lot of seemingly negative comments, I feel I have to respond.
I'm using Linux, and had been looking for a way to index my numerous images and videos within the same program. I tried many others, but couldn't find anything sustainable. By that, i mean not storing the tag data in some obscure hidden location or database.
I couldn't even find a program that would allow me to tag ALL video filetypes. The fact that Tagspaces allows me to tag absolutely anything is great.
Also it matters a lot that I can wipe my OS and reinstall, and all my tags are intact without first backing up and restoring a database. I would accept a solution that stores tags in an accociated txt or xml file or similar, but as yet haven't found anything.
No idea how it is in Windows, or OSX, but in Linux I can even tag movies while I'm watching them, and playback isn't affected.
Can tagspaces make it tags stored like TMSU? TMSU even creates a virtual filesystem to allow files to be navigated based on tags.
At this point, tagpspace is a nice mockup for some application, which would not break the basic assumption of every software out there, of stable filename
changing filename is breaking the most widespread assumption of every mechanism out there.
In Unix, everything is a file (with a name). Meaning tagspace breaks... everything
I just realized that filenames get changed when tags are added. Just want to echo others who've said that this makes the program unusable.
Let me give an example, say I have an executable program "job_tracker_cli" which I've added to my PATH, and I have a bash alias which expands "job" to call this program. If I decide to tag my executable file with "cli" or "employment", then my alias will break and I will have to type "job_tracker_cli[cli\ employment]" to run the file.
Although this application doesnt seem to support adding tags to folders, the same problem would exist in that situation
Stefan Infp commented
filemeta is an application that solves this problem at least for NTFS systems. It can also backup the meta information of files and restore it in batch mode if needed. This method could also be used by TagSpaces
As my personal opinion I would like to express that tags in filenames are not the only way to achieve cross platform integration. Sure one can use XMP, SQLite, XML, JSON, etc, etc, etc.
What are the common use cases here? What is the product trying to solve? Sure lots of people end up adding their feature requests for many things but fundamentally why do people want to use Tag Spaces instead of the millions of other apps out there?
For me personally I was looking for a personal Wiki (that is not out there, in file form because it has nice Markdown and HTML editing capabilities) where I can document various topics, tag them, and work off tags and not really care so much about folders. I want tag lookups to happen instantaneously and the current approach relies on the underlying filesystem to traverse folders and that can become slow. I also like to sync this with Dropbox (and potentially other cloud drives).
Having a data solution that would index tags for instant lookups would be very beneficial and that might mean that having tag names in filenames are very restrictive. In this case having something like SQLite (with full text indexing extensions) you can get that instance lookup performance. SQLite is a single file solution that is very cross platform and can sync very well with other cloud drives and so filenames no longer have to change.
Downside is that the TagSpaces is not aware of outside changes like it is now and any changes made on the outside will have to be updated by the user when opening up TagSpaces. Is that a train smash? Probably only if you had to work with hundreds of files and you had the opportunity to insert tags programmatically and now you have to do that manually. Is there a use case for that? I doubt that because why would you need to use Tag Spaces then? Are there people who do stuff like that? That might require an import solution for this solution (that's probably where the tagname in filename was useful or having some XML sidecar option). But then again if you do stuff programmatically, you might as well update the SQLite DB yourself (with some guidance of course).
It might also be beneficial to have an Tag export feature to XML/JSON or something to know outside of TagSpaces what the tags are for files.
It is OK to differ from me, I'm not just mentioning problems but also a potential solution for the various scenarios. Hopefully this might empower the developers in their quest to cater for the masses.
Nicolas R commented
I really wish there was some non-filename backends.... that's such a shame apart from that it's really good except that makes it utterly unusable..
Roelf Renkema commented
Changing file-names is a nightmare in programming as well as in collaboration. It is simply not done. You effectively make files unaddressable by any other software.
I would like to support "Insane Tester" in that one shouldn't modify the filename of the file that you are tagging.
It causes issues with your cloud drive software (I've already encountered it the first time I've used it) in that if you add/remove tags the sync'ing tool can get confused and you end up with multiple copies of the same file except that the filenames are different.
Secondly on a platform like Windows, you're bound to run into the MAX_PATH problem where software might throw an error and when you inspect the logs it is the age old Windows 32 API problem of "you're not allowed to have more than 248 characters in a filename". You definitely don't want this problem to happen as you start adding tags.
Also I think having it configurable is also a good idea so that those who want the filename containing the tag still can have it but I definitely would prefer some sort of side-car meta-data file. It can even be as simple as having a file with the same name as the file you are tagging, just with a specific file extension which has simple text lines containing the tag names (for all I care).
Tomek Wiszniewski commented
I love the idea of tags in the filename. There are two reasons.
• Firstly, the portability of the idea across systems, synchonization tools, even e-mail. Keep it simple!
• Secondly, you can use it effectively with any file explorer. Just look for “[my-tag]” in a folder and it’ll find any file tagged “[my-tag]”.
I don’t think this is a security issue any more than a filename or folder name is.
Dokta Bob commented
Don't use XMP and definitly don't use a database. At the moment the solution that the developers follow is the only way to keep the tags accessable across ALL plattforms. By using a database the information would get lost, whenever you move the file on your disk because the database needs to store the path to your file and doesn't update itself.
Unfortunately UserVoice doesn't allow you to downvote a suggestion. I would give this a big thumbs down!
BUT... i would appreciate the possibility to READ and search for files that haveinformation stored in their Metadata like EXif or ID3-Tag. So i could search for specific files even if i did not yet have tagged them with TagSpace. A way to import those information and convert it into the filename would be great too... ID3tag --> TagSpace "format"
Yan Glina commented
The developer has it right. Adobe "standards" are fraught with bloat and inprecision of definition. Including it in the file name as an unordered list is great because it allows one to search for the tags using 3rd-party systems that have no knowledge of XMP, and files migrate w/o problems with existing infrastructure on ALL platforms (aside from anything that doesn't support filename longer than 8.3).
All I hear is you people ragging on about how putting tags in the file names is a horrible idea. Have you considered that it might be nearly impossible otherwise to fulfill the author's primary purpose, namely creating tags for files that work across all platforms without absolutely requiring a specific piece of software to interface with them? Yes, I agree completely that tagging the file names is cumbersome and could potentially cause problems. However, after reading all the posts about this subject, there really doesn't seem to be a good solution to the problem at the moment and every possible idea that has been put forward comes with its own set of problems. I think what the author needs to do is give users the ability to choose multiple means for tagging, such as side-car files, meta-data, and external databases. That way each individual user can choose the method they find preferable. Until that time, either keep your comments constructive instead of critical or go write your own software.
I completely agree. How sad is it that an application named "Tag Spaces" cripples itself by using said implementation for its tagging. Even if XMP does not meet your needs, consider storing the tags in some small sqlite database or something external. The filename, even on its length, puts a severe constraint on the tagging of this app.
AdminIlian (Dev, TagSpaces) commented
Thanks for tips. The XMP format looks very promissing, but it appears that the current implementations are mainly for images and PDF. The js implementation of the exiftool supports currently only reading of the meta information for images. So it is a long road to have XMP integrated in TagSpaces for all file types. But I can imagine to integrate the exiftool.js in the TagSpaces image viewer soon.