MCPcopy
hub / github.com/TagStudioDev/TagStudio

github.com/TagStudioDev/TagStudio @v9.6.0 sqlite

repository ↗ · DeepWiki ↗ · release v9.6.0 ↗
1,443 symbols 6,470 edges 153 files 422 documented · 29%
README

TagStudio: A User-Focused Photo & File Management System

Downloads Translations PyTest MyPy Ruff

TagStudio is a photo & file organization application with an underlying tag-based system that focuses on giving freedom and flexibility to the user. No proprietary programs or formats, no sea of sidecar files, and no complete upheaval of your filesystem structure. Read the documentation and more at docs.tagstud.io!

TagStudio Screenshot

TagStudio Alpha v9.5.5 running on macOS Sequoia.

Contents

Translation hosting generously provided by Weblate. Check out our project page to help translate TagStudio!

Feature Highlights

Libraries

A TagStudio library contains all of your tags, fields for a set of files based on one of your system directories. Similar to how Obsidian vaults function, TagStudio libraries act as a layer on top of your existing folders and file structure, and don't require your to move or duplicate files.

TagStudio places a .TagStudio folder in the folder you open as a library. Files included in your library are referred to as "entries", and are kept track of inside of a SQLite database inside the .TagStudio folder along with tags and other library data.

File Entries

All file types are supported in TagStudio libraries, just not all have dedicated preview support. For a full list of filetypes with supported previews, see the "Supported Previews" page on the documentation site. There's also playback support for videos, audio files, and supported animated image formats.

For a generalized list of what's currently supported:

  • Images
    • Raster Images (JPEG, PNG, etc.)
    • Vector (SVG)
    • Animated (GIF, WEBP, APNG)
    • RAW Formats
  • Videos
  • Plaintext Files
  • Documents (If supported)
  • eBooks (If supported)
  • Photoshop PSDs, Blender Projects, Krita Projects, and more!

Tags and Fields

Tags represent an object or attribute - this could be a person, place, object, concept, and more. Unlike most tagging systems, TagStudio tags are not solely represented by a line of text or a hashtag. Tags in TagStudio consist of several properties and relationships that give extra customization, searching power, and ease of tagging that cannot be achieved by string-based tags alone. TagStudio tags are designed to be as simple or as complex as you'd like, giving options to users of all skill levels and use cases.

Tags currently consist of the following attributes:

  • Name: The full name for your tag. This does NOT have to be unique!
  • Shorthand Name: The shortest alternate name for your tag, used for abbreviations.
  • Aliases: Alternate names your tag goes by.
  • Color: The display color of your tag.
  • Parent Tags: Other tags in which this tag inherits from. In practice, this means that this tag can be substituted in searches for any listed parent tags.
    • Parent tags checked with the "disambiguation" checkbox next to them will be used to help disambiguate tag names that may not be unique.
    • For example: If you had a tag for "Freddy Fazbear", you might add "Five Nights at Freddy's" as one of the parent tags. If the disambiguation box is checked next to "Five Nights at Freddy's" parent tag, then the tag "Freddy Fazbear" will display as "Freddy Fazbear (Five Nights at Freddy's)". Furthermore, if the "Five Nights at Freddy's" tag has a shorthand like "FNAF", then the "Freddy Fazbear" tag will display as "Freddy Fazbear (FNAF)".
  • Is Category: A property that when checked, treats this tag as a category in the preview panel.

Fields, like tags, are additional pieces of custom metadata that you can add to your file entries. Fields currently have several hardcoded names (e.g. "Title", "Author", "Series") but custom field names are planned for an upcoming update.

Field types currently include:

  • Text Lines: Single lines of text.
  • Text Boxes: Multi-line pieces of text.
  • Datetimes: Dates and times.

Search

  • Search for file entries based on tags, file path (path:), file types (filetype:), and even media types! (mediatype:). Path searches currently use glob syntax, so you may need to wrap your filename or filepath in asterisks while searching. This will not be strictly necessary in future versions of the program.
  • Use and combine boolean operators (AND, OR, NOT) along with parentheses groups, quotation escaping, and underscore substitution to create detailed search queries
  • Use special search conditions (special:untagged and special:empty) to find file entries without tags or fields, respectively

Basic Usage

[!TIP] For more usage instructions, see the documentation site!

Creating/Opening a Library

With TagStudio opened, start by creating a new library or opening an existing one using File -> Open/Create Library from the menu bar. TagStudio will automatically create a new library from the chosen directory if one does not already exist. Upon creating a new library, TagStudio will automatically scan your folders for files and add those to your library (no files are moved during this process!).

Refreshing the Library

Libraries under 10,000 files automatically scan for new or modified files when opened. In order to refresh the library manually, select "Refresh Directories" under the File menu or by pressing Ctrl+R (macOS: ⌘ Command+R).

Creating Tags

Create a new tag by accessing the "New Tag" option from the Edit menu or by pressing Ctrl+T (macOS: ⌘ Command+T). In the tag creation panel, enter a tag name, optional shorthand name, optional tag aliases, optional parent tags, and an optional color.

Tag Manager

You can manage your library of tags from opening the "Tag Manager" panel from Edit -> "Tag Manager" or by pressing Ctrl+M (macOS: ⌘ Command+M). From here you can create, search for, edit, and permanently delete any tags you've created in your library.

Editing Tags

To edit a tag, click on it inside the preview panel or right-click the tag and select "Edit Tag" from the context menu.

Adding Tags to File Entries

Access the "Add Tag" search box by either clicking on the "Add Tag" button at the bottom of the right sidebar, accessing the "Add Tags to Selected" option from the File menu, or by pressing Ctrl+Shift+T (macOS: ⌘ Command+Shift+T).

From here you can search for existing tags or create a new one if the one you're looking for doesn't exist. Click the "+" button next to any tags you want to the currently selected file entries. To quickly add the top result, press the Enter/Return key to add the top-most tag and reset the tag search. Press Enter/Return once more to close the dialog box. By using this method, you can quickly add various tags in quick succession just by using the keyboard!

To remove a tag from a file entry, hover over the tag in the preview panel and click on the "-" icon that appears.

Adding Fields to File Entries

To add a metadata field to a file entry, start by clicking the "Add Field" button at the bottom of the preview panel. From the dropdown menu, select the type of metadata field you’d like to add to the entry

Editing Fields

Hover over the field and click the pencil icon. From there, add or edit text in the dialog box popup.

Relinking Moved Files

Inevitably some of the files inside your library will be renamed, moved, or deleted. If a file has been renamed or moved, TagStudio will display the thumbnail as a red broken chain link. To relink moved files or delete these entries, select the "Manage Unlinked Entries" option under the Tools menu. Click the "Refresh" button to scan your library for unlinked entries. Once complete, you can attempt to "Search & Relink" any unlinked file entries to their respective files, or "Delete Unlinked Entries" in the event the original files have been deleted and you no longer wish to keep their entries inside your library.

[!WARNING] There is currently no method to relink entries to files that have been renamed - only moved or deleted. This is a high priority for future releases.

[!WARNING] If multiple matches for a moved file are found (matches are currently defined as files with a matching filename as the original), TagStudio will currently ignore the match groups. Adding a GUI for manual selection, as well as smarter automated relinking, are high priorities for future versions.

See instructions in the "Creating Development Environment" section from the contributing page.

Installation

To download executable builds of TagStudio, visit the Releases page of the GitHub repository and download the latest release for your system under the "Assets" section at the bottom of the release.

TagStudio has builds for Windows, macOS (Apple Silicon & Intel), and Linux. We also offer portable releases for Windows and Linux which are self-contained and easier to move around.

For detailed instructions, installation help, and instructions for developing for TagStudio, please see the "Installation" page on our documentation website.

[!IMPORTANT] If you're interested in contributing to TagStudio, please take a look at the contribution guidelines for how to get started!

Third-Party Dependencies

For video thumbnails and playback, you'll also need FFmpeg installed on your system. If you encounter any issues with this, please reference our FFmpeg Help guide. For faster library scanning and refreshing, it's also recommended you install ripgrep.

[!CAUTION] We do not currently publish TagStudio to any package managers. Any TagStudio distributions outside of the GitHub Releases page are unofficial and not maintained by us.

Installation support will not be given to users installing from unofficial sources. Use these versions at your own risk!

Goals & Priorities

TagStudio aims to create an open and robust format for file tagging that isn't burdened by the limitations of traditional tagging and file metadata systems. TagStudio is the first proof-of-concept implementation of this system.

See the Roadmap on the documentation site for a complete list of planned features and estimated timeline.

Overall Goals

  • To achieve a portable, private, extensible, open-format, and feature-rich system of organizing and rediscovering files.
  • To provide powerful methods for organization, notably the concept of tag inheritance, or "taggable tags" (and in the near future, the combination of composition-based tags).
  • To create an implementation of such a system that is resilient against a user’s actions outside the program (modifying, moving, or renaming files) while also not burdening the user with mandatory sidecar files or requiring them to change their existing file structures and workflows.
  • To support a wide range of users spanning across different platforms, multi-user setups, and those with large (several terabyte) libraries.

Project Priorities

  1. The concept. Even if TagStudio as an application fails, I’d hope that the idea lives on in a superior project. The goals outlined above don’t reference TagStudio once - TagStudio is what references the goals.
  2. The system. Frontends and implementations can vary, as they should. The core underlying metadata management system is what should be interoperable between different frontends, programs, and operating systems. A standard implementation for this should settle as development continues. This opens up the doors for improved and varied clients, integration with third-party applications, and more.
  3. The application. If nothing else, TagStudio the application serves as the first (and so far only) implementation for this syst

Core symbols most depended-on inside this repo

append
called by 154
src/tagstudio/qt/previews/vendored/pydub/audio_segment.py
unwrap
called by 136
src/tagstudio/core/utils/types.py
get
called by 85
src/tagstudio/qt/resource_manager.py
format
called by 56
src/tagstudio/qt/translations.py
read
called by 50
src/tagstudio/qt/previews/renderer.py
itemAt
called by 41
src/tagstudio/qt/views/layouts/flow_layout.py
close
called by 38
src/tagstudio/core/library/alchemy/library.py
get_field_attr
called by 37
src/tagstudio/core/library/json/library.py

Shape

Method 1,067
Function 200
Class 174
Route 2

Languages

Python100%

Modules by API surface

src/tagstudio/qt/ts_qt.py87 symbols
src/tagstudio/core/library/alchemy/library.py82 symbols
src/tagstudio/core/library/json/library.py81 symbols
src/tagstudio/qt/previews/vendored/pydub/audio_segment.py66 symbols
src/tagstudio/qt/previews/renderer.py57 symbols
tests/test_library.py32 symbols
src/tagstudio/qt/mixed/media_player.py30 symbols
src/tagstudio/qt/mixed/migration_modal.py28 symbols
src/tagstudio/qt/controllers/search_panel_controller.py28 symbols
src/tagstudio/core/library/alchemy/models.py28 symbols
src/tagstudio/qt/mixed/item_thumb.py25 symbols
src/tagstudio/qt/views/main_window.py24 symbols

Dependencies from manifests, versioned

SQLAlchemy2.0 · 1×
Send2Trash1.8 · 1×
chardet5.2 · 1×
ffmpeg-python0.2 · 1×
mutagen1.47 · 1×
numpy2.2 · 1×
opencv_python4.11 · 1×
pillow-heif0.22 · 1×
pillow-jxl-plugin1.3 · 1×
py7zr1.1.3 · 1×
pydantic2.10 · 1×
pydub0.25 · 1×

For agents

$ claude mcp add TagStudio \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact