README
¶
Stash
Stash is a self-hosted webapp written in Go which organizes and serves your porn.
- 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 read the in-app manual.
Installing Stash
Windows Users:
As of version 0.27.0, Stash doesn't support anymore Windows 7, 8, Server 2008 and Server 2012.
Windows 10 or Server 2016 are at least required.
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 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 download a copy for you. 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 project 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
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 into your language, you can make an account at Codeberg's Weblate to get started contributing new languages or improving existing ones. Thanks!
Support (FAQ)
Check out our documentation on Stash-Docs for information about the software, questions, guides, add-ons and more.
For more help you can:
- Check the in-app documentation, in the top right corner of the app (it's also mirrored on Stash-Docs)
- Join the Matrix space
- Join the Discord server, where the community can offer support.
- Start a discussion on GitHub
Customization
Themes and CSS Customization
There is a directory of community-created themes on Stash-Docs.
You can also change the Stash interface to fit your desired style with various snippets from Custom CSS snippets.
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.
Directories
¶
Path | Synopsis |
---|---|
cmd
|
|
phasher
TODO: document in README.md
|
TODO: document in README.md |
internal
|
|
Package pkg provides interfaces to interact with the package system used for plugins and scrapers.
|
Package pkg provides interfaces to interact with the package system used for plugins and scrapers. |
exec
Package exec provides functions that wrap os/exec functions.
|
Package exec provides functions that wrap os/exec functions. |
ffmpeg
Package ffmpeg provides a wrapper around the ffmpeg and ffprobe executables.
|
Package ffmpeg provides a wrapper around the ffmpeg and ffprobe executables. |
file
Package file provides functionality for managing, scanning and cleaning files and folders.
|
Package file provides functionality for managing, scanning and cleaning files and folders. |
fsutil
Package fsutil provides filesystem utility functions for the application.
|
Package fsutil provides filesystem utility functions for the application. |
gallery
Package gallery provides application logic for managing galleries.
|
Package gallery provides application logic for managing galleries. |
group
Package group provides the application logic for groups.
|
Package group provides the application logic for groups. |
hash
Package hash provides utility functions for generating hashes from strings and random keys.
|
Package hash provides utility functions for generating hashes from strings and random keys. |
hash/md5
Package md5 provides utility functions for generating MD5 hashes.
|
Package md5 provides utility functions for generating MD5 hashes. |
hash/oshash
Package oshash implements the algorithm that OpenSubtitles.org uses to generate unique hashes.
|
Package oshash implements the algorithm that OpenSubtitles.org uses to generate unique hashes. |
image
Package image provides the application logic for images.
|
Package image provides the application logic for images. |
javascript
Package javascript provides the javascript runtime for the application.
|
Package javascript provides the javascript runtime for the application. |
job
Package job provides the job execution and management functionality for the application.
|
Package job provides the job execution and management functionality for the application. |
logger
Package logger provides methods and interfaces used by other stash packages for logging purposes.
|
Package logger provides methods and interfaces used by other stash packages for logging purposes. |
match
Package match provides functions for matching paths to models.
|
Package match provides functions for matching paths to models. |
models
Package models provides application models that are used throughout the application.
|
Package models provides application models that are used throughout the application. |
models/json
Package json provides generic JSON types.
|
Package json provides generic JSON types. |
models/jsonschema
Package jsonschema provides the JSON schema models used for importing and exporting data.
|
Package jsonschema provides the JSON schema models used for importing and exporting data. |
models/mocks
Package mocks provides mocks for various interfaces in models.
|
Package mocks provides mocks for various interfaces in models. |
models/paths
Package paths provides functions to return paths to various resources.
|
Package paths provides functions to return paths to various resources. |
performer
Package performer provides the application logic for performer functionality.
|
Package performer provides the application logic for performer functionality. |
plugin
Package plugin implements functions and types for maintaining and running stash plugins.
|
Package plugin implements functions and types for maintaining and running stash plugins. |
plugin/common
Package common encapulates data structures and functions that will be used by plugin executables and the plugin subsystem in the stash server.
|
Package common encapulates data structures and functions that will be used by plugin executables and the plugin subsystem in the stash server. |
plugin/common/log
Package log provides a number of logging utility functions for encoding and decoding log messages between a stash server and a plugin instance.
|
Package log provides a number of logging utility functions for encoding and decoding log messages between a stash server and a plugin instance. |
plugin/util
Package util implements utility and convenience methods for plugins.
|
Package util implements utility and convenience methods for plugins. |
python
Package python provides utilities for working with the python executable.
|
Package python provides utilities for working with the python executable. |
scene
Package scene provides the application logic for scene functionality.
|
Package scene provides the application logic for scene functionality. |
scene/generate
Package generate provides functions to generate media assets from scenes.
|
Package generate provides functions to generate media assets from scenes. |
scraper
Package scraper provides interfaces to interact with the scraper subsystem.
|
Package scraper provides interfaces to interact with the scraper subsystem. |
scraper/stashbox
Package stashbox provides a client interface to a stash-box server instance.
|
Package stashbox provides a client interface to a stash-box server instance. |
session
Package session provides session authentication and management for the application.
|
Package session provides session authentication and management for the application. |
sliceutil
Package sliceutil provides utilities for working with slices.
|
Package sliceutil provides utilities for working with slices. |
sqlite
Package sqlite provides interfaces to interact with the sqlite database.
|
Package sqlite provides interfaces to interact with the sqlite database. |
studio
Package studio provides the application logic for studio functionality.
|
Package studio provides the application logic for studio functionality. |
tag
Package tag provides application logic for tag objects.
|
Package tag provides application logic for tag objects. |
txn
Package txn provides functions for running transactions.
|
Package txn provides functions for running transactions. |
utils
Package utils provides various utility functions for the application.
|
Package utils provides various utility functions for the application. |