TagStudio
TagStudio copied to clipboard
[Bug]: App Fails to Open Last Library on Startup and Segfaults on Directory Refresh
Checklist
- [x] I am using an up-to-date version.
- [x] I have read the documentation.
- [x] I have searched existing issues.
TagStudio Version
Alpha v9.5.5
Operating System & Version
Pop!_OS 22.04 LTS
Description
Intro
Apologies if these are two separate issues. This is my first time installing this program, so I got them simultaneously. I also want to make sure I express that this program is really unique and a great idea, and I look forward to using it, as there is nothing quite like it. Thank you for your effort in developing it. Perhaps when I have more free time I will try to contribute with some pull requests.
1st probem
On launch, the application consistently fails to open the last used library and instead displays an error dialog stating "Path does not exist. open_path=None".
This occurs even though the configuration files in ~/.config/TagStudio/ appear to be correct.
- settings.toml has open_last_loaded_on_startup = true.
- TagStudio.ini correctly lists the path to the last used library (/home/guga/Documents/2ndBrainMedia).
The configuration files are being read, as changes made in the GUI (like date_format) are correctly saved to settings.toml.
2nd problem
More critically, and I don't know if this is related, clicking the "Refresh Directories" button causes the application to crash immediately with a Segmentation fault (core dumped).
Context
These issues occur consistently under the following conditions:
- Using either the portable or the non-portable version.
- Running the executable from any location (~/Downloads, ~/, /usr/local/bin).
- With all listed dependencies confirmed to be installed.
Expected Behavior
On Startup:
The application should read the TagStudio.ini file and automatically open the last used library (/home/guga/Documents/2ndBrainMedia) without displaying an error.
On Refresh:
Clicking "Refresh Directories" should trigger a scan of the library files and update the view without crashing the application.
Steps to Reproduce
Startup Error
- Ensure a library has been previously opened so its path is saved in ~/.config/TagStudio/TagStudio.ini.
- Launch the TagStudio application from the terminal.
- Observe the "Path does not exist" error dialog appears.
Segmentation Fault Crash
- Launch the TagStudio application.
- If a library is not open, open any library.
- Click the "Refresh Directories" button in the UI.
- Observe the application immediately closes, and a Segmentation fault message is printed to the terminal.
Logs
guga@pop-os:~/.config/TagStudio$ ls
settings.toml TagStudio.ini
guga@pop-os:~/.config/TagStudio$ cat settings.toml
language = "en"
open_last_loaded_on_startup = true
generate_thumbs = true
thumb_cache_size = 500.0
cached_thumb_quality = 80
cached_thumb_resolution = 256
autoplay = true
loop = true
show_filenames_in_grid = true
page_size = 100
show_filepath = 1
tag_click_action = 0
theme = 2
splash = "default"
windows_start_command = false
date_format = "%d/%m/%Y"
hour_format = true
zero_padding = true
guga@pop-os:~/.config/TagStudio$ cat TagStudio.ini
[libs_list]
1759578544.5573475=/home/guga/Documents/2ndBrainMedia
guga@pop-os:~$ tagstudio
2025-10-04 13:43:03 [info ] [FFmpeg] Using FFprobe location: ffprobe (Found)
2025-10-04 13:43:03 [info ] [FFmpeg] Using FFmpeg location: ffmpeg (Found)
2025-10-04 13:43:03 [info ] [ResourceManager] Resources Registered: count=37
2025-10-04 13:43:03 [info ] [Settings] Global Settings File Path not specified, using default
2025-10-04 13:43:03 [info ] [Settings] Reading Global Settings File path=PosixPath('/home/guga/.config/TagStudio/settings.toml')
2025-10-04 13:43:03 [info ] [Cache] Cache File not specified, using default one filename=/home/guga/.config/TagStudio/TagStudio.ini
2025-10-04 13:43:05 [error ] Path does not exist. open_path=None
2025-10-04 15:36:02 [info ] [Library] Opening SQLite Library connection_string=sqlite:////home/guga/Documents/2ndBrainMedia/.TagStudio/ts_library.sqlite library_dir=PosixPath('/home/guga/Documents/2ndBrainMedia')
2025-10-04 15:36:02 [info ] [Library] DB_VERSION: 102
2025-10-04 15:36:02 [info ] [Library] Creating DB tables...
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.TITLE: DefaultField(id=0, name='Title', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=True)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.AUTHOR: DefaultField(id=1, name='Author', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.ARTIST: DefaultField(id=2, name='Artist', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.URL: DefaultField(id=3, name='URL', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DESCRIPTION: DefaultField(id=4, name='Description', type=<FieldTypeEnum.TEXT_BOX: 'Text Box'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.NOTES: DefaultField(id=5, name='Notes', type=<FieldTypeEnum.TEXT_BOX: 'Text Box'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.COLLATION: DefaultField(id=9, name='Collation', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE: DefaultField(id=10, name='Date', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_CREATED: DefaultField(id=11, name='Date Created', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_MODIFIED: DefaultField(id=12, name='Date Modified', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_TAKEN: DefaultField(id=13, name='Date Taken', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_PUBLISHED: DefaultField(id=14, name='Date Published', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.BOOK: DefaultField(id=17, name='Book', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.COMIC: DefaultField(id=18, name='Comic', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.SERIES: DefaultField(id=19, name='Series', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.MANGA: DefaultField(id=20, name='Manga', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.SOURCE: DefaultField(id=21, name='Source', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_UPLOADED: DefaultField(id=22, name='Date Uploaded', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.DATE_RELEASED: DefaultField(id=23, name='Date Released', type=<FieldTypeEnum.DATETIME: 'Datetime'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.VOLUME: DefaultField(id=24, name='Volume', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.ANTHOLOGY: DefaultField(id=25, name='Anthology', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.MAGAZINE: DefaultField(id=26, name='Magazine', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.PUBLISHER: DefaultField(id=27, name='Publisher', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.GUEST_ARTIST: DefaultField(id=28, name='Guest Artist', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.COMPOSER: DefaultField(id=29, name='Composer', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [debug ] ValueType already exists field=<FieldID.COMMENTS: DefaultField(id=30, name='Comments', type=<FieldTypeEnum.TEXT_LINE: 'Text Line'>, is_default=False)>
2025-10-04 15:36:02 [info ] [Config] Thumbnail Cache Size: 500 MB
2025-10-04 15:36:02 [info ] [Ignore] Processing the .ts_ignore file... last_mtime=None library=PosixPath('/home/guga/Documents/2ndBrainMedia') new_mtime=1757367052.0
2025-10-04 15:36:02 [info ] [Ignore] glob_patterns=['**/.Trashes/**', '*.aae', '.Trash-*/**', '**/.Spotlight-V100/**', '.fseventsd', '**/.Spotlight-V100', '*.aae/**', '.TagStudio/**', '.Trash/**', '.Trashes', '**/.DS_Store/**', '**/desktop.ini/**', '._*/**', '$RECYCLE.BIN/**', '**/.TemporaryItems', '**/.TemporaryItems/**', 'desktop.ini/**', '*.xmp', '**/$RECYCLE.BIN/**', '.localized', '**/.localized/**', '*.json', '**/.localized', '**/.Trash-*', '.TemporaryItems/**', 'desktop.ini', '**/.fseventsd', '**/.Trashes', '._*', '.Trashes/**', '**/System Volume Information/**', '**/*.xmp/**', '**/.TagStudio', '.TemporaryItems', '.Trash', '.DS_Store', '.localized/**', '.TagStudio', 'System Volume Information/**', '**/.DS_Store', '**/.TagStudio/**', '**/desktop.ini', '*.json/**', 'System Volume Information', '**/*.aae', '.Trash-*', '**/._*/**', '*.xmp/**', '.DS_Store/**', '**/*.aae/**', '**/System Volume Information', '**/$RECYCLE.BIN', '$RECYCLE.BIN', '**/.Trash/**', '**/.Trash', '.Spotlight-V100', '**/*.xmp', '**/*.json/**', '.fseventsd/**', '**/._*', '**/*.json', '**/.Trash-*/**', '.Spotlight-V100/**', '**/.fseventsd/**']
2025-10-04 15:36:02 [info ] [Ignore] No updates to the .ts_ignore detected last_mtime=1757367052.0 library=PosixPath('/home/guga/Documents/2ndBrainMedia') new_mtime=1757367052.0
2025-10-04 15:36:02 [warning ] [PanelModal] add_callback not implemented for IgnoreModal
2025-10-04 15:36:02 [info ] [Refresh: Using ripgrep for scanning]
2025-10-04 15:36:02 [info ] [Ignore] No updates to the .ts_ignore detected last_mtime=1757367052.0 library=PosixPath('/home/guga/Documents/2ndBrainMedia') new_mtime=1757367052.0
2025-10-04 15:36:02 [info ] searching library filter=BrowsingState(page_index=0, sorting_mode=<SortingModeEnum.DATE_ADDED: 'file.date_added'>, ascending=False, random_seed=0, query=None) query_full='SELECT DISTINCT entries.id, count(*) OVER () AS anon_1 \nFROM entries ORDER BY entries.id DESC\n LIMIT 100 OFFSET 0'
2025-10-04 15:36:02 [info ] SQL Execution finished (0 seconds)
2025-10-04 15:36:02 [info ] items to render count=3
2025-10-04 15:36:02 [info ] [QtDriver] Loading Entries...
2025-10-04 15:36:02 [info ] [QtDriver] Building Filenames...
2025-10-04 15:36:02 [info ] [QtDriver] Done! Processing ItemThumbs...
2025-10-04 15:36:02 [info ] [Refresh]: Directory scan time duration=0.01398468017578125 files_scanned=3 path=PosixPath('/home/guga/Documents/2ndBrainMedia') tool_used='ripgrep (system)'
2025-10-04 15:36:04 [info ] [Ignore] No updates to the .ts_ignore detected last_mtime=1757367052.0 library=PosixPath('/home/guga/Documents/2ndBrainMedia') new_mtime=1757367052.0
2025-10-04 15:36:04 [info ] [Refresh: Using ripgrep for scanning]
2025-10-04 15:36:04 [info ] [Refresh]: Directory scan time duration=7.343292236328125e-05 files_scanned=3 path=PosixPath('/home/guga/Documents/2ndBrainMedia') tool_used='ripgrep (system)'
Segmentation fault (core dumped)
[ble: exit 139]