Skip to content

[Bug]: Doesn't load library #1239

Description

@racerand

Checklist

  • I am using an up-to-date version.
  • I have read the documentation.
  • I have searched existing issues.

TagStudio Version

Library 103 with commit 88d0b47

Operating System & Version

NixOS 25.05

Description

When loading my library with 146000+ entries it never appears to finish loading.
I can see that it tries to execute:

SELECT DISTINCT entries.id
FROM entries
WHERE NOT (EXISTS (SELECT 1 
    FROM tags, tag_entries 
    WHERE entries.id = tag_entries.entry_id AND tags.id = tag_entries.tag_id AND tags.is_hidden)) 
ORDER BY entries.id DESC

But the application becomes unresponsive and after leaving it for 20+ min nothing appears to have changed.
I executed the same SQL in sqlitebrowser and it also never finished.

I tried executing:

SELECT DISTINCT entries.id 
FROM entries 
WHERE NOT 
	(entries.id IN 
		(SELECT tag_entries.entry_id 
		FROM tags JOIN tag_entries 
		WHERE tags.is_hidden AND tags.id = tag_entries.tag_id)) 
ORDER BY entries.id DESC

Instead, and the response was instant, but I'm not sure how to translate this to alchemy code

Expected Behavior

Loading the library should at most take a few minutes.

Steps to Reproduce

  1. Create large library
  2. Open large library

Logs

2025-12-02 00:35:17 [info     ] [FFmpeg] Using FFprobe location: ffprobe (Found)
2025-12-02 00:35:17 [info     ] [FFmpeg] Using FFmpeg location: ffmpeg (Found)
2025-12-02 00:35:17 [info     ] [ResourceManager] Resources Registered: count=37
2025-12-02 00:35:17 [info     ] [Settings] Global Settings File Path not specified, using default
2025-12-02 00:35:17 [info     ] [Settings] Reading Global Settings File path=PosixPath('/home/racerand/.config/TagStudio/settings.toml')
2025-12-02 00:35:17 [info     ] [Cache] Cache File not specified, using default one filename=/home/racerand/.config/TagStudio/TagStudio.ini
qt.multimedia.ffmpeg: Using Qt multimedia with FFmpeg version 8.0 GPL version 3 or later
Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory
2025-12-02 00:35:19 [error    ] Path does not exist.           open_path=None
2025-12-02 00:35:42 [info     ] [Library] Opening SQLite Library connection_string=sqlite:////run/media/racerand/4bd980f1-0194-4683-9164-d1aaa53047a4/Fansly/.TagStudio/ts_library.sqlite library_dir=PosixPath('/run/media/racerand/4bd980f1-0194-4683-9164-d1aaa53047a4/Fansly')
2025-12-02 00:35:42 [info     ] [Library] DB_VERSION: 103     
2025-12-02 00:35:42 [info     ] [Library] Creating DB tables...
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.TITLE: DefaultField(id=0, name='Title', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=True)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.AUTHOR: DefaultField(id=1, name='Author', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.ARTIST: DefaultField(id=2, name='Artist', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.URL: DefaultField(id=3, name='URL', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DESCRIPTION: DefaultField(id=4, name='Description', type=<FieldTypeEnum.TEXT_BOX: 'Text Box'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.NOTES: DefaultField(id=5, name='Notes', type=<FieldTypeEnum.TEXT_BOX: 'Text Box'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.COLLATION: DefaultField(id=9, name='Collation', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE: DefaultField(id=10, name='Date', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_CREATED: DefaultField(id=11, name='Date Created', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_MODIFIED: DefaultField(id=12, name='Date Modified', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_TAKEN: DefaultField(id=13, name='Date Taken', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_PUBLISHED: DefaultField(id=14, name='Date Published', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.BOOK: DefaultField(id=17, name='Book', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.COMIC: DefaultField(id=18, name='Comic', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.SERIES: DefaultField(id=19, name='Series', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.MANGA: DefaultField(id=20, name='Manga', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.SOURCE: DefaultField(id=21, name='Source', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_UPLOADED: DefaultField(id=22, name='Date Uploaded', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.DATE_RELEASED: DefaultField(id=23, name='Date Released', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.VOLUME: DefaultField(id=24, name='Volume', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.ANTHOLOGY: DefaultField(id=25, name='Anthology', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.MAGAZINE: DefaultField(id=26, name='Magazine', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.PUBLISHER: DefaultField(id=27, name='Publisher', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.GUEST_ARTIST: DefaultField(id=28, name='Guest Artist', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.COMPOSER: DefaultField(id=29, name='Composer', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:42 [debug    ] ValueType already exists       field=<FieldID.COMMENTS: DefaultField(id=30, name='Comments', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-12-02 00:35:43 [info     ] [Config] Thumbnail Cache Size: 1.02 GB
2025-12-02 00:35:43 [info     ] [Ignore] Processing the .ts_ignore file... last_mtime=None library=PosixPath('/run/media/racerand/4bd980f1-0194-4683-9164-d1aaa53047a4/Fansly') new_mtime=1763158157.844917
2025-12-02 00:35:43 [info     ] [Ignore]                       glob_patterns=[<Censored>]
2025-12-02 00:35:43 [warning  ] [PanelModal] add_callback not implemented for IgnoreModal
2025-12-02 00:35:43 [info     ] [Ignore] No updates to the .ts_ignore detected last_mtime=1763158157.844917 library=PosixPath('<PATH_TO_LIBRARY') new_mtime=1763158157.844917
2025-12-02 00:35:43 [info     ] searching library              filter=BrowsingState(page_index=0, sorting_mode=<SortingModeEnum.DATE_ADDED: 'file.date_added'>, ascending=False, random_seed=0, show_hidden_entries=False, query=None) query_full='SELECT DISTINCT entries.id \nFROM entries \nWHERE NOT (EXISTS (SELECT 1 \nFROM tags, tag_entries \nWHERE entries.id = tag_entries.entry_id AND tags.id = tag_entries.tag_id AND tags.is_hidden)) ORDER BY entries.id DESC'

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Priority: CriticalAn issue that requires immediate attentionTagStudio: LibraryRelating to the TagStudio library systemTagStudio: SearchThe TagStudio search engineType: BugSomething isn't working as intended

    Type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions