Added
.ts_ignore
File and Folder Ignore System
The previous system for ignoring file extensions has been replaced by a new .gitignore
-style pattern matching system. This uses a .ts_ignore
file inside your library's .TagStudio
folder with glob-like rules to give more power options than what was previously possible. This file can be edited inside within TagStudio or externally, and rules are hot-reloaded in either case. Existing extension rules have been migrated as closely as possible to this new system. For more information on this new system, visit the "Ignore Files" page on the documentation site.

Along with this system also comes the additional features:
- TagStudio can now traverse symlinks in your library folders
- TagStudio can now leverage ripgrep, a rust-based directory search tool, for faster library refreshing
- ripgrep must be installed on your system and able to be located by TagStudio
Pull Requests:
- feat: add
.ts_ignore
pattern ignoring system by @CyanVoxel in #897 - feat: replace extension exclusion system with
.ts_ignore
by @CyanVoxel in #1046
Library Information Window
A new "Library Information" window has been added and is accessible under the "View" window. This window includes statistics about your currently opened library, as well as convenient access to library cleanup tools. This includes a new tool to cleanup "ignored files", which are files that have been previously added to your library but now no longer meet the ignore pattern rules.

Pull Requests:
- feat: add LibraryInfoWindow with library statistics by @CyanVoxel in #1056
- feat: add library cleanup screen and 'fix ignored files' window by @CyanVoxel in #1070
Other Additions
- feat: add random sorting by @TheBobBobs in #1029
- feat: add exr thumbnail support by @CyanVoxel in #1035
- feat: add thumbnail generation toggle by @ZwodahS in #1057
- feat: cli version argument by @HeikoWasTaken in #1060
- feat: add setting to select splash screen by @CyanVoxel in #1077
- Includes a new "'95" splash screen originally intended for the 9.5.0 release

Fixed
- fix: searching with internal tag ids ignores sorting order by @CyanVoxel in #1038
- fix: folders with names of unlinked entries are linked by @purpletennisball in #1027
- fix: parent tags in tag editor are uneditable by @purpletennisball in #1073
- feat: auto mnemonics by @Computerdores in #1082 and #1083
Changed
Performance
- perf: optimize sql for or queries by @TheBobBobs in #948
- perf: Optimize db queries for preview panel by @TheBobBobs in #942
- fix: add tags to selected entries in bulk not individually by @Computerdores in #1028
Translations
- Chinese (Traditional Han Script) by @tkiuvvv233
- French updated by @Bamowen, @kitsumed
- German updated by @Livesi5e
- Hungarian updated by @smileyhead
- Japanese updated by wany-oh
- Polish updated by @FeatherPrince
- Portuguese updated by @SantosSi
- Romanian updated by @VLTNOgithub
- Russian updated by @Dott-rus
- Spanish updated by @JCC1998
- Swedish updated by konto
Internal Changes
- feat: swap IDs in tag_parents table by @HeikoWasTaken in #998
- fix: swap parent and child logic for TAG_CHILDREN_QUERY by @CyanVoxel in #1064
- fix(nix): fixup and rework, always use nixpkgs PySide/Qt by @xarvex in #1048
- refactor: make cache_manager thread safe by @TheBobBobs in #1039
- ci(tests): fix broken tests and add type hints by @CyanVoxel in #1062
- refactor: store DB version inside
versions
table by @CyanVoxel in #1058 - refactor: unwrap instead of assert not None by @Computerdores in #1068
- chore(thumb_renderer): prepare for pillow_heif removing AVIF support by @xarvex in #1065
New Contributors
- @HeikoWasTaken made their first contribution in #998
- @ZwodahS made their first contribution in #1057
Full Changelog: v9.5.3...v9.5.4