Welcome to TagStudio v9.5! This update has been several months in the making, and has focused largely on internal changes that completely rework the library system to run on SQLite instead of a homebrew JSON solution. This key change has allowed us to dramatically improve the search engine, reduce memory usage for large libraries, and provide a stable framework for several new additions - both in this release and in future releases moving forward! Despite this being a largely backend-focused update, there's still some exciting new features and changes that should make your tagging experiences better than ever! Thank you so much to everyone who's helped make this happen!
- Travis (CyanVoxel)
Added
Overhauled Search Engine
Boolean Operators
- feat: implement query language by @Computerdores in #606
- feat: optimize AND queries by @Computerdores in #679
Filetype, Mediatype, and Glob Path Searches
- fix: remove wildcard requirement for tags by @Tyrannicodin in #481
- feat: add filetype and mediatype searches by @python357-1 in #575
- feat: make path search use globs by @python357-1 in #582
- feat: implement search equivalence of "jpg" and "jpeg" filetypes by @Computerdores in #649
Sortable Results
- feat: sort by "date added" in library by @Computerdores in #674
Autocomplete
- feat: add autocomplete for search engine by @python357-1 in #586
Replaced "Tag Fields" with Tag Categories
Instead of tags needing to be added to a tag field type such as "Meta Tags", "Content Tags", or just the "Tags" field, tags are now added directly to file entries with no intermediary step. While tag field types offered a way to further organize tags, it was cumbersome, inflexible, and simply not fully fleshed out. Tag Categories offer all of the previous (intentional) functionality while greatly increasing the ease of use and customization.
-
feat!: tag categories by @CyanVoxel in #655
Thumbnails and File Previews
New Thumbnail Support
- feat: add svg thumbnail support (port #442) by @Tyrannicodin and @CyanVoxel in #540
- feat: add pdf thumbnail support (port #378) by @Heiholf and @CyanVoxel in #543
- feat: add ePub thumbnail support (port #387) by @Heiholf and @CyanVoxel in #539
- feat: add OpenDocument thumbnail support (port #366) by @Joshua-Beatty and @CyanVoxel in #545
- feat: add JXL thumbnail and animated APNG + WEBP support (port #344 and partially port #357) by @BPplays and @CyanVoxel in #549
- fix: catch ImportError for pillow_jxl module by @CyanVoxel in a2f9685
Audio Playback
Thumbnail Caching
- feat(ui): add thumbnail caching by @CyanVoxel in #694
Tags
Delete Tags (Finally!)
- feat: remove and create tags from tag database panel by @DandyDev01 in #569
New Tag Colors + UI
- feat: expanded tag color system by @CyanVoxel in #709
- fix(ui): use correct pink tag color by @CyanVoxel in 431efe4
- fix(ui): use consistent tag outline colors by @CyanVoxel in 020a73d
New Tag Alias UI
- fix: preview panel aliases not staying up to date with database by @DandyDev01 in #641
- fix: subtags/parent tags & aliases update the UI for building a tag by @DandyDev01 in #534
Miscellaneous
- feat: about section by @mashed5894 in #712
- feat(ui): add configurable splash screens by @CyanVoxel in #703
- feat(ui): show filenames in thumbnail grid by @CyanVoxel in #633
Fixed
- fix(ui): display all tags in panel during empty search by @samuellieberman in #328
- fix: avoid
KeyError
inadd_folders_to_tree()
(fix #346) by @CyanVoxel in #347 - fix: error on closing library by @yedpodtrzitko in #484
- fix: resolution info #550 by @Roc25 in #551
- fix: remove queued thumnail jobs when closing library by @yedpodtrzitko in #583
- fix: use absolute ffprobe path on macos (Fix #511) by @CyanVoxel in #629
- fix(ui): prevent duplicate parent tags in UI by @SkeleyM in #665
- fix: fix -o flag not working if path has whitespace around it by @python357-1 in #670
- fix: better file opening compatibility with non-ascii filenames by @SkeleyM in #667
- fix: restore environment before launching external programs by @mashed5894 in #707
- fix: have pydub use known ffmpeg + ffprobe locations by @CyanVoxel in #724
- fix: add ".DS_Store" to
GLOBAL_IGNORE_SET
by @CyanVoxel in b72a2f2 - fix: don't add "._" files to libraries by @CyanVoxel in eb1f634
Changed
SQLite Save File Format
This was the main focus of this update, and where the majority of development time and resources have been spent since v9.4. These changes include everything that was done to migrate from the JSON format to SQLite starting from the initial SQLite PR, while re-implementing every feature from v9.4 as the initial SQLite PR was based on v9.3.x at the time.
- refactor!: use SQLite and SQLAlchemy for database backend by @yedpodtrzitko in #332
- feat: make search results more ergonomic by @yedpodtrzitko in #498
- feat: store
Entry
suffix separately by @yedpodtrzitko in #503 - feat: port thumbnail (#390) and related features to v9.5 by @CyanVoxel in #522
- fix: don't check db version with new library by @yedpodtrzitko in #536
- fix(ui): update ui when removing fields by @DandyDev01 in #560
- feat(parity): backend for aliases and parent tags by @DandyDev01 in #596
- fix: "open in explorer" opens correct folder by @KirilBourakov in #603
- fix: ui/ux parity fixes for thumbnails and files by @CyanVoxel in #608
- feat(parity): migrate json libraries to sqlite by @CyanVoxel in #604
- fix: clear all setting values when opening a library by @VasigaranAndAngel in #622
- fix: remove/rework windows path tests by @VasigaranAndAngel in #625
- fix: add check to see if library is loaded in filter_items by @Roc25 in #547
- fix: multiple macro errors by @Computerdores in #612
- fix: don't allow blank tag alias values in db by @CyanVoxel in #628
- feat: Reimplement drag drop files on sql migration by @seakrueger in #528
- fix: stop sqlite db from being updated while running tests by @python357-1 in #648
- fix: enter/return adds top result tag by @SkeleyM in #651
- fix: show correct unlinked files count by @SkeleyM in #653
- feat: implement parent tag search by @Computerdores in #673
- fix: only close add tag menu with no search by @SkeleyM in #685
- fix: drag and drop no longer resets by @SkeleyM in #710
- feat(ui): port "create and add tag" to main branch by @SkeleyM in #711
- fix: don't add default title field, use proper phrasing for adding files by @CyanVoxel in #701
- fix: preview panel + main window fixes and optimizations by @CyanVoxel in #700
- fix: sort tag results by @mashed5894 in #721
- fix: restore opening last library on startup by @SkeleyM in #729
- fix(ui): don't always create tag on enter by @SkeleyM in #731
- fix: use tag aliases in tag search by @CyanVoxel in #726
- fix: keep initial id order in
get_entries_full()
by @CyanVoxel in #736 - fix: always catch db mismatch by @CyanVoxel in #738
- fix: relink unlinked entry to existing entry without sql error by @mashed5894 in #730
- fix: refactor and fix bugs with missing_files.py by @CyanVoxel in #739
- fix: dragging files references correct entry IDs @CyanVoxel in 44ff17c
- ui: port splash screen from Alpha-v9.4 by @CyanVoxel in af760ee
- fix: tags created from tag database now add aliases by @CyanVoxel in 2903dd2
- fix: check for tag name parity during JSON migration by @CyanVoxel in #748
- feat(ui): re-implement tag display names on sql by @CyanVoxel in #747
- fix(ui): restore Windows accent color on PySide 6.8.0.1 by @CyanVoxel in #755
- fix(ui): (mostly) fix right-click search option on tags by @CyanVoxel in #756
- feat: copy/paste fields and tags by @mashed5894 in #722
UI/UX
- feat(ui): pre-select default tag name in
BuildTagPanel
by @Cool-Game-Dev in #592 - feat(ui): keyboard navigation for editing tags by @Computerdores in #407
- feat(ui): use tag query as default new tag name by @CyanVoxel in 29c0dfd
- feat(ui): shortcut to add tags to selected entries; change click behavior of tags to edit by @CyanVoxel in #749
- fix(ui): use consistent dark mode colors for all systems by @CyanVoxel in #752
- fix(ui): use camera white balance for raw images by @CyanVoxel in 6ee5304
- Mixed field editing has been limited due to various bugs in both the JSON and SQL implementations. This will be re-implemented in a future release.
Performance
- feat: improve performance of "Delete Missing Entries" by @Toby222 and @Computerdores in #696
Internal Changes
- refactor: combine open launch args by @UnusualEgg in #364
- feat: add date_created, date_modified, and date_added columns to entries table by @CyanVoxel in #740
Still Coming in v9.5:
- Translations
- Custom user-created tag colors
- File recycling (Port from v9.4)
New Contributors
- @UnusualEgg made their first contribution in #364
- @zierf made their first contribution in #418
- @floogulinc made their first contribution in #460
- @CarterPillow made their first contribution in #467
- @Kn4ughty made their first contribution in #452
- @Bamowen made their first contribution in #474
- @Tyrannicodin made their first contribution in #481
- @FB100 made their first contribution in #496
- @weblate made their first contribution in #526
- @Hissymaster made their first contribution in #564
- @Roc25 made their first contribution in #551
- @python357-1 made their first contribution in #581
- @jakehurst made their first contribution in #594
- @DandyDev01 made their first contribution in #560
- @Cool-Game-Dev made their first contribution in #592
- @KirilBourakov made their first contribution in #603
- @csponge made their first contribution in #576
- @VasigaranAndAngel made their first contribution in #622
- @SkeleyM made their first contribution in #651
- @Nginearing made their first contribution in #676
- @mashed5894 made their first contribution in #712
Full Changelog: v9.3.2...v9.5.0-pr1