MCPcopy Index your code
hub / github.com/stashapp/stash

github.com/stashapp/stash @v0.31.1 sqlite

repository ↗ · DeepWiki ↗ · release v0.31.1 ↗
12,711 symbols 44,731 edges 1,250 files 1,731 documented · 14%
README

Stash

Build Docker pulls GitHub Sponsors Open Collective backers Go Report Card Discord GitHub release (latest by date) GitHub issues by-label

Stash is a self-hosted webapp written in Go which organizes and serves your diverse content collection, catering to both your SFW and NSFW needs.

Screenshot of Stash web application interface

  • Stash gathers information about videos in your collection from the internet, and is extensible through the use of community-built plugins for a large number of content producers and sites.
  • Stash supports a wide variety of both video and image formats.
  • You can tag videos and find them later.
  • Stash provides statistics about performers, tags, studios and more.

You can watch a SFW demo video to see it in action.

For further information you can consult the documentation or access the in-app manual from within the application (also available at docs.stashapp.cc/in-app-manual).

Installing Stash

[!tip] Step-by-step instructions are available at docs.stashapp.cc/installation.

[!important] Windows Users

As of version 0.27.0, Stash no longer supports Windows 7, 8, Server 2008 and Server 2012.
At least Windows 10 or Server 2016 is required.

macOS Users

As of version 0.29.0, Stash requires macOS 11 Big Sur or later.
Stash can still be run through docker on older versions of macOS.

Windows macOS Linux Docker
Latest Release

Development Preview | Latest Release

Development Preview | Latest Release (amd64)

Development Preview (amd64)

More Architectures... | Instructions

Sample docker-compose.yml

Download links for other platforms and architectures are available on the Releases page.

First Run

Windows/macOS Users: Security Prompt

On Windows or macOS, running the app might present a security prompt since the application binary isn't yet signed.

  • On Windows, bypass this by clicking "more info" and then the "run anyway" button.
  • On macOS, Control+Click the app, click "Open", and then "Open" again.

ffmpeg

Stash requires FFmpeg. If you don't have it installed, Stash will prompt you to download a copy during setup. It is recommended that Linux users install ffmpeg from their distro's package manager.

Usage

Quickstart Guide

Stash is a web-based application. Once the application is running, the interface is available (by default) from http://localhost:9999.

On first run, Stash will prompt you for some configuration options and media directories to index, called "Scanning" in Stash. After scanning, your media will be available for browsing, curating, editing, and tagging.

Stash can pull metadata (performers, tags, descriptions, studios, and more) directly from many sites through the use of scrapers, which integrate directly into Stash. Identifying an entire collection will typically require a mix of multiple sources: - The stashapp team maintains StashDB, a crowd-sourced repository of scene, studio, and performer information. Connecting it to Stash will allow you to automatically identify much of a typical media collection. It runs on our stash-box software and is primarily focused on mainstream digital scenes and studios. Instructions, invite codes, and more can be found in this guide to Accessing StashDB. - Several community-managed stash-box databases can also be connected to Stash in a similar manner. Each one serves a slightly different niche and follows their own methodology. A rundown of each stash-box, their differences, and the information you need to sign up can be found in this guide to Accessing Stash-Boxes. - Many community-maintained scrapers can also be downloaded, installed, and updated from within Stash, allowing you to pull data from a wide range of other websites and databases. They can be found by navigating to Settings → Metadata Providers → Available Scrapers → Community (stable). These can be trickier to use than a stash-box because every scraper works a little differently. For more information, please visit the CommunityScrapers repository. - All of the above methods of scraping data into Stash are also covered in more detail in our Guide to Scraping.

StashDB is the canonical instance of our open source metadata API, stash-box.

Translation

Translate

Stash is available in 32 languages (so far!) and it could be in your language too. We use Weblate to coordinate community translations. If you want to help us translate Stash, you can make an account at Codeberg's Weblate to contribute to new or existing languages. Thanks!

The badge below shows the current translation status of Stash across all supported languages:

Translation status

Support & Resources

Need help or want to get involved? Start with the documentation, then reach out to the community if you need further assistance.

Documentation

Community & discussion

Community scrapers & plugins

For Developers

Pull requests are welcome!

See Development and Contributing for information on working with the codebase, getting a local development setup, and contributing changes.

Extension points exported contracts — how you extend this code

JobExec (Interface)
JobExec represents the implementation of a Job to be executed. [16 implementers]
pkg/job/job.go
Handler (Interface)
Handler provides a handler for Files. [7 implementers]
pkg/file/handler.go
SceneQueryer (Interface)
SceneQueryer provides methods to query scenes. [14 implementers]
pkg/models/repository_scene.go
ScrapedContent (Interface)
Scraped Content is the forming union over the different scrapers [8 implementers]
pkg/scraper/scraper.go
ImageAliasStashIDGetter (Interface)
(no doc) [9 implementers]
pkg/performer/export.go
ScanGenerator (Interface)
(no doc) [6 implementers]
pkg/scene/scan.go
GroupNamesFinder (Interface)
(no doc) [7 implementers]
pkg/match/scraped.go
Queryer (Interface)
(no doc) [21 implementers]
pkg/image/query.go

Core symbols most depended-on inside this repo

Errorf
called by 2137
pkg/logger/logger.go
Get
called by 1133
pkg/sqlite/tx.go
Error
called by 882
pkg/logger/logger.go
Col
called by 581
pkg/sqlite/sql.go
Equal
called by 550
pkg/models/model_joins.go
New
called by 407
pkg/sqlite/repository.go
List
called by 341
pkg/pkg/repository.go
Errorf
called by 322
pkg/logger/logger.go

Shape

Method 5,403
Function 4,906
Struct 1,094
Interface 944
Class 210
TypeAlias 127
FuncType 17
Enum 10

Languages

Go69%
TypeScript31%
Python1%

Modules by API surface

pkg/stashbox/graphql/generated_models.go374 symbols
ui/v2.5/src/core/StashService.ts243 symbols
internal/manager/config/config.go196 symbols
pkg/stashbox/graphql/generated_client.go180 symbols
ui/v2.5/src/models/list-filter/criteria/criterion.ts159 symbols
pkg/sqlite/setup_test.go130 symbols
pkg/sqlite/scene_test.go101 symbols
pkg/sqlite/table.go87 symbols
pkg/models/relationships.go87 symbols
pkg/models/repository_scene.go73 symbols
pkg/sqlite/scene.go71 symbols
pkg/models/mocks/SceneReaderWriter.go70 symbols

Dependencies from manifests, versioned

github.com/WithoutPants/sortorderv0.0.0-2023061600302 · 1×
github.com/Yamashou/gqlgencv0.32.1 · 1×
github.com/agnivade/levenshteinv1.2.1 · 1×
github.com/anacrolix/dmsv1.2.2 · 1×
github.com/antchfx/htmlqueryv1.3.5 · 1×
github.com/antchfx/xpathv1.3.5 · 1×
github.com/asticode/go-astikitv0.20.0 · 1×
github.com/asticode/go-astisubv0.25.1 · 1×
github.com/asticode/go-astitsv1.8.0 · 1×
github.com/chromedp/cdprotov0.0.0-2025080321073 · 1×

For agents

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

⬇ download graph artifact