├── .github ├── ISSUE_TEMPLATE │ └── add-new-add-on.yml └── workflows │ └── mkdocs-ci.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── builder ├── build.ts ├── plugin.ts ├── repositories │ ├── example.yml │ ├── plugins │ │ ├── 7djx1qp-stash-plugins.yml │ │ ├── MinasukiHikimuna-MidnightRider-Stash.yml │ │ ├── S3L3CT3DLoves-stashPlugins.yml │ │ ├── Valkyr-JS-stash-plugins.yml │ │ ├── blackstar3000-stash-plugins.yml │ │ ├── carrotwaxr-stash-plugins.yml │ │ ├── ceequester-CommunityScripts.yml │ │ ├── coderduo-stash-plugins.yml │ │ ├── crudecreations-set-image-pornpics.yml │ │ ├── d0t-d0t-d0t-stash-repo-plugins.yml │ │ ├── f4bio-stash-plugins.yml │ │ ├── feederbox826-plugins.yml │ │ ├── feederbox826-stashlist.yml │ │ ├── jsmthy-stash-plugins.yml │ │ ├── lurking987-stash-plugins.yml │ │ ├── rosa-umineko-CommunityScripts-plugins.yml │ │ ├── serechops-Serechops-Stash-plugins.yml │ │ ├── sneakyninja256-stash-plugins.yml │ │ ├── spaceyuck-stash-plugins.yml │ │ ├── stash-of-awesomeness-stash-plugins.yml │ │ ├── stashapp-CommunityScripts-plugins.yml │ │ ├── stg-annon-StashScripts.yml │ │ ├── tetrax-10-stash-stuffs-plugins.yml │ │ ├── voidimproper-stash-plugins.yml │ │ ├── w0lfiew0lf-StashApp-Tools-plugins.yml │ │ ├── withoutpants-stash-plugin-prototypes.yml │ │ └── xiosensei-Xio-Stash-plugins.yml │ └── themes │ │ ├── feederbox826-themes.yml │ │ ├── rosa-umineko-CommunityScripts-themes.yml │ │ ├── serechops-stash-glassy.yml │ │ ├── stashapp-CommunityScripts-themes.yml │ │ ├── tetrax-10-stash-stuffs-themes.yml │ │ └── uncertainmongoose-dracula-for-stash.yml ├── types.ts └── utils.ts ├── docs ├── CNAME ├── add-ons.md ├── api.md ├── assets │ ├── add-ons │ │ ├── FilenamePerformersToCSV.png │ │ ├── GHScraper_Checker.png │ │ ├── OnlyFans_Scraper.png │ │ ├── OnlyFans_Scraper2.png │ │ ├── Performer_Card_Details.png │ │ ├── Stash-App-Script-Alphabet-Selector-1.png │ │ ├── Stash-App-Script-Alphabet-Selector-2.png │ │ ├── Stash-App-Script-Video-JS-CopySave-1.png │ │ ├── Stash-App-Theme-Switch-Plugin-1.png │ │ ├── Stash-App-Theme-Switch-Plugin-2.png │ │ ├── Stash-App-Userscript-Tagger-View-Div-Remover-1.png │ │ ├── Stash-Userscript-Upscaler-1.png │ │ ├── Stash-Userscript-Upscaler-2.png │ │ ├── Stash-Userscript-Upscaler-3.png │ │ ├── StashAppAndroidTV-1.png │ │ ├── StashAppAndroidTV-2.png │ │ ├── StashAppAndroidTV-3.png │ │ ├── StashDB_Backlog_Userscript.png │ │ ├── StashDB_Backlog_Userscript2.png │ │ ├── StashDB_Backlog_Userscript3.png │ │ ├── StashDB_ID_Copy_Buttons.png │ │ ├── StashDB_Images_Userscript.png │ │ ├── StashDB_Submission_Helper.png │ │ ├── StashTagSkins_Hamster.png │ │ ├── StashTagSkins_Icons.png │ │ ├── StashTagSkins_Sample.png │ │ ├── Stash_Batch_Query_Edit.png │ │ ├── Stash_Batch_Query_Edit2.png │ │ ├── Stash_Batch_Result_Toggle.png │ │ ├── Stash_Batch_Result_Toggle2.png │ │ ├── Stash_Batch_Save.png │ │ ├── Stash_Batch_Search.png │ │ ├── Stash_Checker.png │ │ ├── Stash_Markdown.png │ │ ├── Stash_New_Performer_Filter_Button.png │ │ ├── Stash_Open_Media_Player.png │ │ ├── Stash_Performer_Audit_Task_Button.png │ │ ├── Stash_Performer_Audit_Task_Button2.png │ │ ├── Stash_Performer_Audit_Task_Button3.png │ │ ├── Stash_Performer_Image_Cropper.png │ │ ├── Stash_Performer_Markers_Tab.png │ │ ├── Stash_Performer_Tagger_Additions.png │ │ ├── Stash_Performer_URL_Searchbox.png │ │ ├── Stash_Scene_Tagger_Additions.png │ │ ├── Stash_Scene_Tagger_Additions2.png │ │ ├── Stash_Scene_Tagger_Colorizer.png │ │ ├── Stash_Scene_Tagger_Colorizer2.png │ │ ├── Stash_Scene_Tagger_Draft_Submit.png │ │ ├── Stash_Scene_Tagger_Linkify.png │ │ ├── Stash_Scene_Tagger_Linkify2.png │ │ ├── Stash_Set_Stashbox_Favorite_Performers.png │ │ ├── Stash_Set_Stashbox_Favorite_Performers2.png │ │ ├── Stash_Set_Stashbox_Favorite_Performers3.png │ │ ├── Stash_StashID_Icon.png │ │ ├── Stash_StashID_Icon2.png │ │ ├── Stash_StashID_Icon3.png │ │ ├── Stash_StashID_Input.png │ │ ├── Stash_StashID_Input2.png │ │ ├── Stash_Stats.png │ │ ├── Stash_Studio_Image_And_Parent_On_Create.png │ │ ├── Stash_Tag_Image_Cropper.png │ │ ├── Stash_helper-1.png │ │ ├── Visage.png │ │ ├── blurryCardBackground.png │ │ ├── fixed_table_width.png │ │ ├── pwPlayer_js_Scene_Card_Quick_Player.png │ │ ├── renamerOnUpdate.png │ │ ├── stash-qmt-1.png │ │ ├── stash-qmt-2.png │ │ └── stash_tag.png │ ├── beginner-guides │ │ ├── create-tpdb-token.jpg │ │ ├── find-scene-tagger.jpg │ │ ├── find-stashid.jpg │ │ ├── gen-phashes-manually.jpg │ │ ├── gen-phashes-on-scan.jpg │ │ ├── regexui.png │ │ ├── scrape-all-and-search.jpg │ │ ├── scrapers-folder-location.jpg │ │ ├── tagger-source-tpdb.png │ │ ├── tpdb-scene-scraper-entry.jpg │ │ ├── unraid-docker-stash-Extra-Parameters-1.jpg │ │ ├── unraid-docker-stash-Extra-Parameters-2.jpg │ │ ├── unraid-docker-stash-Repository-1.jpg │ │ ├── unraid-docker-stash-Repository-2.jpg │ │ ├── unraid-docker-stash-page-advanced-view.jpg │ │ ├── unraid-docker-stash-page.jpg │ │ ├── unraid-gpuid.jpg │ │ ├── unraid-stash-Add-another-Variable-1.jpg │ │ ├── unraid-stash-Add-another-Variable-2.jpg │ │ ├── unraid-stash-Add-another-Variable-3.jpg │ │ ├── unraid-stash-Add-another-Variable-4.jpg │ │ └── unraid-stash-Add-another-Variable-5.jpg │ ├── guides │ │ └── run-cdp-on-truenas-scale │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ └── 5.png │ ├── images │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── logo_white.svg │ ├── plugins │ │ ├── StashMergers │ │ │ ├── 1.JPG │ │ │ ├── 2.JPG │ │ │ ├── 3.JPG │ │ │ ├── 4.JPG │ │ │ ├── 5.JPG │ │ │ └── 6.JPG │ │ ├── ValkyrSceneCards │ │ │ ├── 1.jpg │ │ │ └── 2.jpg │ │ ├── cjCardTweaks │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ └── 3.png │ │ ├── filemonitor │ │ │ └── 1.png │ │ ├── renamerOnUpdate │ │ │ └── 1.png │ │ └── themeSwitch │ │ │ ├── 1.png │ │ │ └── 2.png │ ├── stylesheets │ │ └── announce.css │ ├── themes │ │ └── Theme-Minimal │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ └── 4.png │ └── user-interface-ui │ │ ├── Black-Hole-preview.png │ │ ├── Border-around-cards.png │ │ ├── Light-Pulsar-preview.jpg │ │ ├── Modern-Dark-preview.jpg │ │ ├── Neon-Dark-preview.jpg │ │ ├── Night-preview.png │ │ ├── Plex-preview.png │ │ ├── Pulsar-preview.jpg │ │ ├── blur2.png │ │ ├── css-scrubber.png │ │ ├── fixed_table_width.png │ │ ├── hide_0_count_badges.png │ │ ├── more_studio_item_after.jpg │ │ ├── more_studio_item_before.jpg │ │ ├── more_tag_after_1.jpg │ │ ├── more_tag_after_2.jpg │ │ ├── more_tag_before.jpg │ │ ├── more_tag_subtag.jpg │ │ ├── navigation-after.png │ │ ├── navigation-before.png │ │ ├── studios_layout.png │ │ ├── tags_layout.png │ │ └── themes │ │ ├── light-pulsar-1.jpg │ │ ├── light-pulsar-2.jpg │ │ ├── light-pulsar-3.jpg │ │ ├── mobile-layout-overhaul-1.png │ │ ├── modern-dark-1.jpg │ │ ├── neon-dark-1.jpg │ │ ├── neon-dark-1.png │ │ ├── neon-dark-2.png │ │ ├── neon-dark-3.png │ │ ├── neon-dark-4.png │ │ ├── neon-dark-5.png │ │ ├── neon-dark-6.png │ │ ├── night-1.png │ │ ├── plex-1.png │ │ ├── plex-background.png │ │ ├── plex-logo.png │ │ ├── plex-noise.png │ │ ├── pulsar-1.jpg │ │ ├── pulsar-2.jpg │ │ ├── pulsar-3.jpg │ │ ├── pulsar-4.jpg │ │ └── pulsar-5.jpg ├── beginner-guides │ ├── exclude-file-configuration.md │ └── guide-to-scraping.md ├── code-of-conduct.md ├── faq │ └── setup.md ├── getting-started │ └── first-steps.md ├── guides │ ├── advanced-configuration-options.md │ ├── backup-and-restore-database.md │ ├── importing-via-csv-using-gql-iterate.md │ ├── index.md │ ├── manually-editing-the-stash-sqlite3-database.md │ ├── reverse-proxy.md │ ├── run-cdp-on-truenas-scale.md │ ├── scraping-metadata-behind-login.md │ ├── scraping-scenes-via-stash-box.md │ └── troubleshooting-video-playback.md ├── in-app-manual │ ├── browsing.md │ ├── captions.md │ ├── configuration.md │ ├── contributing.md │ ├── deduplication.md │ ├── images.md │ ├── index.md │ ├── interactive.md │ ├── interface.md │ ├── introduction.md │ ├── keyboardshortcuts.md │ ├── plugins │ │ ├── embeddedplugins.md │ │ ├── externalplugins.md │ │ ├── index.md │ │ └── uipluginapi.md │ ├── scraping │ │ ├── index.md │ │ └── scraperdevelopment.md │ ├── tagger.md │ └── tasks │ │ ├── autotagging.md │ │ ├── identify.md │ │ ├── index.md │ │ ├── jsonspec.md │ │ └── scenefilenameparser.md ├── index.md ├── installation │ ├── docker.md │ ├── freenas-truenas.md │ ├── index.md │ ├── linux.md │ ├── macos.md │ ├── synology.md │ ├── unraid.md │ └── windows.md ├── integrations │ ├── index.md │ └── list.md ├── metadata-sources │ ├── index.md │ ├── list.md │ ├── scrapers.md │ └── stash-box-instances.md ├── networking │ └── authentication-required-when-accessing-stash-from-the-internet.md ├── plugins │ ├── index.md │ └── list.md ├── scripts │ ├── index.md │ └── list.md ├── stylesheets │ └── extra.css ├── themes │ ├── custom-css-snippets.md │ ├── index.md │ └── list.md ├── userscripts │ ├── index.md │ └── list.md └── utilities │ ├── index.md │ └── list.md ├── favicon.ico ├── includes └── abbreviations.md ├── mkdocs.yml ├── overrides └── main.html ├── package-lock.json ├── package.json └── tsconfig.json /.github/ISSUE_TEMPLATE/add-new-add-on.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Add new add-on 3 | description: Template for new add-ons 4 | labels: ["add-ons"] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thanks for taking the time to fill out this form! 10 | - type: dropdown 11 | id: type 12 | attributes: 13 | label: Type 14 | description: Add-on type? 15 | options: 16 | - Plugin 17 | - Script 18 | - Userscript 19 | - Utility 20 | - Third-party Integration 21 | validations: 22 | required: true 23 | - type: input 24 | id: aname 25 | attributes: 26 | label: Add-on name 27 | description: Provide the add-on name to use in the documentation 28 | validations: 29 | required: true 30 | - type: input 31 | id: alink 32 | attributes: 33 | label: Add-on link 34 | description: Provide the add-on link to use in the documentation 35 | validations: 36 | required: true 37 | - type: textarea 38 | id: adescription 39 | attributes: 40 | label: Add-on description 41 | description: Provide the add-on description to use in the documentation 42 | placeholder: A sentence or two about your add-on 43 | validations: 44 | required: true 45 | - type: input 46 | id: aauthor 47 | attributes: 48 | label: Author name 49 | description: Provide the author name to use in the documentation 50 | validations: 51 | required: true 52 | - type: input 53 | id: aauthor-link 54 | attributes: 55 | label: Author link 56 | description: Provide the author link to use in the documentation 57 | validations: 58 | required: false 59 | - type: textarea 60 | id: ascreenshot 61 | attributes: 62 | label: Add-on screenshots 63 | description: Provide the add-on screenshots to use in the documentation 64 | validations: 65 | required: false 66 | --- -------------------------------------------------------------------------------- /.github/workflows/mkdocs-ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | on: 3 | push: 4 | branches: 5 | - main 6 | schedule: 7 | - cron: '0 0 * * *' 8 | workflow_dispatch: 9 | permissions: 10 | contents: write 11 | jobs: 12 | deploy: 13 | runs-on: ubuntu-latest 14 | env: 15 | BUILDER_GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 16 | steps: 17 | - uses: actions/checkout@v4 18 | with: 19 | fetch-depth: 0 20 | - name: Configure Git Credentials 21 | run: | 22 | git config user.name github-actions[bot] 23 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com 24 | - uses: actions/setup-python@v5 25 | with: 26 | python-version: 3.x 27 | - uses: actions/setup-node@v4 28 | - name: "Builder setup" 29 | run: | 30 | npm i 31 | npm i -g ts-node 32 | cd builder 33 | mkdir dist dist/plugins dist/themes 34 | ts-node build.ts 35 | cp dist/plugins/* ../docs/plugins/list.md 36 | cp dist/themes/* ../docs/themes/list.md 37 | - run: pip install \ 38 | mkdocs-material=="9.*" \ 39 | mkdocs-rss-plugin \ 40 | mkdocs-git-revision-date-localized-plugin \ 41 | mkdocs-git-committers-plugin-2 \ 42 | mkdocs-glightbox \ 43 | mkdocs-material[imaging] \ 44 | mkdocs-redirects 45 | - run: mkdocs gh-deploy --force 46 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore directories for local testing 2 | .vscode 3 | site 4 | .cache 5 | node_modules/ 6 | builder/dist/* -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Pull requests are welcome. If you are unfamilair with MkDocs/Material for MkDocs sctructure, look through [their documentation](https://squidfunk.github.io/mkdocs-material) for general idea for how it's structured and handy references. 4 | 5 | ## Contributing from the site via edit button 6 | 7 | 1. At the top of every page you will find an edit button 8 | 2. Cliking on it will open GitHub where you will be met with a message about not being able to edit directly. 9 | 3. Click `Fork this repository`. 10 | 4. You should see the text editor now. 11 | 5. Make the changes to the page you want and scroll to the bottom. 12 | 6. Add a short comment to explains your changes and click `Propose changes`. 13 | 7. Next page might look complicated, but all you need to do next is click `Create pull request`. 14 | 8. Here you can adjust the title and/or add extra comment and then click `Create pull request`. 15 | 9. That's it! 16 | 17 | ## Contributing directly from the repository 18 | 19 | 1. Go to the `docs` folder. 20 | 2. Open any .md file and click 🖉 (or `E` on your keyboard) to start editing. 21 | 3. Make the changes to the page you want and scroll to the bottom. 22 | 4. Add a short comment to explains your changes and click `Propose changes`. 23 | 5. Next page might look complicated, but all you need to do next is click `Create pull request`. 24 | 6. Here you can adjust the title and/or add extra comment and then click `Create pull request`. 25 | 7. That's it! 26 | 27 | ## Contributing from the forked repository 28 | 29 | 1. Click `Fork` button at the top right. 30 | 2. Click `Create fork`. 31 | 3. Go to the `docs` folder. 32 | 4. Open any .md file and click 🖉 (or `E` on your keyboard) to start editing. 33 | 5. Make the changes to the page you want and scroll to the bottom. 34 | 6. Add a short comment to explains your changes and select `Create a new branch for this commit and start a pull request.`. You can name the branch whatever you want or leave the default. 35 | 7. Click `Propose changes`. 36 | 8. Next page might look complicated, but all you need to do next is click `Create pull request`. 37 | 9. Here you can adjust the title and/or add extra comment and then click `Create pull request`. 38 | 10. That's it! -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stash-Docs 2 | Website: https://docs.stashapp.cc 3 | 4 | ## Join Our Community 5 | 6 | We are excited to announce that we have a new home for support, feature requests, and discussions related to Stash and its associated projects. Join our community on the [Discourse forum](https://discourse.stashapp.cc) to connect with other users, share your ideas, and get help from fellow enthusiasts. 7 | 8 | ## Contributing 9 | 10 | Everyone is welcome to help with the documentation. All changes are managed through pull requests. 11 | 12 | Read step-by-step guide on how to create a pull request [CONTRIBUTING.md](CONTRIBUTING.md). 13 | 14 | ## Running locally with pip 15 | 16 | ### Prerequisites 17 | 18 | - Python modules 19 | - `mkdocs-material=="9.*"` 20 | - `mkdocs-git-revision-date-localized-plugin` 21 | - `mkdocs-git-committers-plugin-2` 22 | - `mkdocs-glightbox` 23 | - `mkdocs-material[imaging]` 24 | - `mkdocs-redirects` 25 | - Install all with `pip install mkdocs-material=="9.*" mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-glightbox mkdocs-material[imaging] mkdocs-redirects` 26 | - Clone/download the repository 27 | 28 | ### Building the site 29 | 1. Open Terminal/Command Prompt and go to your directory where you saved the copy of the repository 30 | 2. Run `mkdocs serve` 31 | 32 | ## License 33 | 34 | The documentation site is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. 35 | -------------------------------------------------------------------------------- /builder/build.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import YAML from 'yaml' 3 | import * as fs from 'fs'; 4 | import * as path from 'path'; 5 | 6 | import { LocalCollection, LocalRepository, LocalSidecar, RemoteIndex, RemotePlugin } from './types' 7 | import { Plugin } from './plugin' 8 | import { infoLog, warnLog } from './utils' 9 | import { debuglog } from 'util'; 10 | 11 | // iterate over folder 12 | async function searchRepository(pathName: string = "plugins"): Promise { 13 | const repoPath = path.resolve(`./repositories/${pathName}`) 14 | const repoFiles = fs.readdirSync(repoPath) 15 | 16 | const repositories: LocalRepository[] = [] 17 | // find all files 18 | repoFiles.forEach(file => { 19 | if (file.endsWith(".yml")) { 20 | const fileData = fs.readFileSync(`${repoPath}/${file}`, 'utf8') 21 | const localRepo: LocalRepository = YAML.parse(fileData) 22 | // set name to filename if not defined 23 | if (!localRepo.name) localRepo.name = file.replace(".yml", "") 24 | repositories.push(localRepo) 25 | } 26 | }) 27 | // iterate over repositories 28 | const plugins: Plugin[] = [] 29 | for (const repo of repositories) { 30 | const plugin = await parseRepository(repo) 31 | plugins.push(...plugin) 32 | } 33 | // fetch all readmes of plugins 34 | const readmePromises = plugins.map(plugin => plugin.checkReadme()) 35 | await Promise.all(readmePromises) 36 | // sort plugins and print to md 37 | const sortedPlugins = plugins 38 | .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())) 39 | return sortedPlugins 40 | } 41 | 42 | function printPlugins(outputName: string, sortedPlugins: Plugin[]) { 43 | // create folder if not exists 44 | if (!fs.existsSync(`./dist`)) fs.mkdirSync(`./dist`, { recursive: true }) 45 | if (!fs.existsSync(`./dist/${outputName}`)) fs.mkdirSync(`./dist/${outputName}`, { recursive: true }) 46 | // print to file 47 | const outputPath = `./dist/${outputName}/list.md` 48 | const stream = fs.createWriteStream(outputPath) 49 | stream.write(`# Browse ${outputName} \n\n`) 50 | stream.write(getSourceIndexes(sortedPlugins)) 51 | stream.write(`## All ${outputName} \n\n`) 52 | // iterate over plugins 53 | for (const plugin of sortedPlugins) { 54 | stream.write(plugin.printMD()) 55 | stream.write("\n") 56 | } 57 | stream.end() 58 | } 59 | 60 | function getSourceIndexes(plugins: Plugin[]): string { 61 | const indexes = Array.from(new Set(plugins.map(plugin => plugin.index))).sort((a, b) => a.localeCompare(b)); 62 | return ` 63 | ## Sources 64 | 65 | ${indexes.map(index => `1. [${index}](${index})`).join('\n')} 66 | `; 67 | } 68 | 69 | async function parseRepository(localRepository: LocalRepository): Promise { 70 | // load from parsed 71 | const repoDefaults: LocalCollection = localRepository.collection 72 | const repoSidecars: LocalSidecar[] = localRepository.scripts 73 | // grab from index.yml 74 | const indexData: RemoteIndex = await axios.get(repoDefaults.index) 75 | .then(res => YAML.parse(res.data)) 76 | // iterate over remote index and match with sidecars 77 | const indexPlugins: Plugin[] = [] 78 | const idxMissingScar: Set = new Set() 79 | const allIdx: Set = new Set() 80 | for (const index of indexData) { 81 | const sidecarMatch = repoSidecars.find(sidecar => sidecar.id == index.id) 82 | if (sidecarMatch) { 83 | if (sidecarMatch.id == "example") continue // if example, skip 84 | else if (sidecarMatch.hide) { // skip but warn if hidden 85 | debuglog(`Skipping hidden plugin: ${index.name}`) 86 | continue 87 | } else allIdx.add(index) // add to sidecars 88 | } else { // sidecar not found 89 | if (repoDefaults.exclusive) continue // if exclusive, skip 90 | idxMissingScar.add(index) // add to missing 91 | } 92 | const plugin = new Plugin(repoDefaults, sidecarMatch, index) 93 | indexPlugins.push(plugin) 94 | } 95 | // check if there are leftover sidecars 96 | // not named example 97 | // not in indexPlugins and not hidden 98 | const extraSidecars = repoSidecars.filter(sidecar => sidecar.id != "example" && !sidecar.hide && !indexPlugins.find(plugin => plugin.id == sidecar.id)) 99 | if (extraSidecars.length > 0) { 100 | warnLog(`Found ${extraSidecars.length} extra sidecars in ${localRepository.name}`) 101 | extraSidecars.forEach(sidecar => warnLog(` ${sidecar.id}`)) 102 | } 103 | // check for plugins without sidecars 104 | const missingSCars = Array.from(idxMissingScar).filter(plugin => allIdx.has(plugin)) 105 | if (missingSCars.length > 0) { 106 | infoLog(`Found ${missingSCars.length} missing sidecars in ${localRepository.name}`) 107 | missingSCars.forEach(sidecar => infoLog(` ${sidecar.name}`)) 108 | } 109 | return indexPlugins 110 | } 111 | 112 | async function run() { 113 | // generate themes first then exclude 114 | const themes = await searchRepository("themes") 115 | printPlugins("themes", themes) 116 | // generate plugins with themes excluded 117 | const plugins = await searchRepository("plugins") 118 | // remove themes from plugins 119 | const filteredPlugins = plugins.filter(plugin => !themes.some(theme => theme.id == plugin.id)) 120 | printPlugins("plugins", filteredPlugins) 121 | console.log("finished building plugin index") 122 | } 123 | 124 | run() -------------------------------------------------------------------------------- /builder/plugin.ts: -------------------------------------------------------------------------------- 1 | import * as utils from './utils' 2 | import { LocalCollection, LocalSidecar, RemotePlugin } from './types' 3 | import axios from 'axios' 4 | 5 | const authClient = axios.create({ 6 | baseURL: 'https://api.github.com', 7 | headers: { 8 | 'User-Agent': "feederbox826/stash-docs-builder v1.0.0", 9 | 'Accept': 'application/vnd.github.object+json', 10 | 'Authorization': `Bearer ${process.env.BUILDER_GH_TOKEN}` 11 | } 12 | }) 13 | 14 | const statusIsOK = (status: number): boolean => status == 200 || status == 302 || status == 304 15 | 16 | export class Plugin { 17 | id: string // internal id of plugin 18 | name: string // display name of plugin 19 | description: string // description of plugin if available 20 | index: string // index url of collection 21 | repo: string // repository of collection 22 | author: string // author of plugin 23 | path: string // path to plugin in repository 24 | screenshots: string[] // screenshots of plugin 25 | readme: string | boolean | undefined // readme file 26 | base_path: string // path to plugins/ folder 27 | repo_path: string // path to repository in the format of owner/repo 28 | 29 | constructor(defaults: LocalCollection, sidecar: LocalSidecar | undefined, index: RemotePlugin) { 30 | this.id = index.id 31 | this.name = index.name 32 | this.description = index?.metadata?.description 33 | ?? sidecar?.description 34 | ?? "No Description Provided" 35 | this.index = defaults.index 36 | this.repo = defaults.global_repo 37 | this.author = sidecar?.author 38 | ?? defaults?.global_author // fall back to global author 39 | ?? "No Author" // if no author 40 | this.path = sidecar?.path 41 | ?? index.id // default to ID 42 | this.screenshots = sidecar?.screenshots ?? [] 43 | this.readme = defaults?.global_readme ?? sidecar?.readme // readme file 44 | this.base_path = defaults.base_path ?? "main/plugins" 45 | this.repo_path = `${this.base_path}/${this.path}` 46 | } 47 | 48 | async checkReadme(): Promise { 49 | // test readme if undefined 50 | if (this.readme === undefined) { 51 | this.readme = await authClient.get(`/repos/${this.repo}/contents/${this.repo_path}/README.md`, { 52 | validateStatus: status => statusIsOK(status) || status == 404 53 | }) 54 | .then(res => statusIsOK(res.status)) 55 | } 56 | } 57 | 58 | printMD() { 59 | // pre prepared values 60 | const folderPath = `https://github.com/${this.repo}/tree/${this.repo_path}` 61 | const filePath = `https://github.com/${this.repo}/blob/${this.repo_path}` 62 | // if false, no readme 63 | // if true, default readme 64 | // otherwise, follow path or url 65 | const readme = typeof(this.readme) == "string" // if readme is string 66 | ? this.readme.includes("http") // if link, add target blank 67 | ? `View [README](${this.readme}){target=_blank}` 68 | : `View [README](${filePath}/${this.readme}){target=_blank}` 69 | : this.readme // readme is boolean 70 | ? `View [README](${filePath}/README.md){target=_blank}` // default path 71 | : "No README available" 72 | const screenshots = this.screenshots 73 | .map(screenshot => `![${this.name} screenshot](${screenshot}){ loading=lazy } `) 74 | .join("") 75 | // ugly formatted markdown 76 | return ` 77 | ### [${this.name}](${folderPath}){target=_blank} 78 | 79 | === "Description" 80 | 81 | ${utils.sanitizeMD(this.description)} 82 | 83 | === "Source URL" 84 | 85 | \`\`\` 86 | ${this.index} 87 | \`\`\` 88 | 89 | === "README" 90 | 91 | ${readme} 92 | 93 | === "Author" 94 | 95 | ${this.author.replace(/(\[.+\]\(http.+\)(?:,|\r|\n|\r\n))/g, "{target=_blank}")} 96 | 97 | === "Screenshots" 98 | ${screenshots}` 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /builder/repositories/example.yml: -------------------------------------------------------------------------------- 1 | name: Repository name 2 | collection: 3 | # index url for your repo 4 | index: https://ghost.github.io/stash-plugins/main/index.yml 5 | # github url of the repo - github.com/username/repo-name 6 | global_repo: ghost/stash-plugins 7 | # author of all plugins in the repo (OPTIONAL) 8 | global_author: "[ghost](https://github.com/ghost)" 9 | # link to readme if it applies to all scripts within the collection 10 | global_readme: "https://example.com/stash-plugins/README.md" 11 | # branch/path within the folder structure 12 | base_path: main/plugins 13 | # entries not in the sidecar are excluded 14 | exclusive: true 15 | 16 | scripts: 17 | # internal id of the plugin 18 | - id: my-first-stash-plugin 19 | # path if it is not at base_path/id 20 | path: CoolPlugin 21 | # description (OPTIONAL) 22 | description: My first plugin 23 | # readme, if not at base_path/id/README.md 24 | # if left empty, will try to search at the location 25 | readme: "https://example.com/stash-plugins/README.md" 26 | # override author from global_author 27 | author: "Ghost, Casper" 28 | # list of links to images of screenshots 29 | screenshots: 30 | - https://example.com/stash-plugins/CoolPlugin/demo.png 31 | - https://example.com/stash-plugins/CoolPlugin/usage.png 32 | - https://example.com/stash-plugins/CoolPlugin/settings.png 33 | # if plugin should be hidden from generate index 34 | # this should only be set if the plugin is a backend dependency 35 | # is in a completely broken state and wholly incompatible 36 | # or has been deprecated and should not be used 37 | hide: true -------------------------------------------------------------------------------- /builder/repositories/plugins/7djx1qp-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://7djx1qp.github.io/stash-plugins/main/index.yml 3 | global_repo: 7dJx1qP/stash-plugins 4 | global_author: "[7dJx1qP](https://github.com/7dJx1qP)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # id only 17 | - id: stashOpenMediaPlayer 18 | 19 | # dependencies 20 | - id: stashUserscriptLibrary7dJx1qP 21 | hide: true 22 | 23 | # screenshots 24 | - id: stashBatchQueryEdit 25 | screenshots: 26 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/config.png 27 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/scenes-tagger.png 28 | 29 | - id: stashBatchResultToggle 30 | screenshots: 31 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/config.png 32 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/scenes-tagger.png 33 | 34 | - id: stashBatchSave 35 | screenshots: 36 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Save/scenes-tagger.png 37 | 38 | - id: stashBatchSearch 39 | screenshots: 40 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Search/scenes-tagger.png 41 | 42 | - id: stashMarkdown 43 | screenshots: 44 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markdown/tag-description.png 45 | 46 | - id: stashMarkersAutoscroll 47 | screenshots: 48 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markers%20Autoscroll/scroll-settings.png 49 | 50 | - id: stashNewPerformerFilterButton 51 | screenshots: 52 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20New%20Performer%20Filter%20Button/performers-page.png 53 | 54 | 55 | - id: stashPerformerAuditTaskButton 56 | screenshots: 57 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Audit%20Task%20Button/performers-page.png 58 | 59 | - id: stashPerformerCustomFields 60 | screenshots: 61 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view.png 62 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view-compact.png 63 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-edit.png 64 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/performer-details-edit.png 65 | 66 | - id: stashPerformerImageCropper 67 | screenshots: 68 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Image%20Cropper/performer-image-cropper.png 69 | 70 | - id: stashPerformerMarkersTab 71 | screenshots: 72 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Markers%20Tab/performer-page.png 73 | 74 | - id: stashPerformerTaggerAdditions 75 | screenshots: 76 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Tagger%20Additions/performer-tagger.png 77 | 78 | - id: stashPerformerURLSearchbox 79 | screenshots: 80 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20URL%20Searchbox/performers-page.png 81 | 82 | - id: stashSceneTaggerAdditions 83 | screenshots: 84 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/config.png 85 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/scenes-tagger.png 86 | 87 | - id: stashSceneTaggerColorizer 88 | screenshots: 89 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/config.png 90 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/scenes-tagger.png 91 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/tag-colors.png 92 | 93 | - id: stashSceneTaggerDraftSubmit 94 | screenshots: 95 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Draft%20Submit/scenes-tagger.png 96 | 97 | - id: stashSetStashboxFavoritePerformers 98 | screenshots: 99 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Set%20Stashbox%20Favorite%20Performers/performers-page.png 100 | 101 | - id: stashStashIDIcon 102 | screenshots: 103 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/performer-page.png 104 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/studio-page.png 105 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/scene-page.png 106 | 107 | - id: stashStashIDInput 108 | screenshots: 109 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/performer-page.png 110 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/studio-page.png 111 | 112 | - id: stashStashboxSceneCount 113 | screenshots: 114 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stashbox%20Scene%20Count/performer.png 115 | 116 | - id: stashStats 117 | screenshots: 118 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stats/stats-page.png 119 | 120 | - id: stashTagImageCropper 121 | screenshots: 122 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Tag%20Image%20Cropper/tag-image-cropper.png 123 | 124 | 125 | - id: stashVideoPlayerABLoopTimeInput 126 | screenshots: 127 | - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Video%20Player%20AB%20Loop%20Time%20Input/ab-loop-time-input.png -------------------------------------------------------------------------------- /builder/repositories/plugins/MinasukiHikimuna-MidnightRider-Stash.yml: -------------------------------------------------------------------------------- 1 | name: MinasukiHikimuna/MidnightRider-Stash plugins 2 | collection: 3 | index: https://minasukihikimuna.github.io/MidnightRider-Stash/index.yml 4 | global_repo: MinasukiHikimuna/MidnightRider-Stash 5 | global_author: "[MinasukiHikimuna](https://github.com/MinasukiHikimuna)" 6 | base_path: main/plugins 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | # id only 18 | - id: CompleteTheStash 19 | - id: HashTheStash 20 | -------------------------------------------------------------------------------- /builder/repositories/plugins/S3L3CT3DLoves-stashPlugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml 3 | global_repo: S3L3CT3DLoves/stashPlugins 4 | global_author: "[S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # path override 17 | - id: cleanupUI 18 | path: CleanupUI 19 | - id: easytag 20 | path: QuickEdit 21 | 22 | # id only 23 | - id: myIp 24 | - id: folderSort 25 | -------------------------------------------------------------------------------- /builder/repositories/plugins/Valkyr-JS-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://valkyr-js.github.io/stash-plugins/index.yml 3 | global_repo: Valkyr-JS/stash-plugins 4 | global_author: "[Valkyr-JS](https://github.com/Valkyr-JS)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # id only 17 | - id: StashReels 18 | readme: https://github.com/Valkyr-JS/StashReels/blob/main/README.md 19 | 20 | - id: StashMergers 21 | readme: https://github.com/Valkyr-JS/StashMergers/blob/main/README.md 22 | screenshots: 23 | - /assets/plugins/StashMergers/1.JPG 24 | - /assets/plugins/StashMergers/2.JPG 25 | - /assets/plugins/StashMergers/3.JPG 26 | - /assets/plugins/StashMergers/4.JPG 27 | - /assets/plugins/StashMergers/5.JPG 28 | - /assets/plugins/StashMergers/6.JPG 29 | 30 | - id: PerformerDetailsExtended 31 | readme: https://github.com/Valkyr-JS/PerformerDetailsExtended/blob/main/README.md 32 | 33 | - id: ValkyrSceneCards 34 | readme: https://github.com/Valkyr-JS/ValkyrSceneCards/blob/main/README.md 35 | screenshots: 36 | - /assets/plugins/ValkyrSceneCards/1.jpg 37 | - /assets/plugins/ValkyrSceneCards/2.jpg -------------------------------------------------------------------------------- /builder/repositories/plugins/blackstar3000-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: blackstar3000 plugins 2 | collection: 3 | index: https://blackstar3000.github.io/stash-plugins-blackstar/main/index.yml 4 | global_repo: blackstar3000/stash-plugins-blackstar 5 | global_author: "[blackstar3000](https://github.com/blackstar3000)" 6 | 7 | scripts: 8 | - id: stashNewScenesFilterButton -------------------------------------------------------------------------------- /builder/repositories/plugins/carrotwaxr-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://carrotwaxr.github.io/stash-plugins/stable/index.yml 3 | global_repo: carrotwaxr/stash-plugins 4 | global_author: "[carrotwaxr](https://github.com/carrotwaxr)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | - id: mcMetadata -------------------------------------------------------------------------------- /builder/repositories/plugins/ceequester-CommunityScripts.yml: -------------------------------------------------------------------------------- 1 | name: Ceequester/CommunityScripts 2 | collection: 3 | index: https://ceequester.github.io/CommunityScripts/stable/index.yml 4 | global_repo: Ceequester/CommunityScripts 5 | global_author: "[Ceequester](https://github.com/Ceequester)" 6 | # exclusive since it's a fork 7 | exclusive: true 8 | 9 | scripts: 10 | - id: pathParser -------------------------------------------------------------------------------- /builder/repositories/plugins/coderduo-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: coderdudeo stash plugins 2 | collection: 3 | index: https://coderdudeo.github.io/CoderDudeo-Stash-Plugins/index.yml 4 | global_repo: coderdudeo/CoderDudeo-Stash-Plugins 5 | global_author: "[coderdudeo](https://github.com/coderdudeo)" 6 | global_readme: https://github.com/coderdudeo/CoderDudeo-Stash-Plugins/blob/main/README.md 7 | 8 | scripts: 9 | - id: ColorCodedTags -------------------------------------------------------------------------------- /builder/repositories/plugins/crudecreations-set-image-pornpics.yml: -------------------------------------------------------------------------------- 1 | name: CrudeCreations/set-image-pornpics 2 | collection: 3 | index: https://crudecreations.github.io/set-image-pornpics/stable/plugin.yaml 4 | global_repo: CrudeCreations/set-image-pornpics 5 | global_author: "[CrudeCreations](https://github.com/CrudeCreations)" 6 | # exclusive since it's manually generated 7 | exclusive: true 8 | 9 | scripts: 10 | - id: set-image-pornpics 11 | readme: "https://github.com/CrudeCreations/set-image-pornpics/blob/main/README.md" 12 | -------------------------------------------------------------------------------- /builder/repositories/plugins/d0t-d0t-d0t-stash-repo-plugins.yml: -------------------------------------------------------------------------------- 1 | name: d0t-d0t-d0t plugins 2 | collection: 3 | index: https://raw.githubusercontent.com/d0t-d0t-d0t/stash-repo/refs/heads/dist/index.yml 4 | global_repo: d0t-d0t-d0t/stash-repo 5 | global_author: "[d0t-d0t-d0t](https://github.com/d0t-d0t-d0t)" 6 | base_path: main/Plugins 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | - id: stashAudioPlayer 18 | readme: https://github.com/d0t-d0t-d0t/stash-repo/blob/main/Plugins/stashaudioplayer/about.md 19 | path: stashaudioplayer 20 | -------------------------------------------------------------------------------- /builder/repositories/plugins/f4bio-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: f4bio plugins 2 | collection: 3 | index: https://f4bio.github.io/stash-plugins/main/index.yml 4 | global_repo: f4bio/stash-plugins 5 | global_author: "[f4bio](https://github.com/f4bio)" 6 | base_path: main/plugins 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | - id: renamerOnUpdate 18 | - id: renamerOnUpdateDevelop -------------------------------------------------------------------------------- /builder/repositories/plugins/feederbox826-plugins.yml: -------------------------------------------------------------------------------- 1 | name: feederbox826 plugins 2 | collection: 3 | index: https://feederbox826.github.io/plugins/main/index.yml 4 | global_repo: feederbox826/plugins 5 | global_author: "[feederbox826](https://feederbox.cc)" 6 | base_path: main/plugins 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | # dependencies 18 | - id: 0gql-intercept 19 | hide: true 20 | - id: forbiddenConfig 21 | hide: true 22 | - id: stashdb-api 23 | hide: true 24 | - id: wfke 25 | hide: true 26 | - id: fontawesome-js 27 | 28 | # deprecated 29 | - id: tag-graph-js 30 | hide: true 31 | 32 | # id only 33 | - id: avg-rating 34 | - id: edit-unorganized 35 | - id: filepath-copy 36 | - id: log-console 37 | - id: markergen 38 | - id: rebrand 39 | - id: s6-helper 40 | - id: skip-intro 41 | - id: stash-omnisearch 42 | - id: stash-open 43 | - id: stashdb-fullimg 44 | - id: tag-import 45 | - id: tag-video 46 | - id: tagger-img-res 47 | - id: titleobserver 48 | - id: vjs-mmb-fullscreen 49 | - id: vjs-shortcut 50 | 51 | # screenshots 52 | - id: studio-img-bg 53 | screenshots: 54 | - "https://raw.githubusercontent.com/feederbox826/plugins/main/docs/studio-image-bg_after.png" 55 | - id: log-toast 56 | screenshots: 57 | - "https://raw.githubusercontent.com/feederbox826/plugins/refs/heads/main/docs/log-toast.png" 58 | - id: tag-filter 59 | screenshots: 60 | - "https://raw.githubusercontent.com/feederbox826/plugins/refs/heads/main/docs/tag-filter-toggle.png" 61 | - "https://raw.githubusercontent.com/feederbox826/plugins/refs/heads/main/docs/tag-filter-demo.png" 62 | - id: watched-video 63 | screenshots: 64 | - "https://raw.githubusercontent.com/feederbox826/plugins/refs/heads/main/docs/watched-video.png" 65 | -------------------------------------------------------------------------------- /builder/repositories/plugins/feederbox826-stashlist.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://feederbox826.github.io/stashlist/main/index.yml 3 | global_repo: feederbox826/stashlist 4 | global_author: "[feederbox826](https://github.com/feederbox826)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | - id: stashlist-sync 17 | readme: https://github.com/feederbox826/stashlist/blob/main/README.md -------------------------------------------------------------------------------- /builder/repositories/plugins/jsmthy-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: jsmthy stash-plugins 2 | collection: 3 | index: https://jsmthy.github.io/stash-plugins/main/index.yml 4 | global_repo: jsmthy/stash-plugins 5 | global_author: "[jsmthy](https://github.com/jsmthy)" 6 | global_readme: "https://github.com/jsmthy/stash-plugins/blob/main/readme.md" 7 | 8 | scripts: 9 | - id: stashIngest 10 | description: Moves identified scenes from the ".StashIngest" folder to the root "Scenes" folder. -------------------------------------------------------------------------------- /builder/repositories/plugins/lurking987-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: Lurking987 stash-plugins 2 | collection: 3 | index: https://lurking987.github.io/stash-plugins/main/index.yml 4 | global_repo: Lurking987/stash-plugins 5 | 6 | scripts: 7 | - id: Find Marker For Tag Images -------------------------------------------------------------------------------- /builder/repositories/plugins/rosa-umineko-CommunityScripts-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://rosa-umineko.github.io/CommunityScripts/stable/index.yml 3 | global_repo: rosa-umineko/CommunityScripts 4 | global_author: "[rosa-umineko](https://github.com/rosa-umineko)" 5 | base_path: main/plugins 6 | exclusive: true 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | # id only 18 | - id: addImagesToTags 19 | - id: setSceneCover -------------------------------------------------------------------------------- /builder/repositories/plugins/serechops-Serechops-Stash-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://serechops.github.io/Serechops-Stash/index.yml 3 | global_repo: Serechops/Serechops-Stash 4 | global_author: "[serechops](https://github.com/Serechops)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | 17 | # movie-fy 18 | - id: Movie-Fy 19 | path: Movie-Fy/Movie-Fy 20 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 21 | 22 | - id: Movie-Fy Bulk Movie URL Scrape 23 | path: Movie-Fy/Movie-Fy%20Bulk%20Movie%20URL%20Scrape 24 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 25 | 26 | - id: Movie-Fy Check and Update Scene Titles 27 | path: Movie-Fy/Movie-Fy%20Check%20and%20Update%20Scene%20Titles 28 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 29 | 30 | - id: Movie-Fy Create Movie Studio 31 | path: Movie-Fy/Movie-Fy%20Create%20Movie%20Studio 32 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 33 | 34 | - id: Movie-Fy Scene Studio Bulk Update 35 | path: Movie-Fy/Movie-Fy%20Scene%20Studio%20Bulk%20Update 36 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 37 | 38 | - id: Movie-Fy Update Movie Scene Covers 39 | path: Movie-Fy/Movie-Fy%20Update%20Movie%20Scene%20Covers 40 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md 41 | 42 | # stashDisableAll 43 | - id: stashDisable 44 | path: stashDisableAll/stashDisable 45 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md 46 | - id: stashDisableAll 47 | path: stashDisableAll/stashDisableAll 48 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md 49 | - id: stashEnableFromSave 50 | path: stashDisableAll/stashEnableFromSave 51 | readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md 52 | 53 | # path override 54 | - id: performer_image_export 55 | path: PerformerImageExport 56 | - id: renamer-dev 57 | path: Renamer-Dev 58 | - id: renamer 59 | path: Renamer 60 | - id: stashJellyfinExport 61 | path: stashJellyfinExporter 62 | - id: SerechopsSceneCard 63 | path: serechopsSceneCard 64 | 65 | # id only 66 | - id: SceneHub 67 | - id: bulkImportPerformers 68 | - id: findMarkerTagImages 69 | - id: image2Scene 70 | - id: markerDupes 71 | - id: performerGallery 72 | - id: performerSceneCompare 73 | - id: pluginsBackup 74 | - id: sceneSpecsOverlay 75 | - id: scenesMovieDuration 76 | - id: stashAccessibility 77 | - id: stashBatchCreateAll 78 | - id: stashDBTagImport 79 | - id: stashDynamicGroups 80 | - id: stashFPSOverlay 81 | - id: stashNewPerformerScenes 82 | - id: stashPerformerFavicons 83 | - id: stashPerformerMatchScrape 84 | - id: stashRightClickGalleries 85 | - id: stashRightClickImages 86 | - id: stashRightClickPerformerMerge 87 | - id: stashRightClickPerformers 88 | - id: stashRightClickScenes 89 | - id: stashRightClickSettings 90 | - id: stashRightClickSuite 91 | - id: stashRightClickTags 92 | - id: stashSceneFileSize 93 | - id: stashStudioLogoWallView 94 | - id: stashTagCustomColors 95 | - id: stashTagPerformerImage 96 | - id: stashTimestamps 97 | - id: stashToggleSceneSprites 98 | - id: studioTopPerformer 99 | 100 | # not a plugin 101 | # - id: stashPluginYAMLGUI 102 | # - id: stashUIPluginExample 103 | -------------------------------------------------------------------------------- /builder/repositories/plugins/sneakyninja256-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: sneakyninja256 stash-plugins 2 | collection: 3 | index: https://sneakyninja256.github.io/stash-plugins/stable/index.yml 4 | global_repo: sneakyninja256/stash-plugins 5 | global_author: "[sneakyninja256](https://github.com/sneakyninja256)" 6 | global_readme: https://github.com/sneakyninja256/stash-plugins/blob/stable/README.md 7 | 8 | scripts: 9 | - id: audioTab 10 | screenshots: 11 | - https://raw.githubusercontent.com/sneakyninja256/stash-plugins/refs/heads/stable/images/audioTab/audioTab.png -------------------------------------------------------------------------------- /builder/repositories/plugins/spaceyuck-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: spaceyuck stashplugins 2 | collection: 3 | index: https://spaceyuck.github.io/stash-plugins/index.yml 4 | global_repo: spaceyuck/stash-plugins 5 | base_path: master/plugins 6 | 7 | scripts: 8 | - id: FastTagger 9 | readme: "https://github.com/spaceyuck/stash-fasttagger/blob/master/README.md" -------------------------------------------------------------------------------- /builder/repositories/plugins/stash-of-awesomeness-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://stash-of-awesomeness.github.io/stash-plugins/main/index.yml 3 | global_repo: stash-of-awesomeness/stash-plugins 4 | global_author: "[stash-of-awesomeness](https://github.com/stash-of-awesomeness)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | # id only 9 | - id: rename-file-on-update -------------------------------------------------------------------------------- /builder/repositories/plugins/stg-annon-StashScripts.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://stg-annon.github.io/StashScripts/stable/index.yml 3 | global_repo: stg-annon/StashScripts 4 | global_author: "[stg-annon](https://github.com/stg-annon)" 5 | base_path: main/plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # path override 17 | - id: performer_body_calculator 18 | path: performerBodyCalculator 19 | 20 | # id only 21 | - id: findFileErrors 22 | - id: phashDuplicateTagger 23 | - id: tagGraph 24 | -------------------------------------------------------------------------------- /builder/repositories/plugins/tetrax-10-stash-stuffs-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://tetrax-10.github.io/stash-stuffs/index.yml 3 | global_repo: tetrax-10/stash-stuffs 4 | global_author: "[tetrax-10](https://github.com/Tetrax-10)" 5 | base_path: main/Plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # screenshots 17 | - id: AutoSelectUpdatablePluginsAndScrapers 18 | screenshots: 19 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/AutoSelectUpdatablePlugins/demo.gif 20 | - id: PlayVideoIfPreviewNotFound 21 | screenshots: 22 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/play-video-if-preview-not-found/demo.gif 23 | 24 | # id only 25 | - id: AutoUpdatePluginsAndScrapers 26 | - id: ReplaceThumbnailsWithImages 27 | - id: TetraxUserscriptLibrary -------------------------------------------------------------------------------- /builder/repositories/plugins/voidimproper-stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: Voidimproper stash plugins 2 | collection: 3 | index: https://voidimproper.github.io/stash-plugins/main/index.yml 4 | global_repo: Voidimproper/stash-plugins 5 | 6 | scripts: 7 | - id: gallery_linker 8 | path: GalleryLinker -------------------------------------------------------------------------------- /builder/repositories/plugins/w0lfiew0lf-StashApp-Tools-plugins.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://w0lfiew0lf.github.io/StashApp-Tools/index.yml 3 | global_repo: W0lfieW0lf/StashApp-Tools 4 | global_author: "[W0lfieW0lf](https://github.com/W0lfieW0lf)" 5 | base_path: main/Plugins 6 | 7 | scripts: 8 | - id: example 9 | path: PluginName 10 | description: "New description" 11 | readme: https://github.com/ghost/PluginName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | - id: lightbox-visualnovel 17 | path: LightBox-VisualNovel 18 | screenshots: 19 | - https://raw.githubusercontent.com/W0lfieW0lf/StashApp-Tools/refs/heads/main/docs/images/LightBox-VisualNovel/LightBox-VisualNovel.gif -------------------------------------------------------------------------------- /builder/repositories/plugins/withoutpants-stash-plugin-prototypes.yml: -------------------------------------------------------------------------------- 1 | name: WithoutPants stash plugin prototypes 2 | collection: 3 | index: https://withoutpants.github.io/stash-plugin-prototypes/main/index.yml 4 | global_repo: WithoutPants/stash-plugin-prototypes 5 | global_author: "[WithoutPants](https://github.com/WithoutPants)" 6 | global_readme: https://github.com/WithoutPants/stash-plugin-prototypes/blob/main/README.md 7 | 8 | scripts: 9 | - id: embeddedScenePlayer 10 | screenshots: 11 | - https://raw.githubusercontent.com/WithoutPants/stash-plugin-prototypes/refs/heads/main/images/embed-scene-player.png 12 | - https://raw.githubusercontent.com/WithoutPants/stash-plugin-prototypes/refs/heads/main/images/embed-scene-player-settings.png 13 | - id: quickSentiment 14 | screenshots: 15 | - https://raw.githubusercontent.com/WithoutPants/stash-plugin-prototypes/refs/heads/main/images/quick-sentiment.png 16 | - id: shelve 17 | - id: shelveUI 18 | screenshots: 19 | - https://raw.githubusercontent.com/WithoutPants/stash-plugin-prototypes/refs/heads/main/images/shelve-ui.png 20 | 21 | -------------------------------------------------------------------------------- /builder/repositories/plugins/xiosensei-Xio-Stash-plugins.yml: -------------------------------------------------------------------------------- 1 | name: xiosensei plugins 2 | collection: 3 | index: https://xiosensei.github.io/Xio-Stash/index.yml 4 | global_repo: xiosensei/Xio-Stash 5 | global_author: "[xiosensei](https://github.com/xiosensei)" 6 | base_path: main/plugins 7 | 8 | scripts: 9 | - id: example 10 | path: PluginName 11 | description: "New description" 12 | readme: https://github.com/ghost/PluginName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | - id: categorize-tags-based-on-parent 18 | path: categorize_tags_based_on_parent 19 | 20 | - id: display-tag-image-with-tag 21 | 22 | - id: randomize-performer-images 23 | 24 | - id: tag-text-to-emoji -------------------------------------------------------------------------------- /builder/repositories/themes/feederbox826-themes.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://feederbox826.github.io/themes/main/index.yml 3 | global_repo: feederbox826/themes 4 | global_author: "[feederbox826](https://github.com/feederbox826)" 5 | base_path: main/themes 6 | 7 | scripts: 8 | - id: example 9 | path: ThemeName 10 | description: "New description" 11 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | # id only 17 | - id: alternative-tag-layout 18 | - id: direct-stream 19 | - id: hide-donate 20 | - id: hide-ocount 21 | - id: more-studio-row 22 | - id: performer-grid 23 | - id: wrap-subtag -------------------------------------------------------------------------------- /builder/repositories/themes/rosa-umineko-CommunityScripts-themes.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://rosa-umineko.github.io/CommunityScripts/stable/index.yml 3 | global_repo: rosa-umineko/CommunityScripts 4 | global_author: "[rosa-umineko](https://github.com/rosa-umineko)" 5 | base_path: rosa-umineko/themes 6 | exclusive: true 7 | 8 | scripts: 9 | - id: example 10 | path: ThemeName 11 | description: "New description" 12 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | # inexplicably removed 18 | # https://github.com/rosa-umineko/CommunityScripts/commit/864dc5ea74828f5d2f43c71f88a6bbabff5644f6#diff-a468b993b48658ed25dec629d015eadd634219704cd8ac47e50a879cc5230b90 19 | # - id: Theme-Shadcn 20 | -------------------------------------------------------------------------------- /builder/repositories/themes/serechops-stash-glassy.yml: -------------------------------------------------------------------------------- 1 | name: Serechops Glassy 2 | collection: 3 | index: https://serechops.github.io/Serechops-Stash/index.yml 4 | global_repo: Serechops/Serechops-Stash 5 | global_author: "[serechops](https://github.com/Serechops)" 6 | global_readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md 7 | base_path: main/themes/Glassy 8 | exclusive: true 9 | 10 | scripts: 11 | - id: example 12 | path: ThemeName 13 | description: "New description" 14 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 15 | author: Deleted User 16 | screenshots: 17 | - https://avatars.githubusercontent.com/u/10137 18 | 19 | - id: Glassy - A Window to Your Collection 20 | - id: Glassy - Font Overhaul 21 | - id: Glassy - Front Page Animations and Blur 22 | - id: Glassy - Images 23 | - id: Glassy - Installer 24 | - id: Glassy - Marker Wall Redesign 25 | - id: Glassy - Performer Scene Card Details Redesign 26 | - id: Glassy - Scene Player-Details 60-40 27 | - id: Glassy - Scene Player-Details Reversed 60-40 28 | - id: Glassy - Scene Player-Details Reversed 29 | - id: Glassy - Scene and Movie Card Redesign - No Animated Titles 30 | - id: Glassy - Scene and Movie Card Redesign 31 | - id: Glassy - Smaller Performer Cards on Main Page 32 | - id: Glassy - Smaller Performer Image Cards 33 | - id: Glassy - Video-Res Icons 34 | -------------------------------------------------------------------------------- /builder/repositories/themes/stashapp-CommunityScripts-themes.yml: -------------------------------------------------------------------------------- 1 | name: stashapp/CommunityScripts Themes 2 | collection: 3 | index: https://stashapp.github.io/CommunityScripts/stable/index.yml 4 | global_repo: stashapp/CommunityScripts 5 | base_path: main/themes 6 | exclusive: true 7 | 8 | scripts: 9 | - id: example 10 | path: ThemeName 11 | description: "New description" 12 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | - id: Theme-BlackHole 18 | author: BViking78 19 | 20 | - id: Theme-ColorPalette 21 | author: "[wql219](https://github.com/wql219)" 22 | 23 | - id: Theme-Minimal 24 | author: "[deuulc](https://github.com/deuulc)" 25 | screenshots: 26 | - /assets/themes/Theme-Minimal/1.png 27 | - /assets/themes/Theme-Minimal/2.png 28 | - /assets/themes/Theme-Minimal/3.png 29 | - /assets/themes/Theme-Minimal/4.png 30 | 31 | - id: Theme-ModernDark 32 | author: "[cj13](https://github.com/cj12312021)" 33 | 34 | - id: Theme-NeonDark 35 | author: Dankonite 36 | 37 | - id: Theme-Plex 38 | author: Fidelio 39 | screenshots: 40 | - https://user-images.githubusercontent.com/1358708/178891502-c71e4278-0378-4154-91a6-07e1a8eaa1df.png 41 | 42 | - id: Theme-PornHub 43 | author: ronilaukkarinen 44 | 45 | - id: Theme-Pulsar 46 | author: Fonzie 47 | 48 | - id: Theme-PulsarLight 49 | author: Fonzie 50 | 51 | - id: Theme-RoundedYellow 52 | author: Fonzie 53 | 54 | # no author 55 | - id: Theme-Night 56 | -------------------------------------------------------------------------------- /builder/repositories/themes/tetrax-10-stash-stuffs-themes.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://tetrax-10.github.io/stash-stuffs/index.yml 3 | global_repo: tetrax-10/stash-stuffs 4 | global_author: "[tetrax-10](https://github.com/Tetrax-10)" 5 | base_path: main/themes 6 | exclusive: true 7 | 8 | scripts: 9 | - id: example 10 | path: ThemeName 11 | description: "New description" 12 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 13 | author: Deleted User 14 | screenshots: 15 | - https://avatars.githubusercontent.com/u/10137 16 | 17 | - id: PlexBetterStyles 18 | readme: https://github.com/Tetrax-10/stash-stuffs/tree/main#1-plex-better-styles 19 | screenshots: 20 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/galleries.png 21 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/performers.png 22 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/images.png 23 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/scenes.png 24 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/settings.png 25 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/help.png 26 | - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/tags.png -------------------------------------------------------------------------------- /builder/repositories/themes/uncertainmongoose-dracula-for-stash.yml: -------------------------------------------------------------------------------- 1 | collection: 2 | index: https://uncertainmongoose.github.io/dracula-for-stash/index.yml 3 | global_repo: uncertainmongoose/dracula-for-stash 4 | global_author: "[UncertainMongoose](https://github.com/UncertainMongoose)" 5 | base_path: main/themes 6 | 7 | scripts: 8 | - id: example 9 | path: ThemeName 10 | description: "New description" 11 | readme: https://github.com/ghost/ThemeName/blob/main/README.md 12 | author: Deleted User 13 | screenshots: 14 | - https://avatars.githubusercontent.com/u/10137 15 | 16 | - id: dracula-theme 17 | path: dracula -------------------------------------------------------------------------------- /builder/types.ts: -------------------------------------------------------------------------------- 1 | export interface RemotePlugin { 2 | id: string // internal id of plugin 3 | name: string // display name of plugin 4 | metadata?: Record | { description?: string } // metadata of plugin 5 | version: string // version of plugin appended with hash 6 | dath: string // date of last update 7 | path: string // path to zip file relative to yml 8 | sha256: string // sha256 hash of zip file 9 | requires: string[] // list of dependencies 10 | } 11 | 12 | export type RemoteIndex = RemotePlugin[] 13 | 14 | export interface LocalRepository { 15 | name?: string // name of repository 16 | collection: LocalCollection 17 | scripts: LocalSidecar[] 18 | } 19 | 20 | export interface LocalCollection { 21 | index: string // index url of collection 22 | global_repo: string // repository of collection 23 | global_author?: string // author of collection if it is just owner 24 | base_path?: string // base path to plugins 25 | global_readme?: string // global readme file 26 | exclusive: boolean // exclude any entires not in sidecar 27 | } 28 | 29 | export interface LocalSidecar { 30 | id: string // internal id of plugin 31 | path?: string // override path to plugin if not id 32 | description?: string // override description if not in index 33 | readme?: string // path to readme file 34 | author?: string // author of plugin 35 | screenshots?: string[] // screenshots of plugin 36 | hide?: boolean // hide plugin from generated index 37 | // this should only be used when the plugin is a backend dependency 38 | // or is in a completely broken state and wholly incompatible 39 | // or has been deprecated and should not be used 40 | } -------------------------------------------------------------------------------- /builder/utils.ts: -------------------------------------------------------------------------------- 1 | // utility functions for the builder 2 | export const sanitizeMD = (md: string) => md.replace("<", "<").replace(">", ">") 3 | export const infoLog = (message: string) => console.log(`[INFO] ${message}`) 4 | export const warnLog = (message: string) => console.warn(`[WARN] ${message}`) 5 | export const debugLog = (message: string) => console.debug(`[DEBUG] ${message}`) -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | docs.stashapp.cc -------------------------------------------------------------------------------- /docs/add-ons.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/add-ons.md -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Stash API 3 | hide: 4 | - navigation 5 | --- 6 | 7 | # Stash API 8 | 9 | The Stash GraphQL API facilitates automated operations through a type-based schema that is both introspective and self-documenting. 10 | 11 | Stash includes an integrated playground where users can execute queries and retrieve schema structures and documentation via a special introspection query. 12 | 13 | 1. You can access the playground from Stash. 14 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tools** > **GraphQL playground**. 15 | 1. Click on the left to access the Documentation Explorer. 16 | 17 | All HTTP requests should be directed to `:/graphql` (default: `http://localhost:9999/graphql`). 18 | 19 | !!! tip 20 | For further information, visit the [official GraphQL site](https://graphql.org/learn/){target="_blank"}. 21 | 22 | ## Authentication 23 | 24 | Include the API key generated in Stash in the header of every request. For details on obtaining the API Key, refer to Stash's in-app manual. 25 | 26 | === "Example using curl" 27 | 28 | Replace `` with your **API Key** found under :fontawesome-solid-gear: **Settings** > **Security** > **Authentication**. 29 | 30 | Replace `` with the raw query, which can be formatted using the playground. 31 | 32 | ```shell 33 | curl -X POST -H "ApiKey: " -H "Content-Type: application/json" --data '{ "query": "" }' localhost:9999/graphql 34 | ``` 35 | 36 | ### Legacy cookie authentication 37 | 38 | For configurations using a username/password, cookies must be used for authentication. 39 | 40 | === "Example using curl" 41 | 42 | ```shell 43 | curl --verbose --cookie-jar cookie.txt --data 'username=stash&password=**' localhost:9999/login 44 | curl --cookie cookie.txt -H "Content-Type: application/json" --data '{ "query": "" }' localhost:9999/graphql 45 | ``` 46 | 47 | It is recommended to use the `API Key` method over the legacy cookie method. 48 | -------------------------------------------------------------------------------- /docs/assets/add-ons/FilenamePerformersToCSV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/FilenamePerformersToCSV.png -------------------------------------------------------------------------------- /docs/assets/add-ons/GHScraper_Checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/GHScraper_Checker.png -------------------------------------------------------------------------------- /docs/assets/add-ons/OnlyFans_Scraper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/OnlyFans_Scraper.png -------------------------------------------------------------------------------- /docs/assets/add-ons/OnlyFans_Scraper2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/OnlyFans_Scraper2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Performer_Card_Details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Performer_Card_Details.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-Userscript-Upscaler-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-Userscript-Upscaler-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-Userscript-Upscaler-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-Userscript-Upscaler-2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash-Userscript-Upscaler-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash-Userscript-Upscaler-3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashAppAndroidTV-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashAppAndroidTV-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashAppAndroidTV-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashAppAndroidTV-2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashAppAndroidTV-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashAppAndroidTV-3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_Backlog_Userscript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_Backlog_Userscript.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_Backlog_Userscript2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_Backlog_Userscript2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_Backlog_Userscript3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_Backlog_Userscript3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_ID_Copy_Buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_ID_Copy_Buttons.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_Images_Userscript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_Images_Userscript.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashDB_Submission_Helper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashDB_Submission_Helper.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashTagSkins_Hamster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashTagSkins_Hamster.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashTagSkins_Icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashTagSkins_Icons.png -------------------------------------------------------------------------------- /docs/assets/add-ons/StashTagSkins_Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/StashTagSkins_Sample.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Query_Edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Query_Edit.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Query_Edit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Query_Edit2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Result_Toggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Result_Toggle.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Result_Toggle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Result_Toggle2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Save.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Batch_Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Batch_Search.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Checker.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Markdown.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_New_Performer_Filter_Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_New_Performer_Filter_Button.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Open_Media_Player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Open_Media_Player.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Audit_Task_Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Audit_Task_Button.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Audit_Task_Button2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Audit_Task_Button2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Audit_Task_Button3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Audit_Task_Button3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Image_Cropper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Image_Cropper.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Markers_Tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Markers_Tab.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_Tagger_Additions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_Tagger_Additions.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Performer_URL_Searchbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Performer_URL_Searchbox.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Additions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Additions.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Additions2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Additions2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Colorizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Colorizer.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Linkify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Linkify.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Scene_Tagger_Linkify2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Scene_Tagger_Linkify2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_StashID_Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_StashID_Icon.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_StashID_Icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_StashID_Icon2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_StashID_Icon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_StashID_Icon3.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_StashID_Input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_StashID_Input.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_StashID_Input2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_StashID_Input2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Stats.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_Tag_Image_Cropper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_Tag_Image_Cropper.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Stash_helper-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Stash_helper-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/Visage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/Visage.png -------------------------------------------------------------------------------- /docs/assets/add-ons/blurryCardBackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/blurryCardBackground.png -------------------------------------------------------------------------------- /docs/assets/add-ons/fixed_table_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/fixed_table_width.png -------------------------------------------------------------------------------- /docs/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png -------------------------------------------------------------------------------- /docs/assets/add-ons/renamerOnUpdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/renamerOnUpdate.png -------------------------------------------------------------------------------- /docs/assets/add-ons/stash-qmt-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/stash-qmt-1.png -------------------------------------------------------------------------------- /docs/assets/add-ons/stash-qmt-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/stash-qmt-2.png -------------------------------------------------------------------------------- /docs/assets/add-ons/stash_tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/add-ons/stash_tag.png -------------------------------------------------------------------------------- /docs/assets/beginner-guides/create-tpdb-token.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/create-tpdb-token.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/find-scene-tagger.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/find-scene-tagger.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/find-stashid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/find-stashid.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/gen-phashes-manually.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/gen-phashes-manually.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/gen-phashes-on-scan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/gen-phashes-on-scan.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/regexui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/regexui.png -------------------------------------------------------------------------------- /docs/assets/beginner-guides/scrape-all-and-search.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/scrape-all-and-search.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/scrapers-folder-location.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/scrapers-folder-location.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/tagger-source-tpdb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/tagger-source-tpdb.png -------------------------------------------------------------------------------- /docs/assets/beginner-guides/tpdb-scene-scraper-entry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/tpdb-scene-scraper-entry.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-docker-stash-page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-docker-stash-page.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-gpuid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-gpuid.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg -------------------------------------------------------------------------------- /docs/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg -------------------------------------------------------------------------------- /docs/assets/guides/run-cdp-on-truenas-scale/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/guides/run-cdp-on-truenas-scale/1.png -------------------------------------------------------------------------------- /docs/assets/guides/run-cdp-on-truenas-scale/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/guides/run-cdp-on-truenas-scale/2.png -------------------------------------------------------------------------------- /docs/assets/guides/run-cdp-on-truenas-scale/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/guides/run-cdp-on-truenas-scale/3.png -------------------------------------------------------------------------------- /docs/assets/guides/run-cdp-on-truenas-scale/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/guides/run-cdp-on-truenas-scale/4.png -------------------------------------------------------------------------------- /docs/assets/guides/run-cdp-on-truenas-scale/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/guides/run-cdp-on-truenas-scale/5.png -------------------------------------------------------------------------------- /docs/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/images/favicon.ico -------------------------------------------------------------------------------- /docs/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/images/logo.png -------------------------------------------------------------------------------- /docs/assets/images/logo_white.svg: -------------------------------------------------------------------------------- 1 | 2 | Source: openclipart.org/detail/209545Source: openclipart.org/detail/209545Created with Fabric.js 3.6.6Source: openclipart.org/detail/209545Created with Fabric.js 3.6.6 -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/1.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/2.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/3.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/3.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/4.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/4.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/5.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/5.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/StashMergers/6.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/StashMergers/6.JPG -------------------------------------------------------------------------------- /docs/assets/plugins/ValkyrSceneCards/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/ValkyrSceneCards/1.jpg -------------------------------------------------------------------------------- /docs/assets/plugins/ValkyrSceneCards/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/ValkyrSceneCards/2.jpg -------------------------------------------------------------------------------- /docs/assets/plugins/cjCardTweaks/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/cjCardTweaks/1.png -------------------------------------------------------------------------------- /docs/assets/plugins/cjCardTweaks/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/cjCardTweaks/2.png -------------------------------------------------------------------------------- /docs/assets/plugins/cjCardTweaks/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/cjCardTweaks/3.png -------------------------------------------------------------------------------- /docs/assets/plugins/filemonitor/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/filemonitor/1.png -------------------------------------------------------------------------------- /docs/assets/plugins/renamerOnUpdate/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/renamerOnUpdate/1.png -------------------------------------------------------------------------------- /docs/assets/plugins/themeSwitch/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/themeSwitch/1.png -------------------------------------------------------------------------------- /docs/assets/plugins/themeSwitch/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/plugins/themeSwitch/2.png -------------------------------------------------------------------------------- /docs/assets/stylesheets/announce.css: -------------------------------------------------------------------------------- 1 | .md-banner { 2 | background-color: #1e2129; 3 | } -------------------------------------------------------------------------------- /docs/assets/themes/Theme-Minimal/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/themes/Theme-Minimal/1.png -------------------------------------------------------------------------------- /docs/assets/themes/Theme-Minimal/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/themes/Theme-Minimal/2.png -------------------------------------------------------------------------------- /docs/assets/themes/Theme-Minimal/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/themes/Theme-Minimal/3.png -------------------------------------------------------------------------------- /docs/assets/themes/Theme-Minimal/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/themes/Theme-Minimal/4.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Black-Hole-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Black-Hole-preview.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Border-around-cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Border-around-cards.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Light-Pulsar-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Light-Pulsar-preview.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Modern-Dark-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Modern-Dark-preview.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Neon-Dark-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Neon-Dark-preview.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Night-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Night-preview.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Plex-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Plex-preview.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/Pulsar-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/Pulsar-preview.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/blur2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/blur2.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/css-scrubber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/css-scrubber.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/fixed_table_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/fixed_table_width.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/hide_0_count_badges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/hide_0_count_badges.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_studio_item_after.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_studio_item_after.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_studio_item_before.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_studio_item_before.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_tag_after_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_tag_after_1.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_tag_after_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_tag_after_2.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_tag_before.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_tag_before.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/more_tag_subtag.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/more_tag_subtag.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/navigation-after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/navigation-after.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/navigation-before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/navigation-before.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/studios_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/studios_layout.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/tags_layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/tags_layout.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/light-pulsar-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/light-pulsar-1.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/light-pulsar-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/light-pulsar-2.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/light-pulsar-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/light-pulsar-3.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/mobile-layout-overhaul-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/mobile-layout-overhaul-1.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/modern-dark-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/modern-dark-1.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-1.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-1.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-2.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-3.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-4.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-5.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/neon-dark-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/neon-dark-6.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/night-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/night-1.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/plex-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/plex-1.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/plex-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/plex-background.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/plex-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/plex-logo.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/plex-noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/plex-noise.png -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/pulsar-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/pulsar-1.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/pulsar-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/pulsar-2.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/pulsar-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/pulsar-3.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/pulsar-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/pulsar-4.jpg -------------------------------------------------------------------------------- /docs/assets/user-interface-ui/themes/pulsar-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/assets/user-interface-ui/themes/pulsar-5.jpg -------------------------------------------------------------------------------- /docs/beginner-guides/exclude-file-configuration.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/docs/beginner-guides/exclude-file-configuration.md -------------------------------------------------------------------------------- /docs/code-of-conduct.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - navigation 4 | --- 5 | 6 | ## Our Pledge 7 | 8 | We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. 9 | 10 | We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to a positive environment for our community include: 15 | 16 | * Demonstrating empathy and kindness toward other people 17 | * Being respectful of differing opinions, viewpoints, and experiences 18 | * Giving and gracefully accepting constructive feedback 19 | * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience 20 | * Focusing on what is best not just for us as individuals, but for the overall community 21 | 22 | Examples of unacceptable behavior include: 23 | 24 | * The use of sexualized language or imagery outside of areas that explicitly allow them, and sexual attention or advances of any kind 25 | * Trolling, insulting or derogatory comments, and personal or political attacks 26 | * Public or private harassment 27 | * Publishing others' private information, such as a physical or email address, without their explicit permission 28 | * Other conduct which could reasonably be considered inappropriate in a professional setting 29 | 30 | ## Enforcement Responsibilities 31 | 32 | Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. 33 | 34 | Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. 35 | 36 | ## Scope 37 | 38 | This Code of Conduct applies within all community spaces, community servers, code repositories, and also applies when an individual is officially representing the community in public spaces. 39 | 40 | ## Enforcement 41 | 42 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement. You can contact Admin or Org Lead members directly via Discord or using an integrated report function on other platforms. 43 | All complaints will be reviewed and investigated promptly and fairly. 44 | 45 | All community leaders are obligated to respect the privacy and security of the reporter of any incident. 46 | 47 | ## Enforcement Guidelines 48 | 49 | Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: 50 | 51 | ### Warning 52 | 53 | **Offense**: First time offence. 54 | 55 | **Consequence**: A public or private written warning depending on the space where offense happened. 56 | 57 | ### Temporary or Permanent Ban 58 | 59 | **Offense**: Second time offense. 60 | 61 | **Consequence**: Temporary or permanent ban from any sort of public interaction within the 62 | community and removal of any previously given elevated permissions. 63 | 64 | ## Attribution 65 | 66 | This Code of Conduct is a modified and adapted from the [Contributor Covenant][homepage], 67 | version 2.1, available at 68 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 69 | 70 | [homepage]: https://www.contributor-covenant.org 71 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -------------------------------------------------------------------------------- /docs/faq/setup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Setup 3 | icon: fontawesome/solid/desktop 4 | --- 5 | 6 | ## Protecting against accidental exposure to the internet 7 | 8 | Stash data is considered private, and Stash is not designed to be publicly exposed, except to trusted confidants. Stash has a built-in protection against accidentally exposing itself publicly outside of your network. If Stash receives a request from the public internet, and you do not have a password enabled, Stash will reject the request and stop handling requests to protect your privacy. 9 | 10 | This often happens when you use the port-forwarding feature of your router or install Stash on a publicly accessible server, such as a VPS. When you do this, anybody in the world can access your Stash instance, so we enforce a password requirement. If your Stash instance has shutdown due to an insecure configuration, it will not handle requests again until you tell it that you have fixed the problem. After setting up either authentication, firewall, or removing your port forwarding rules, you can edit `.stash/config/config.yml` and remove the key `security_tripwire_accessed_from_public_internet`. 11 | 12 | ### Alternative and safe methods to access your Stash 13 | 14 | You may use several methods to safely access Stash from outside of your home network. In the most basic, you can enable authentication in Stash, and re-enable port forwarding. You can also use a VPN solution that allows you to securely access your home network, such as [Tailscale](https://tailscale.com){:target="_blank"}, [Zerotier](https://zerotier.com){:target="_blank"}, [Wireguard](https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-20-04){:target="_blank"}, or others. 15 | 16 | ### Using an external authentication provider 17 | 18 | If you are an advanced user, and have secured your Stash instance behind an authwall provided by a reverse proxy or hosting solution, you may continue to use that. You simply have to edit `.stash/config/config.yml` and set `dangerous_allow_public_without_auth` to `true`. If you have already tripped the security feature, you will also have to remove the `security_tripwire_accessed_from_public_internet` key in order to allow Stash to serve requests. 19 | 20 | You will also have to disable Stash built-in authentication by clearing the username/password values in **Security** > **Authentication** > **Credentials**. -------------------------------------------------------------------------------- /docs/getting-started/first-steps.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: First steps 3 | --- 4 | 5 | ## Setting up content libraries 6 | 7 | 1. Go to :fontawesome-solid-gear: **Settings** > **Library** and click **Add Directory**. 8 | 1. To change the drive letter/volume, just type it in the field. 9 | 1. Select the folder containing the content you want to add. It will select the folder and all sub-folders. 10 | 1. Click **Confirm**. 11 | 12 | ## Configuring scan options 13 | 14 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**. 15 | 1. Select options you want based on your preferences, but keep in mind that every option increases time the scan will take. 16 | 1. You can stop and re-scan it will ignore the files that are already scanned and just scan new or missing files. 17 | 18 | ## Initiating scan 19 | 20 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**. 21 | 1. Click **Scan** to start scanning for the content from your setup libraries or **Selective Scan...** if you want to scan a specific location. 22 | 23 | !!! info 24 | If you decide to cancel the task in the queue, next time you will start the task, it will skip the files that were already scanned. -------------------------------------------------------------------------------- /docs/guides/advanced-configuration-options.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Advanced configuration options 3 | hide: 4 | - toc 5 | --- 6 | 7 | Some configuration options can not be edited through the UI and should only be used if needed. 8 | 9 | Depending on the option they can be configured either by editing the `config.yml` configuration file or by using an enviroment variable or in a few cases by using flags when running stash. 10 | 11 | As an example the `port` option can be changed from the default `9999` to `1234` by one of the below methods: 12 | 13 | - adding `port: 1234` to the config.yml file 14 | - setting the ENV variable **STASH_PORT** to **1234** eg `STASH_PORT=1234 ./stash` 15 | - using the flag **--port** when running stash `./stash --port 1234` 16 | 17 | Configuration Option | YML | ENV | FLAG | Description | Comments 18 | ---------------------|:---:|:---:|:----:|-------------|:-------------: 19 | host|host|STASH_HOST|--host| The ip address for the host that stash is listening to | default: 0.0.0.0 20 | port|port|STASH_PORT|--port| The port that stash serves to |default: 9999 21 | external host|external_host|STASH_EXTERNAL_HOST|-| Needed in some cases when you use a reverse proxy | [Docs](/guides/reverse-proxy/) 22 | plugins path|plugins_path|-|-|The path to the stash plugins folder|Only use if you need to override the default 23 | scrapers path|scrapers_path|-|-|The path to the scrapers folder|Only use if you need to override the default 24 | custom served folders|custom_served_folders|-|-|Allows configuration of mapped URLs to file system folders|[PR](https://github.com/stashapp/stash/pull/620){:target="_blank"} 25 | maximum upload size|max_upload_size|-|-|Change the maximum size (in MB) for partial imports| default: 1024 (1GB) 26 | proxy|proxy|-|-| The url of a HTTP(S) proxy to be used when stash makes calls to online services | Example: https://user:password@my.proxy:8080 27 | no proxy|no_proxy|-|-| A list of domains for which the proxy must not be used | default is all local LAN: localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12 28 | -------------------------------------------------------------------------------- /docs/guides/backup-and-restore-database.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Backup and restore database 3 | --- 4 | 5 | ## Backup 6 | 7 | Always use the UI to create a backup of the database. As with all live databases **DO NOT** copy manually the database file as a means of backup. 8 | 9 | Stash uses an sqlite database with `WAL` mode enabled. This practically means that along with the main db file `stash.go-sqlite` there can be a `-shm` and a `-wal` file present ([more info](https://sqlite.org/wal.html){:target="_blank"}). Even stopping Stash might leave some of these index files present so again **DO NOT** manually copy the database file. 10 | 11 | The **Backup** or **Download Backup** tasks are the proper way to create a backup file. 12 | 13 | 1. Go to :fontawesome-solid-gear: **Settings** > **System**. 14 | 1. Under Application Paths heading scroll down to **Backup Directory Path**. 15 | 1. Set directory to store your backups. 16 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**. 17 | 1. Under Backup heading you will find 2 tasks. 18 | 1. Select either **Backup** or **Download Backup** task. 19 | 20 | ## Restore 21 | 22 | Assuming you have properly created a backup file you can use it to restore your database if needed. 23 | 24 | !!! info 25 | The restore procedure uses the default `stash-go.sqlite` filename, if you changed that when configuring Stash adjust accordingly. 26 | 27 | The following steps are recommended when restoring a database file: 28 | 29 | 1. Go to :fontawesome-solid-gear: **Settings** > **System**, scroll down to Database heading and check your **Database Path** location. 30 | 1. Create a backup of the current database. (optional) 31 | 1. Stop Stash. 32 | 1. In your file browser, go to the location of your database path. 33 | 1. Move or delete the `stash-go.sqlite` database file (along with the `-shm` `-wal` `.journal` files if present). 34 | 1. Copy the backup file that you want to restore to `stash-go.sqlite`. 35 | 1. Make sure that you now have a `stash-go.sqlite` file and that no `-shm` `-wal` `.journal` files are present. 36 | 1. Start Stash. 37 | 38 | You should now have Stash running with a working and restored database. 39 | 40 | ## Advanced troubleshooting 41 | 42 | If you get a database malformed message during upgrade or backup that probably means that the database is already corrupt. One way to get past that is to do a full export and check the error log. If there are not a lot of errors you can then try to do a full import and get a working db with minimal losses. As the full import is destructive proceed with caution. 43 | For cases like this it is better to ask for [support](/#support). 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/guides/importing-via-csv-using-gql-iterate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bulk importing via CSV using gql-iterate 3 | --- 4 | 5 | If you want to add a collection of performers, tags, studios, etc, and you have a text/spreadsheet list of them, here's the walkthrough of how to do it via a simple CLI method. 6 | 7 | ## Step 1: Install gql-iterate 8 | 9 | [gql-iterate repository](https://github.com/efstajas/gql-iterate){:target="_blank"} 10 | 11 | `npm install @efstajas/gql-iterate -g` or `yarn add @efstajas/gql-iterate -g` 12 | 13 | For latest versions of NodeJS (14>) you need to go where you globally install your npm modules (AppData/Roaming/npm/node_modules/@efstajas/gql-iterate/bin) and add the following to the first line of the cli.js file. 14 | 15 | `import { createRequire } from 'module'; const require = createRequire(import.meta.url);` 16 | 17 | ## Step 2: Prepare your gql.file if needed 18 | 19 | See below for example versions of performers.gql and tags.gql samples that should work for you. 20 | Others can be figured out (with minor changes needeed) from stash/graphql/documents/mutations 21 | 22 | These are NOT identical to the original files found above. Compare you'll see how they differ. This is very specific to be used for gql-iterate. 23 | 24 | === "tags.gql" 25 | 26 | ```graphql 27 | mutation TagCreate( 28 | $name: String!, 29 | $image: String) { 30 | tagCreate(input: { 31 | name: $name, 32 | image: $image 33 | }) { 34 | id 35 | } 36 | } 37 | ``` 38 | 39 | === "performers.gql" 40 | 41 | ```graphql 42 | mutation PerformerCreate( 43 | $name: String!, 44 | $url: String, 45 | $gender: GenderEnum, 46 | $birthdate: String, 47 | $ethnicity: String, 48 | $country: String, 49 | $eye_color: String, 50 | $height: String, 51 | $measurements: String, 52 | $fake_tits: String, 53 | $career_length: String, 54 | $tattoos: String, 55 | $piercings: String, 56 | $aliases: String, 57 | $twitter: String, 58 | $instagram: String, 59 | $favorite: Boolean, 60 | $image: String) { 61 | performerCreate(input: { 62 | name: $name, 63 | url: $url, 64 | gender: $gender, 65 | birthdate: $birthdate, 66 | ethnicity: $ethnicity, 67 | country: $country, 68 | eye_color: $eye_color, 69 | height: $height, 70 | measurements: $measurements, 71 | fake_tits: $fake_tits, 72 | career_length: $career_length, 73 | tattoos: $tattoos, 74 | piercings: $piercings, 75 | aliases: $aliases, 76 | twitter: $twitter, 77 | instagram: $instagram, 78 | favorite: $favorite, 79 | image: $image } 80 | ) 81 | { id } 82 | } 83 | ``` 84 | 85 | If you have a suggested change, please add it below. 86 | 87 | ## Step 3: Prepare your textfile or spreadsheet into a CSV 88 | 89 | let's say you have a textfile with these performers (just names and eyecolors for a simple example) 90 | If you have a spreadsheet, add a first line with the column headers, you HAVE to provide all fields listed above in the first line, but you don't have to actually have data in them. 91 | 92 | `name,url,gender,birthdate,ethnicity,country,eye_color,height,measurements,fake_tits,career_length,tattoos,piercings,aliases,twitter,instagram,favorite,image` 93 | 94 | then add your data if text, or export as CSV if it's a spreadsheet 95 | (gender is not a string, see documentation in code, and favorite is a boolean, if you want to add those) 96 | 97 | Alice,,,,,,blue 98 | Betty,,,,,,green 99 | Carter,,,,,,brown 100 | 101 | the above lines all go into a file, like performerdata.csv 102 | 103 | 104 | Gender is complicated due to Stash using GenderEnum. 105 | 106 | 107 | For tags, you only need the tag title, and if desired, a url to a image 108 | 109 | If you're unable to get this to work, then **omit** the **favorite** and **image** property from your CSV header, and from the **performers.gql** file. 110 | 111 | ## Step 4 112 | 113 | !!! note 114 | Must use numerical IP instead of localhost. 115 | 116 | Run this CLI command (assumes your files are in current directory and location for gql-interate is in your path) 117 | 118 | `gql-iterate --host http://_yourserverIP:portgoeshere_/graphql --input ./performerdata.csv --query ./performers.gql` 119 | 120 | It will run and add performers, it won't duplicate existing names, so you can run it multiple times if you want to add more names. Or delete something and readd it, if need be. 121 | 122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /docs/guides/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Guides 3 | hide: 4 | - toc 5 | --- 6 | 7 | In this section the community written guides will be published. You can submit your own via [Stash-Docs repository](https://github.com/stashapp/Stash-Docs){target="_blank"}. 8 | 9 | If you find the guide has a typo or is outdated you can submit a pull request to fix it or make an issue on the GitHub. Thank you! -------------------------------------------------------------------------------- /docs/guides/manually-editing-the-stash-sqlite3-database.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Manually editing the Stash sqlite3 database 3 | --- 4 | 5 | ## Location 6 | 7 | The Stash Sqlite3 database file is located at `~/.stash/stash-go.sqlite`. 8 | 9 | Before making changes to the Stash sqlite3 database - **please make a backup first!** 10 | 11 | You can use the `sqlite3` client to directly edit this file. 12 | 13 | ## Opening the database file 14 | 15 | ``` 16 | cd ~/.stash 17 | sqlite3 stash-go.sqlite 18 | ``` 19 | 20 | ## Examples 21 | 22 | ### Deleting all tags 23 | 24 | If you need to delete all tags, you can use the following commands: 25 | 26 | ``` 27 | sqlite> DELETE FROM scenes_tags; 28 | sqlite> DELETE FROM tags; 29 | ``` 30 | 31 | !!! note 32 | This will not work if you have Scene marker tags. -------------------------------------------------------------------------------- /docs/guides/reverse-proxy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Reverse proxy 3 | --- 4 | 5 | The use of a reverse proxy for Stash is possible. 6 | 7 | ## General 8 | 9 | Generally, the following headers will need to be set (check your proxy's documentation for how to configure). 10 | 11 | - Host (http host) 12 | - X-Real-IP 13 | - X-Forwarded-For 14 | - X-Forwarded-Proto 15 | 16 | See [issue 134](https://github.com/stashapp/stash/pull/134){:target="_blank"} for more information. 17 | 18 | ## Using a URL prefix 19 | 20 | Stash also supports running under a URL prefix, in which case the the `X-Forwarded-Prefix` header must also be set. The proxy also needs to remove the prefix from the requested URLs. For example, if you want your homepage to be accessible at `http://example.domain.com/stash`, then you need to set `X-Forwarded-Prefix: /stash`. 21 | 22 | ## Setting External URL 23 | 24 | You can also set the host that will be served by Stash manually by adding an `external_host:` setting in your Stash config.yml and assigning it the publicly accessible hostname, including the `http://` or `https://`. `X-Forwarded-Prefix` will still need to be set if using a prefix. 25 | ``` 26 | external_host: http://example.domain.com 27 | ``` 28 | 29 | ## Server Configuration Examples 30 | 31 | ### Nginx 32 | 33 | ```bash 34 | location / { 35 | proxy_pass http://127.0.0.1:9999; 36 | 37 | proxy_http_version 1.1; 38 | proxy_set_header Upgrade $http_upgrade; 39 | proxy_set_header Connection "upgrade"; 40 | proxy_set_header Host $http_host; 41 | proxy_set_header X-Real-IP $remote_addr; 42 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 43 | proxy_set_header X-Forwarded-Proto $scheme; 44 | proxy_read_timeout 60000s; 45 | } 46 | ``` 47 | 48 | ### Nginx + Docker (Linuxserver Letsencrypt) 49 | 50 | If you are using the linuxserver letencrypt docker you can use create a `stash.subdomain.conf` file in your `proxy-confs` folder and use this as the config: 51 | ```bash 52 | # make sure that your dns has a cname set for stash 53 | 54 | server { 55 | listen 443 ssl; 56 | listen [::]:443 ssl; 57 | 58 | server_name stash.*; 59 | 60 | include /config/nginx/ssl.conf; 61 | 62 | client_max_body_size 0; 63 | 64 | # enable for ldap auth, fill in ldap details in ldap.conf 65 | #include /config/nginx/ldap.conf; 66 | 67 | location / { 68 | # enable the next two lines for http auth 69 | #auth_basic "Restricted"; 70 | #auth_basic_user_file /config/nginx/.htpasswd; 71 | 72 | # enable the next two lines for ldap auth 73 | #auth_request /auth; 74 | #error_page 401 =200 /login; 75 | 76 | include /config/nginx/proxy.conf; 77 | proxy_set_header Upgrade $http_upgrade; 78 | proxy_set_header Connection "upgrade"; 79 | resolver 127.0.0.11 valid=30s; 80 | set $upstream_app stash; 81 | set $upstream_port 9999; 82 | set $upstream_proto http; 83 | proxy_pass $upstream_proto://$upstream_app:$upstream_port; 84 | proxy_set_header Host $http_host; 85 | proxy_read_timeout 60000s; 86 | } 87 | } 88 | ``` 89 | 90 | ### Nginx with prefix 91 | 92 | An example for `nginx` using the prefix `/stash`: 93 | 94 | ```bash 95 | location /stash/ { 96 | # Notice the trailing slash - this causes nginx to remove the /stash prefix from requested URLs 97 | proxy_pass http://192.168.0.1:9999/; 98 | 99 | proxy_http_version 1.1; 100 | proxy_set_header Upgrade $http_upgrade; 101 | proxy_set_header Connection "Upgrade"; 102 | proxy_set_header Host $http_host; 103 | proxy_set_header X-Real-IP $remote_addr; 104 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 105 | proxy_set_header X-Forwarded-Port $server_port; 106 | proxy_set_header X-Forwarded-Proto $scheme; 107 | proxy_set_header X-Forwarded-Prefix /stash; 108 | proxy_read_timeout 60000s; 109 | } 110 | ``` 111 | 112 | ### Nginx with external_host 113 | 114 | Another example for `nginx`: 115 | 116 | In this case we are using `stash.home` as our domain and `192.168.0.1` is stash's ip so edit acccordingly. 117 | 118 | The `external_host` configuration option should also be set, in this case `external_host: http://stash.home`. Refer to [external_host](https://github.com/stashapp/stash/pull/369){:target="_blank"} for more details. 119 | 120 | ```bash 121 | server { 122 | listen 80; 123 | listen [::]:80; 124 | 125 | server_name stash.home; 126 | client_max_body_size 0; 127 | 128 | location / { 129 | proxy_pass http://192.168.0.1:9999; 130 | 131 | proxy_http_version 1.1; 132 | proxy_set_header Upgrade $http_upgrade; 133 | proxy_set_header Connection "Upgrade"; 134 | proxy_set_header Host $http_host; 135 | proxy_set_header X-Real-IP $remote_addr; 136 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 137 | proxy_set_header X-Forwarded-Port $server_port; 138 | proxy_set_header X-Forwarded-Proto $scheme; 139 | } 140 | } 141 | ``` 142 | 143 | ### Apache 144 | 145 | ``` 146 | # if using apache < 2.4.47, remove upgrade=websocket 147 | ProxyPass "/stash" "http://127.0.0.1:9999" upgrade=websocket 148 | ProxyPassReverse "/stash" "http://127.0.0.1:9999" 149 | RequestHeader setIfEmpty X-Forwarded-Prefix "/stash" 150 | ProxyPreserveHost on 151 | 152 | # for name resolution 153 | ServerAdmin admin@example.com 154 | ServerName example.com 155 | ServerAlias stash.example.com 156 | 157 | # to enable websockets for apache < 2.4.47 158 | #RewriteEngine on 159 | #RewriteCond %{HTTP:Upgrade} websocket [NC] 160 | #RewriteCond %{HTTP:Connection} upgrade [NC] 161 | #RewriteRule ^/?stash/(.*) "ws://127.0.0.1:9999/$1" [P,L] 162 | 163 | # to add SSL 164 | SSLEngine on 165 | SSLCertificateFile /path/to/cert.pem 166 | SSLCertificateKeyFile /path/to/cert.key 167 | ``` 168 | 169 | #### Prerequisites 170 | 171 | ``` 172 | sudo a2enmod proxy 173 | sudo a2enmod proxy_http 174 | sudo a2enmod proxy_balancer 175 | sudo a2enmod lbmethod_byrequests 176 | 177 | sudo a2enmod rewrite 178 | sudo a2enmod headers 179 | 180 | # for SSL 181 | sudo a2enmod ssl 182 | ``` 183 | 184 | ### Caddy v2 185 | 186 | ``` 187 | stash.example.com { 188 | reverse_proxy 127.0.0.1:9999 { 189 | header_up Host {host} 190 | header_up X-Real-IP {remote_host} 191 | header_up X-Forwarded-Port {server_port} 192 | } 193 | } 194 | ``` 195 | 196 | The `external_host` configuration option should also be set, in this case `external_host: http://stash.home`. Refer to [external_host](https://github.com/stashapp/stash/pull/369){:target="_blank"} for more details. 197 | 198 | ## Troubleshooting 199 | 200 | ### 504 Errors 201 | 202 | - In some cases with big database files you might encounter `504` errors during stash db migration due to timeout. Adjusting the `proxy_read_timeout` value ( `proxy.conf` file in Letencrypt/Swag docker container) 203 | 204 | ### 422 Errors 205 | 206 | - In order for the websocket to work, you may need to also add these lines to your server block (`proxy.conf` file in the Letencrypt Unraid docker container for instance) as mentioned [here](https://github.com/stashapp/stash/issues/532){:target="_blank"} should fix the issue. 207 | 208 | ```bash 209 | proxy_http_version 1.1; 210 | proxy_set_header Upgrade $http_upgrade; 211 | proxy_set_header Connection "upgrade"; 212 | ``` 213 | 214 | ## Cloudflare Tunnel 215 | 216 | Cloudflare Tunnels are not recommended since they throttle non-HTML traffic (which video falls under). 217 | 218 | See [Cloudflare blog post](https://blog.cloudflare.com/updated-tos/){:target="_blank"} for more details. -------------------------------------------------------------------------------- /docs/guides/run-cdp-on-truenas-scale.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Run CDP on TrueNAS Scale 3 | hide: 4 | - toc 5 | --- 6 | 7 | !!! info 8 | Written by [WiiGe](https://github.com/WiiGe){:target="_blank"}. Originally posted on stashapp/stash discussions[^1]. 9 | 10 | A way to use CDP scraper on TrueNAS Scale and install chromedp/headless-shell on TrueNAS Scale. 11 | 12 | People using stash-app on TrueNAS Scale like me may face the problem that no supported CDP app by truecharts or truenas , and now I found a way to properly run [chromedp/headless-shell](https://github.com/chromedp/docker-headless-shell){:target="_blank"}. 13 | 14 | This can be done by custom-app. 15 | 16 | ![image](../assets/guides/run-cdp-on-truenas-scale/1.png){ width=300 align=center } 17 | 18 | According to [docker hub page of chromedp/headless-shell](https://hub.docker.com/r/chromedp/headless-shell/){:target="_blank"}, we start container with `docker run -d -p 9222:9222 --rm --name headless-shell --shm-size 2G chromedp/headless-shell`, but this's not enough for TrueNAS Scale which run everything with K3s. 19 | 20 | In order to run a docker image on K3s, we need to warp docker image with [custom-app](https://truecharts.org/charts/stable/custom-app/){:target="_blank"}, fill the Container Repository with `chromedp/headless-shell` and Container Tag with `latest` so that TrueNAS can pull the image for you. 21 | 22 | ![image](../assets/guides/run-cdp-on-truenas-scale/2.png){ width=300 align=center } 23 | 24 | As for the docker args `docker run -d -p 9222:9222 --rm --name headless-shell --shm-size 2G chromedp/headless-shell`, we need to translate the args and env parameter into custom-app configuration. Under the Workload Settings section of custom-app configuration page, there will be a list of Extra Args, we put `--name headless-shell --shm-size 2G` here in custom-app way. 25 | 26 | ![image](../assets/guides/run-cdp-on-truenas-scale/3.png){ width=200 align=center } 27 | 28 | But due to [this issue](https://github.com/Zenika/alpine-chrome/issues/109#issuecomment-1998061550){:target="_blank"}, K3s will report an error of zygote: `ERROR:zygote_host_impl_linux.cc(262)] Failed to adjust OOM score of renderer with pid 28: Permission denied (13)`, solution is simple - just offer extra args to disable it :`--headless --disable-gpu --no-sandbox --no-zygote --disable-software-rasterizer --disable-dev-shm-usage`. 29 | 30 | `--remote-debugging-address=0.0.0.0 --remote-debugging-port=9222` is not needed because we will set port and ip on Networking and Services section for LoadBalancer (I am using 192.168.1.45 and 9222, change it for your own scenario). 31 | 32 | The Networking section and the final Extra Args page should be like this: 33 | 34 | ![image](../assets/guides/run-cdp-on-truenas-scale/4.png){ width=200 align=center } 35 | ![image](../assets/guides/run-cdp-on-truenas-scale/5.png){ width=200 align=center } 36 | 37 | and click Install button then your headless-shell will be good to go. 38 | 39 | The last step: just fill stash's CDP setting with `http://192.168.1.45:9222/json/version`(still, change ip:port for your own scenario), and now cdp should be running for you. 40 | 41 | An extra note is Ingress section of custom-app, you may want to use chromedp/headless-shell remotely (e.g. accessing cdp by https://cdp.example.com/json/version), you need to modify the header of request with SetHeader function, see [Host header is specified and is not an IP address or localhost](https://github.com/chromedp/chromedp/issues/505){:target="_blank"}. Obviously stash scraper do not support such operation, write your own scraper in this circumstances. 42 | 43 | I just put the info I found together and share here, hope this page help more people who try to use CDP scraper on K3s-based OS. 44 | 45 | [^1]: [https://github.com/stashapp/stash/discussions/4719](https://github.com/stashapp/stash/discussions/4719){target=_blank} -------------------------------------------------------------------------------- /docs/guides/scraping-metadata-behind-login.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scraping metadata behind login 3 | hide: 4 | - toc 5 | --- 6 | 7 | A regular scraper can only scrape information from webpages that are open to the public access. If you want to scrape a webpage that requires login or behind a paywall, you need to use the "Visible CDP" technique. 8 | 9 | Normal CDP scraping will launch a headless chrome browser, which will not show up for any user interactions. "Visible CDP" turns the "headless chrome" into a "visible" instance. 10 | 11 | 1. Prepare your scraper's .yml file and make sure it's valid and working. Your scraper should have the following setting inside: 12 | ```yaml 13 | driver: 14 | useCDP: true 15 | ``` 16 | 2. Run a command console. Go to the Chrome's binary directory and run `chrome.exe --remote-debugging-port=9222`. This will launch a special Chrome instance that Stash Scrapers can control later on. 17 | 3. In Stash, make sure that the **Settings** > **Metadata Providers** > **Scraping** > **Chrome CDP Path** is set to `http://localhost:9222/json/version`. 18 | 4. Use the special Chrome instance you launched earlier, go to the webpage you want to scrape, type in your user/pass or pass any other human tests, until you see the page with desired content. 19 | 5. Paste the webpage's URL in your Stash scene and start scraping. It should get the information correctly. -------------------------------------------------------------------------------- /docs/guides/scraping-scenes-via-stash-box.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scraping scenes via stash-box 3 | --- 4 | 5 | ## What is stash-box? 6 | 7 | [stash-box](https://github.com/stashapp/stash-box){target="_blank"} is an open-source video indexing and metadata API server for porn developed by Stash team. It provides a crowdsourced database of metadata for adult performers, studios and scenes. 8 | 9 | Stash has several ways to scrape from stash-box instances. From automatic to manual. Each has its own advantages and disadvantages. 10 | 11 | - [Tagger](/guides/scraping-scenes-via-stash-box/#tagger) (recommended) - partially automatic, great accuracy 12 | - [Identify](/guides/scraping-scenes-via-stash-box/#identify) - fully automatic, mediocre accuracy 13 | - [Scrape with...](/guides/scraping-scenes-via-stash-box/#scrape-with) - fully manual, great accuracy 14 | 15 | ## Prerequisites 16 | 17 | ### Enable perceptual hashes (pHash) 18 | 19 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**. 20 | 1. Under Library header you will find configuration options for Scan task and Generate task. 21 | 1. Enable **Generate perceptual hashes** under Scan header. 22 | 1. Enable **Perceptual hashes** under Generate header. 23 | 24 | Scan task and its options are applied when the content is being added to the database the first time. 25 | 26 | Generate task and its options are applied when you want to generate additional things for content that is already in your database. 27 | 28 | ### Configure stash-box endpoint 29 | 30 | !!! info "Known stash-box instances" 31 | A list of public stash-box instances is available [here](/metadata-sources/stash-box-instances). 32 | 33 | 1. Go to :fontawesome-solid-gear: **Settings** > **Metadata Providers**. 34 | 1. Under Stash-box Endpoints header click **Add** and include the details of the stash-box instance you want to add. 35 | 1. Click **Test Credentials** to make sure everything is correct. 36 | 37 | ## Tagger 38 | 39 | Recommended to people that value accuracy the most. It can automatically go through scenes and match them based on perceptual hash, but object creation and verification is left to you and nothing is saved until you click **Save**. 40 | 41 | 1. Open :fontawesome-solid-video: **Scenes** page. 42 | 2. Click on :fontawesome-solid-table-cells-large::fontawesome-solid-chevron-down: display mode selector in the toolbar. 43 | 3. Set it to :fontawesome-solid-tags: **Tagger**. 44 | 4. Under **Source** select a stash-box instance you want to use. 45 | 5. Opposite the **Source** click on the :fontawesome-solid-gear: to open configuration. 46 | 1. You can enable **Show male performers** if you want them to be scraped for you locally. 47 | 2. You can disable **Set scene cover image** if you prefer to keep your existing cover. 48 | 3. You can enable **Set tags** if you want to be shown all the crowdsourced tags the scene has on the stash-box instance. 49 | 4. You can enable **Mark as Organized on save** which will apply :fontawesome-solid-box: Organized flag. 50 | 51 | ??? info "Organized flag" 52 | Organized flag has a technical purpose in addition to being able to be used in a filter. All objects marked as organized will be ignored by automatic tasks like Identify and Auto Tag. 53 | 54 | 6. Click on **Scrape All** and look through the results. Add missing objects and click **Save**. 55 | 1. If you got returned **No results found**, you can try using query method. You can enter title, performer, release date, or studio and click **Search**. Keep in mind that sometimes fewer details, are better. 56 | 2. If you know the scene exists on that stash-box instance, but it wasn't found, you can input the exact StashID in the Query field, click **Search** and it will return that exact scene. 57 | 7. For scenes that you clicked **Save** on, you can submit your file fingerprints (hashes) back to the instance to help improve the accuracy. Scroll to the top and click **Submit x fingerprints**. 58 | 59 | ??? info "Fingerprints" 60 | All fingerprints are tied to the user API key, no other information is sent to the stash-box instance. Privacy is paramount. 61 | 62 | ## Identify 63 | 64 | For people that want fully automatic option and don't mind some potential inaccuracies. The task will automatically go through all scenes and match them based on perceptual hash. You can also create all missing objects automatically. No manual verification is possible. 65 | 66 | !!! warning 67 | Task is irreversible, so it's a good idea to [make a backup](/guides/backup-and-restore-database/) before running it. 68 | 69 | 1. Go to :fontawesome-solid-gear: **Settings** and enable **Advanced Mode**. 70 | 1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**. 71 | 1. Under Library header click on **Identify...**. 72 | 1. Under **Sources** select a stash-box instance(s) you want to match against. 73 | 74 | !!! info 75 | Identify task iterates through sources until it finds a match, once it finds a match, it will ignore all other sources for that scene. 76 | 77 | 1. Configure default options that will apply to all sources (they can be overwritten for individual sources by clicking :fontawesome-solid-gear: next to each source). 78 | 1. You can disable **Show male performers** if you don't want them to be scraped for you locally. 79 | 1. You can disable **Set scene cover image** if you prefer to keep your existing cover. 80 | 1. You can enable **Set organized flag** which will apply :fontawesome-solid-box: Organized flag. 81 | 1. You can disable **Skip matches that have more than one result** if you don't mind potentially getting more mismatched results. If enabled, it can also be tagged with a custom tag to let you know which scenes were skipped. 82 | 1. You can disable **Skip single name performers with no disambiguation** if you don't mind potentially getting more mismatched results. If enabled, it can also be tagged with a custom tag to let you know which scenes were skipped. 83 | 1. Click **Set as default** to save your configuration. 84 | 1. Configure default field options that will apply to all sources (they can be overwritten for individual sources by clicking :fontawesome-solid-gear: next to each source). 85 | 1. Click **Set as default** to save your configuration. 86 | 1. Click **Identify** to start the task. 87 | 88 | ## Scrape with... 89 | 90 | In addition to previous methods, there is also a completely manual way to match scenes individually. 91 | 92 | 1. Go to a scene you want to match. 93 | 1. Click on the **Edit** tab. 94 | 1. Click **Scrape with...** and select a stash-box instance you want to match against. 95 | 1. Check the return results, create missing objects and click **Apply**. 96 | 1. Click **Save**. -------------------------------------------------------------------------------- /docs/guides/troubleshooting-video-playback.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Troubleshooting video playback 3 | --- 4 | 5 | ## Inspecting files 6 | 7 | You can use the ffprobe command to gather useful information about a video file: 8 | 9 | ```shell 10 | ffprobe -show_format -show_streams big_buck_bunny.mkv 11 | ``` 12 | 13 | This can be useful for example, when filing bug reports, or discussing in chat. 14 | 15 | ## Remuxing files 16 | 17 | Another good test, is to see if remuxing the file into a new video file helps: 18 | 19 | ```shell 20 | ffmpeg -i big_buck_bunny.mkv -c:v copy -c:a copy remuxed_file.mkv 21 | ``` 22 | 23 | ## Extracting a sample of a video 24 | 25 | If you are asked for a sample of a video (e.g. for developers to analyse), you can use 26 | 27 | ```shell 28 | ffmpeg -ss 120 -i big_buck_bunny.mkv -t 30 -c:v copy -c:a copy 30_second_sample.mkv 29 | ``` 30 | 31 | The above command starts at the 120-second marker, and takes a 30-second sample of the video file. -------------------------------------------------------------------------------- /docs/in-app-manual/browsing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Browsing 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Browsing.md" -------------------------------------------------------------------------------- /docs/in-app-manual/captions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Captions 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Captions.md" -------------------------------------------------------------------------------- /docs/in-app-manual/configuration.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Configuration 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Configuration.md" -------------------------------------------------------------------------------- /docs/in-app-manual/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ways to contribute 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Contributing.md" -------------------------------------------------------------------------------- /docs/in-app-manual/deduplication.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dupe checker 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Deduplication.md" -------------------------------------------------------------------------------- /docs/in-app-manual/images.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Images and galleries 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Images.md" -------------------------------------------------------------------------------- /docs/in-app-manual/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: In-app manual 3 | hide: 4 | - toc 5 | --- 6 | 7 | !!! info 8 | Stash internal help manual, mirrored from [stashapp/stash/ui/v2.5/src/docs/en/Manual](https://github.com/stashapp/stash/tree/master/ui/v2.5/src/docs/en/Manual){:target="_blank"}. 9 | 10 | Internal links will be broken as a result, but will work correctly when browsing the :fontawesome-solid-circle-question: **Help** section inside Stash. -------------------------------------------------------------------------------- /docs/in-app-manual/interactive.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Interactivity 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Interactive.md" -------------------------------------------------------------------------------- /docs/in-app-manual/interface.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Interface options 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Interface.md" -------------------------------------------------------------------------------- /docs/in-app-manual/introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Introduction.md" -------------------------------------------------------------------------------- /docs/in-app-manual/keyboardshortcuts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Keyboard shortcuts 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md" -------------------------------------------------------------------------------- /docs/in-app-manual/plugins/embeddedplugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Embedded plugins 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md" -------------------------------------------------------------------------------- /docs/in-app-manual/plugins/externalplugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: External plugins 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/ExternalPlugins.md" -------------------------------------------------------------------------------- /docs/in-app-manual/plugins/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Plugins.md" -------------------------------------------------------------------------------- /docs/in-app-manual/plugins/uipluginapi.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: UI plugin API 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/UIPluginApi.md" -------------------------------------------------------------------------------- /docs/in-app-manual/scraping/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Metadata scraping 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Scraping.md" -------------------------------------------------------------------------------- /docs/in-app-manual/scraping/scraperdevelopment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contributing scrapers 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tagger.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scene tagger 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Tagger.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tasks/autotagging.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Auto tagging 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/AutoTagging.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tasks/identify.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Identify 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Identify.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tasks/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tasks 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Tasks.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tasks/jsonspec.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Import/export JSON specification 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/JSONSpec.md" -------------------------------------------------------------------------------- /docs/in-app-manual/tasks/scenefilenameparser.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scene filename parser 3 | --- 4 | 5 | --8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md" -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | hide: 4 | - navigation 5 | - toc 6 | --- 7 | 8 | [![Weblate project translated](https://img.shields.io/weblate/progress/stash?server=https://translate.codeberg.org&style=for-the-badge&logo=weblate)](https://translate.codeberg.org/projects/stash/stash){:target="_blank"} 9 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/stashapp?logo=github&style=for-the-badge)](https://github.com/sponsors/stashapp){:target="_blank"} 10 | [![Open Collective backers](https://img.shields.io/opencollective/backers/stashapp?logo=opencollective&style=for-the-badge)](https://opencollective.com/stashapp){:target="_blank"} 11 | [![Discord](https://img.shields.io/discord/559159668438728723.svg?logo=discord&style=for-the-badge)](https://discord.gg/2TsNFKt){:target="_blank"} 12 | [![GitHub release (latest by date)](https://img.shields.io/github/v/release/stashapp/stash?logo=github&style=for-the-badge)](https://github.com/stashapp/stash/releases/latest){:target="_blank"} 13 | 14 | [Stash](https://stashapp.cc){:target="_blank"} is a web application written in Go for serving and organizing your porn collection. It is self-hosted and released under AGPL-3.0 license. Stash currently supports Windows, macOS, Linux, FreeBSD and Docker. 15 | 16 | ## About Stash 17 | 18 | - 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. 19 | - Stash supports a wide variety of both video and image formats. 20 | - You can tag videos and find them later. 21 | - Stash provides statistics about performers, tags, studios and more. 22 | 23 | You can learn more about the software generally via the [README](https://github.com/stashapp/stash/blob/master/README.md){:target="_blank"} on the official repository or via the [Stash official website](https://stashapp.cc){:target="_blank"}. 24 | 25 | ## Get started 26 | 27 | To get started go to [Installation](/installation) and download the latest version for your operating system. 28 | 29 | ## Support 30 | 31 | 32 |
33 | 34 | - :fontawesome-brands-discourse: __Community forum__ _(recommended)_ 35 | 36 | --- 37 | 38 | Primary place for community support, feature requests and discussions. 39 | 40 | [:octicons-arrow-right-24: Browse forum](https://discourse.stashapp.cc){:target="_blank"} 41 | 42 | - :fontawesome-brands-discord: __Discord__ 43 | 44 | --- 45 | 46 | Real-time chat and community support. 47 | 48 | [:octicons-arrow-right-24: Join Discord](https://discord.gg/2TsNFKt){:target="_blank"} 49 | 50 | - :simple-lemmy: __Lemmy__ 51 | 52 | --- 53 | 54 | Community discussions. 55 | 56 | [:octicons-arrow-right-24: Visit Lemmy](https://discuss.online/c/stashapp){:target="_blank"} 57 | 58 | 59 |
60 | 61 | ## Contribute 62 | 63 | - **Spread the word**: the more people that know about Stash, the more people can help with the tasks below. 64 | - **Help other users:** we got new users coming in all the time that need assistance. Stopping in help channels/rooms now and again to assist can save developers some time. 65 | - **Write documentation**: help to improve the Stash documentation. 66 | - **Contribute to the website**: the website could definitely use some attention. 67 | - **Find bugs**: test the software for bugs and create GitHub issues for them to help developers confirm and fix them faster. 68 | - **Write scrapers**: if there is a site that isn't being scraped properly or at all, head on over to scrapers channel/room and see if you can't help scrape some metadata from a site. 69 | - **Populate StashDB**: StashDB is our canonical database where we store metadata and hashes. You can submit info from your Stash instance to the database or just help to improve the already existing information. 70 | - **Support financially**: Stash development runs on donations. Donations are collected through [OpenCollective](https://opencollective.com/stashapp){:target="_blank"}. You can do anonymous one-time donations or recurring donations. 71 | - **Sponsor on GitHub**: You can sponsor the [stashapp organization on GitHub](https://github.com/sponsors/stashapp){:target="_blank"} via one-time or monthly donation. 72 | -------------------------------------------------------------------------------- /docs/installation/docker.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Docker 3 | icon: fontawesome/brands/docker 4 | --- 5 | 6 | !!! info 7 | Before starting make sure your system has Docker installed. You can follow the instructions on how to install Docker from [Docker Docs](https://docs.docker.com/engine/install/){:target="_blank"}. 8 | 9 | !!! info 10 | Official Stash image is located at [`stashapp/stash`](https://hub.docker.com/r/stashapp/stash){:target="_blank"}. 11 | 12 | !!! note 13 | Stash README on Docker installation is available [here](https://github.com/stashapp/stash/blob/master/docker/production/README.md){:target="_blank"}. 14 | 15 | ## Using Docker Compose 16 | 17 | ### Install 18 | 19 | 1. Download and save `docker-compose.yml` file from [our GitHub](https://raw.githubusercontent.com/stashapp/stash/master/docker/production/docker-compose.yml){:target="_blank"}. 20 | - Modify the `docker-compose.yml` file to your preferences. 21 | 2. Open terminal in the same directory as saved `docker-compose.yml` or `cd` to that directory. 22 | 3. Run `docker-compose up -d`. 23 | 4. Installing this way will bound Stash to port 9999. 24 | 5. If everything went well Stash will be available at [http://localhost:9999](http://localhost:9999){:target="_blank"} locally or on your network [http://YOUR-LOCAL-IP:9999](http://YOUR-LOCAL-IP:9999){:target="_blank"}. 25 | 26 | ### Update 27 | 28 | ??? warning 29 | If you are upgrading from older than v0.20 version make sure to re-download the `docker-compose.yml` file from [our GitHub](https://raw.githubusercontent.com/stashapp/stash/master/docker/production/docker-compose.yml){:target="_blank"} as new volume was added. Alternatively you can edit the `docker-compose.yml` to manually include new volume `- ./blobs:/blobs`. 30 | 31 | 1. Go to the directory where `docker-compose.yml` is saved. 32 | 2. Run `docker-compose pull`. Pulls the new image. 33 | 3. Run `docker-compose down`. Removes old container. 34 | 4. Run `docker-compose up -d`. Creates and starts the new container. 35 | - Make sure the mount points and settings are the same as in previous `docker-compose.yml` file. 36 | 37 | ### Remove 38 | 39 | 1. Go to the directory where `docker-compose.yml` is saved. 40 | 2. Run `docker container kill`. Force stops the container. 41 | 3. Run `docker container rm`. Removes the container. 42 | 3. Delete `docker-compose.yml` file. 43 | -------------------------------------------------------------------------------- /docs/installation/freenas-truenas.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: FreeNAS/TrueNAS 3 | icon: simple/truenas 4 | --- 5 | 6 | ## TrueNAS Scale 7 | 8 | !!! info 9 | The following step by step was tested using TrueNAS Scale Cobia (23.10.1.3). 10 | 11 | ### Installation 12 | 13 | To install the stashapp, we will use the TrueCharts app database. To install, we'll follow the official documentation at https://truecharts.org/manual/SCALE/guides/getting-started/ 14 | 15 | 1. Go to Apps page from the top level SCALE menu 16 | 2. Click Discover Apps button on the Apps page 17 | 3. Click Manage Catalogs link on the Discover Apps page 18 | 4. Click Add Catalog 19 | 5. After reading the iXsystems notice, click Continue and enter the required information: Name: truecharts Repository: https://github.com/truecharts/catalog Preferred Trains: enterprise, stable and operators (type each one manually) Branch: main 20 | 6. Click Save and allow SCALE to refresh its catalog with TrueCharts (this may take a few minutes) 21 | 22 | After the update is complete, use the search bar to search for "stash". When found, click Install. 23 | 24 | ### Options 25 | 26 | The installation window will contain several customizable options, but the most important one is the storage option. Search for "Additional App Storage" on the page and click "Add". 27 | 28 | In "Type of Storage", select "Host Path" if the desired folder is a Dataset. 29 | "Host Path" should be where your content will be. 30 | "Mount Path" is the name that appears in the stash for the selection. You can put anything here, like /stash-content for example. 31 | After that, click Install. 32 | 33 | Installation will take a few minutes. After the stash appears as "Running", click "Open" on the right and continue with the stash configuration. 34 | When entering the folder that contains its contents, remember to search for the same name you entered previously. In the case of this guide, the name was /stash-content. 35 | 36 | ## TrueNAS Core 37 | 38 | !!! info 39 | We are now offering pre-compiled FreeBSD binary. You can grab it from [release page](https://github.com/stashapp/stash/releases/latest){target="_blank"}. 40 | 41 | !!! warning 42 | The install guide below was reported as outdated. 43 | 44 | ### Caveats and assumptions 45 | 46 | - The method documented here has only been given cursory testing, so there may be compatibility problems. 47 | - This method assumes that Stash will be run within a previously created iocage jail - the process to create and configure the jail is not included here. 48 | - If the jail is in NAT mode, ensure that port 9999 is forwarded to your TrueNAS host. 49 | - The alternative to this method is to compile from source, which is a more involved process and not documented here 50 | 51 | ### Linux compatibility 52 | 53 | In order for the `stash-linux` binary to work in a FreeBSD system, Linux compatibility must be enabled both in the system and the jail. To enable Linux compatibility: 54 | 55 | 1. navigate to `System -> Tunables` in the TrueNAS Web UI 56 | 2. click `Add` and enter the following: 57 | - Variable: `linux_enable` 58 | - Value: `YES` 59 | - Type: `rc.conf` 60 | 3. Click submit. 61 | 4. In a shell in your iocage jail, edit `/etc/rc.conf` to add: 62 | ``` 63 | enable_linux="YES" 64 | ``` 65 | 5. Reboot the system. 66 | 67 | ### Install ffmpeg/ffprobe 68 | 69 | Go into your iocage jail and install `ffmpeg` 70 | ``` 71 | pkg install ffmpeg 72 | ``` 73 | 74 | ### Create user and group 75 | 76 | It is recommended to not run services as root. Adjust this step to your system. in this example the user `stash` will be created and set to run the service. 77 | 78 | ``` 79 | pw useradd -n stash -u 1069 -d /nonexistent -s /usr/sbin/nologin 80 | ``` 81 | 82 | ### Download stash-linux 83 | 84 | Choose where you would like to store the binary, in this example `/usr/local/bin` is selected as this is where the ffmpeg binaries also reside. Check github for latest release. Also remember to fix permissions and ownership 85 | ``` 86 | cd /usr/local/bin 87 | fetch https://github.com/stashapp/stash/releases/download/v0.22.1/stash-linux 88 | chown stash:stash stash-linux 89 | chmod +x stash-linux 90 | ``` 91 | 92 | ### Create configuration directory 93 | 94 | stash needs a directory for its config file, database and more. Remember to change ownership and permission for the folder you select. The script we will look at in the next step has this path as the default: 95 | ``` 96 | mkdir /usr/local/etc/stash 97 | chown stash:stash /usr/local/etc/stash 98 | ``` 99 | 100 | ### rc.d startup script 101 | 102 | In order for stash to run as a daemon in the background, and also start at boot, you need a rc.d script. 103 | ``` 104 | mkdir /usr/local/etc/rc.d 105 | ee /usr/local/etc/rc.d/stash 106 | ``` 107 | Enter the following in the editor: 108 | ``` 109 | #!/bin/sh 110 | 111 | # PROVIDE: stash 112 | # REQUIRE: DAEMON 113 | # KEYWORD: shutdown 114 | 115 | 116 | . /etc/rc.subr 117 | 118 | name=stash 119 | rcvar=stash_enable 120 | 121 | load_rc_config $name 122 | 123 | : ${stash_enable:="NO"} 124 | : ${stash_user:="stash"} 125 | : ${stash_group:="stash"} 126 | : ${stash_config_dir:="/usr/local/etc/stash/config.yml"} 127 | : ${stash_exec_bin:="/usr/local/bin/stash-linux"} 128 | 129 | #daemon 130 | pidfile="/var/run/${name}.pid" 131 | command="/usr/sbin/daemon" 132 | command_args="-f -P ${pidfile} ${stash_exec_bin} --config ${stash_config_dir}" 133 | start_precmd="stash_precmd" 134 | 135 | stash_precmd() { 136 | install -o ${stash_user} -g ${stash_group} /dev/null ${pidfile} 137 | } 138 | 139 | run_rc_command $1 140 | ``` 141 | To save, press `ESC + Enter` and confirm with `a` and make it executable with `chmod +x /usr/local/etc/rc.d/stash` 142 | 143 | ### Enable the service at boot 144 | 145 | If you want Stash to run when you start the jail, run the following command: 146 | ``` 147 | sysrc "stash_enable=YES" 148 | ``` 149 | And to start the service, reboot the jail or run this command: 150 | ``` 151 | service stash start 152 | ``` 153 | Stash is now available at http://jail-IP:9999/ 154 | 155 | During setup you can leave all the paths for config, database and etc empty to use the default. They will then be stored in the config-folder we created earlier so you can easily backup the folder. Only add your media content. 156 | 157 | ### Optional steps 158 | 159 | You can change the location where stash stores the configuration files and database. Please note that the path needs to end with `config.yml` even if it does not exist yet. Stash will create it for you. Remember to fix ownership and permissions of the location you choose. 160 | ``` 161 | sysrc "stash_config_dir=path/to/location/config.yml" 162 | ``` 163 | 164 | You can change the user and group that Stash runs as. Remember that the config_dir needs to be owned by the user that Stash runs as, aswell as the stash-linux binary 165 | ``` 166 | sysrc "stash_user=usernamegoeshere" 167 | sysrc "stash_group=groupnamegoeshere" 168 | ``` 169 | 170 | Its also possible to change the location of the stash-linux binary 171 | ``` 172 | sysrc "stash_exec_bin=/path/to/stash-linux" 173 | -------------------------------------------------------------------------------- /docs/installation/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | hide: 4 | - toc 5 | --- 6 | 7 | Stash offers native binaries for the following platforms: 8 | 9 | - Windows 10 | - macOS 11 | - Linux 12 | - FreeBSD 13 | - Docker 14 | 15 | All official binaries can be downloaded from our GitHub [release page](https://github.com/stashapp/stash/releases){target="_blank"}. Latest version is available [here](https://github.com/stashapp/stash/releases/latest){target="_blank"}. 16 | 17 | Official Docker image is hosted on [Docker Hub](https://hub.docker.com/r/stashapp/stash){target="_blank"}. Latest version can be pulled from `stashapp/stash:latest`. 18 | -------------------------------------------------------------------------------- /docs/installation/linux.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Linux 3 | icon: fontawesome/brands/linux 4 | --- 5 | 6 | !!! info 7 | It is recommended that you install `ffmpeg` from your distribution's package manager. In case you don't, Stash will prompt you to download a copy during setup. 8 | 9 | !!! note 10 | Stash offers different binaries for different architectures. You can find your processor architecture by running a simple command `uname -p` in a terminal. Replace `` in the following tutorial accordingly. 11 | 12 | `stash-linux` = amd64 (x86_64) 13 | `stash-linux-arm32v6` = arm32v6 (armel) 14 | `stash-linux-arm32v7` = arm32v7 (armhf) 15 | `stash-linux-arm64v8` = arm64v8 (arm64) 16 | 17 | ## Install 18 | 19 | 1. Download latest `` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"} depending on your architecture. 20 | 2. Run `./` from the terminal. 21 | - If you have trouble, try running `chmod u+x ` to make the file executable. 22 | 3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 23 | 24 | ## Update 25 | 26 | 1. Stop Stash server. Either by closing the terminal window or by stopping the process from task manager. 27 | 2. Download latest `` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 28 | 3. Delete old `` binary and replace it with the newly downloaded one. 29 | 4. Run `./` from the terminal. 30 | - If you have trouble, try running `chmod u+x ` to make the file executable. 31 | 5. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 32 | 6. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps. 33 | - Automatic backup will be performed before the migration. 34 | - If any issues arise during the migration your database will be automatically restored from the backup. 35 | 7. You should be good to go. 36 | 37 | ## Remove 38 | 39 | 1. Stop Stash server. 40 | 2. Delete `` binary file. 41 | 3. Delete `$HOME/.stash` folder. 42 | -------------------------------------------------------------------------------- /docs/installation/macos.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: macOS 3 | icon: fontawesome/brands/apple 4 | --- 5 | 6 | On macOS, Stash can be run as either a packaged app (`Stash.app`) or as a command-line app (`stash-macos`). Both are universal apps, and will therefore run natively on both Apple silicon and Intel-based Macs. 7 | 8 | ## Packaged app 9 | 10 | !!! note 11 | The packaged app is recommended for most users. 12 | 13 | It supports desktop notifications, displays a menu bar icon, and does not need to be launched from the terminal. 14 | 15 | However, due to app restrictions, it only supports setting up in `$HOME/.stash`. If you would like to use a different folder, then you will need to use the command-line app. 16 | 17 | ### Install 18 | 19 | 1. Download the latest `Stash.app.zip` from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 20 | 2. Open `Stash.app.zip` archive and drag the `Stash` app to your Applications folder. 21 | 3. Open the `Stash` app. 22 | 4. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 23 | 24 | ### Update 25 | 26 | 1. Stop Stash server. Either via icon in the menu bar or by stopping the process from Activity Monitor. 27 | 2. Download latest `Stash.app.zip` from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 28 | 3. Delete old `Stash` app. 29 | 4. Open newly downloaded `Stash.app.zip` archive and drag the `Stash` app to your Applications folder. 30 | 5. Open the `Stash` app. 31 | 6. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 32 | 7. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps. 33 | - Automatic backup will be performed before the migration. 34 | - If any issues arise during the migration your database will be automatically restored from the backup. 35 | 8. You should be good to go. 36 | 37 | ### Remove 38 | 39 | 1. Stop Stash server. 40 | 2. Delete `Stash` app. 41 | 3. Delete `$HOME/.stash`. 42 | 43 | ## Command-line app 44 | 45 | !!! note 46 | The command-line app is only recommended for users who are familiar with the terminal, or for those who do not want to set up in `$HOME/.stash`. 47 | 48 | It does not support desktop notifications and does not display a menu bar icon. It must be launched from the terminal. 49 | 50 | ### Install 51 | 52 | 1. Download latest `stash-macos` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 53 | 2. Run `./stash-macos` from the terminal. 54 | 55 | !!! note "" 56 | If you have trouble, try running `chmod u+x stash-macos` to make the file executable. 57 | 58 | 3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 59 | 60 | ### Update 61 | 62 | 1. Stop Stash server. Either by closing the terminal window or by stopping the process from Activity Monitor. 63 | 2. Download latest `stash-macos` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 64 | 3. Delete old `stash-macos` binary and replace it with the newly downloaded one. 65 | 4. Run `./stash-macos` from the terminal. 66 | 67 | !!! note "" 68 | If you have trouble, try running `chmod u+x stash-macos` to make the file executable. 69 | 70 | 5. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 71 | 6. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps. 72 | - Automatic backup will be performed before the migration. 73 | - If any issues arise during the migration your database will be automatically restored from the backup. 74 | 7. You should be good to go. 75 | 76 | ### Remove 77 | 78 | 1. Stop Stash server. 79 | 2. Delete `stash-macos`. 80 | 3. Delete `$HOME/.stash`. -------------------------------------------------------------------------------- /docs/installation/unraid.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unraid 3 | icon: simple/unraid 4 | --- 5 | 6 | !!! info 7 | Unraid app is maintained by a 3rd party. For Unraid specific support you can go to [support thread](https://forums.unraid.net/topic/90861-support-stash-corneliousjd-repo){:target="_blank"} by CorneliousJD. 8 | 9 | !!! note 10 | For users that want to try the development branch of Stash you can change the repository to `stashapp/stash:development`. 11 | 12 | ## Install 13 | 14 | 1. Open Unraid and go to the `Apps` tab. 15 | 2. Enable apps (if disabled) and search for `Stash`. 16 | - You can modify paths to your preference. 17 | 3. Go to Docker tab and enable autostart for `Stash`. 18 | 19 | ## Optional NVIDIA runtime 20 | 21 | !!! info 22 | `binarygeek119/stash-cuda:latest` repository is not maintained by Stash core team. 23 | 24 | 1. First off you need the unraid Nvidia plugin for this to work. On Unraid go to apps and do a search for `nvidia driver` and install, this will take some time to install. When the dialog is done it is still installing in the background. When it has finshed you will get a popup saying it is safe to reboot now. 25 | 26 | !!! warning 27 | Do not restart Unraid server until the plugin is done installing itself! 28 | 29 | 2. After getting the popup, reboot your server. After it back online you may continue to the next steps. 30 | 3. To begin modifing start by going into edit mode by right click on stash icon on Unraid dashboard or in Docker tab. 31 | 4. In edit mode go to the top and click on basic view to switch to advaced view. 32 | 33 | ![](/assets/beginner-guides/unraid-docker-stash-page.jpg){ width=300 align=center } 34 | ![](/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg){ width=300 align=center } 35 | 36 | ### Container configuration 37 | 38 | Now we can change some thing to have Stash work with a Nvidia GPU. 39 | 40 | 1. Under Repository change the default Repository from `stashapp/stash:development` to `binarygeek119/stash-cuda:latest`. 41 | ![](/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg){ width=300 align=center } 42 | ![](/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg){ width=300 align=center } 43 | 2. Add the following under Extra Parameters: `--runtime=nvidia`. 44 | ![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg){ width=300 align=center } 45 | ![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg){ width=300 align=center } 46 | 3. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`. 47 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg){ width=600 align=center } 48 | 4. Change `path` to `Variable` and add the following: 49 | - `Name:` enter `NVIDIA_DRIVER_CAPABILITIES` 50 | - `Key:` enter `NVIDIA_DRIVER_CAPABILITIES` 51 | - `Value:` enter `all` 52 | and click save. 53 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg){ width=200 align=center } 54 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg){ width=200 align=center } 55 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg){ width=200 align=center } 56 | 5. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`. 57 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg){ width=600 align=center } 58 | 6. Change `path` to `Variable` and add the following: 59 | - `Name:` enter `NVIDIA_VISIBLE_DEVICES` 60 | - `Key:` enter `NVIDIA_VISIBLE_DEVICES` 61 | - `Value:` enter `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx` 62 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg){ width=200 align=center } 63 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg){ width=200 align=center } 64 | ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg){ width=200 align=center } 65 | 66 | #### Locating GPUID 67 | 68 | Where `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx` you must enter your own GPUID. To find it do the folowing: 69 | 70 | - On a new Unraid page click on settings. 71 | - Go down to the bottom and click Nvidia Driver plugin. 72 | - Copy the key and paste it under `Variable` called `Value`. 73 | 74 | ![](/assets/beginner-guides/unraid-gpuid.jpg){ width=600 align=center } 75 | 76 | 1. Click on save. 77 | 2. Now click on apply and let the Docker download the new Nvidia version of Stash. 78 | 3. Enjoy and use as before. -------------------------------------------------------------------------------- /docs/installation/windows.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Windows 3 | icon: fontawesome/brands/windows 4 | --- 5 | 6 | !!! note 7 | Some Windows 11 versions might open Stash via Terminal instead of going to notification area. You can bypass that by running the program as administrator or [use a shortcut to run it via conhost.exe](https://github.com/stashapp/stash/issues/2598){:target="_blank"}. 8 | As a result of running as administrator Stash might fail to detect your Python installtion in PATH, so you need point it the correct way yourself after installation. In :fontawesome-solid-gear: **Settings** > **System** and under **Applications Paths** header set **Python Executable Path**. 9 | 10 | ## Install 11 | 12 | 1. Download latest `stash-win.exe` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 13 | 2. Run the executable (typically `stash-win.exe`). 14 | 15 | !!! note "" 16 | Running the executable might present a security prompt since the binary isn't signed yet. Just click more info and then the `run anyway` button. 17 | 18 | 3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 19 | 4. The program will show an icon in your notification area. You can access some quick links or quit the server from there. 20 | 21 | ## Update 22 | 23 | 1. Stop Stash server. Either via icon in the notification area or by stopping the process from Task Manager. 24 | 2. Download latest `stash-win.exe` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}. 25 | 3. Delete old `stash-win.exe` binary and replace it with the newly downloaded one. 26 | 4. Run the executable (typically `stash-win.exe`). 27 | 28 | !!! note "" 29 | Running the executable might present a security prompt since the binary isn't signed yet. Just click more info and then the `run anyway` button. 30 | 31 | 5. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started. 32 | 6. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps. 33 | - Automatic backup will be performed before the migration. 34 | - If any issues arise during the migration your database will be automatically restored from the backup. 35 | 7. You should be good to go. 36 | 37 | ## Remove 38 | 39 | 1. Stop Stash server. 40 | 2. Delete the `stash-win.exe` binary file. 41 | 3. Delete `%userprofile%/.stash` folder. 42 | -------------------------------------------------------------------------------- /docs/integrations/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Integrations 3 | --- 4 | 5 | !!! info 6 | Integrations are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Integrations are ways to integrate Stash into other programs. 9 | 10 | To install follow the provided install instructions. -------------------------------------------------------------------------------- /docs/integrations/list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Browse integrations 3 | --- 4 | 5 | ??? tip "stash-git-index" 6 | Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing). 7 | 8 | ??? tip "Integration no longer works" 9 | If you found that integration is no longer working you can try contacting the author directly or create an issue on their Git platform. You can also create a GitHub issue on [Stash-Docs](https://github.com/stashapp/Stash-Docs){target=_blank} for it to be removed from the list. 10 | 11 | ### [Jellyfin.Plugin.Stash](https://github.com/DirtyRacer1337/Jellyfin.Plugin.Stash){target=_blank} 12 | 13 | === "Description" 14 | 15 | Pulls data from your Stash using the filename to query on. 16 | 17 | === "Author" 18 | 19 | [DirtyRacer1337](https://github.com/DirtyRacer1337){target=_blank} 20 | 21 | === "Screenshots" 22 | 23 | ### [plugin.video.stash](https://github.com/gitgiggety/plugin.video.stash){target=_blank} 24 | 25 | === "Description" 26 | 27 | plugin.video.stash is an add-on for the Kodi home theater center software to incorporate Stash, an organizer for your porn. 28 | 29 | === "Author" 30 | 31 | [gitgiggety](https://github.com/gitgiggety){target=_blank} 32 | 33 | === "Screenshots" 34 | 35 | ### [StashPlexAgent.bundle](https://github.com/Darklyter/StashPlexAgent.bundle){target=_blank} 36 | 37 | === "Description" 38 | 39 | A very simplistic Plex agent to pull metadata from Stash. 40 | 41 | === "Author" 42 | 43 | [Darklyter](https://github.com/Darklyter){target=_blank} 44 | 45 | === "Screenshots" -------------------------------------------------------------------------------- /docs/metadata-sources/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Metadata sources 3 | --- 4 | 5 | There are several ways to get metadata into Stash. 6 | 7 | You can configure your metadata sources under :fontawesome-solid-gear: **Settings** > **Metadata Providers**. See sections below for more details. 8 | 9 | - [stash-box instances](/metadata-sources/stash-box-instances) - more automatic, crowdsourced metadata 10 | - [Scrapers](/metadata-sources/scrapers) - more individual, can be used for different databases, official studios -------------------------------------------------------------------------------- /docs/metadata-sources/list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Browse scrapers 3 | icon: octicons/link-external-16 4 | --- 5 | -------------------------------------------------------------------------------- /docs/metadata-sources/scrapers.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scrapers 3 | --- 4 | 5 | Scrapers are the way to retrieve information from websites for your scenes/groups/galleries/performers. Using scrapers wisely, you can avoid typing information manually and repetitively. They can help you quickly establish links between groups/scenes and performers/studios, add relative tags, then download covers/posters for easy recognition. It's a great feature to organize your video or image collections. 6 | 7 | ## Managing scrapers 8 | 9 | Scrapers can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Metadata Providers** page. 10 | 11 | Scrapers are installed using the **Available Scrapers** section. The **Community (stable)** source is configured by default. 12 | 13 | Installed plugins can be updated or uninstalled from the **Installed Scrapers** section. 14 | 15 | ### Adding sources 16 | 17 | Anyone can create their own source index for scrapers. To add a new source go to :fontawesome-solid-gear: **Settings** > **Metadata Providers** page and under **Available Scrapers** click **Add Source**. 18 | 19 | ### Installing scrapers manually 20 | 21 | By default, Stash looks for scrapers configurations in the scrapers sub-directory of the directory where the stash `config.yml` is read. This will either be the `%USERPROFILE%\.stash\scrapers` on Windows or `/root/.stash/scrapers` on Unix systems (Mac, Linux, etc.) or the current working directory. 22 | 23 | Scrapers are added by adding configuration yaml files (format: `scraperName.yml`) to the `scrapers` directory. 24 | 25 | Loaded scrapers can be viewed in the :fontawesome-solid-gear: **Settings** > **Metadata Providers** page. After scrapers are added, removed or edited while Stash is running, they can be reloaded by clicking :fontawesome-solid-rotate: **Reload scrapers** button. 26 | 27 | [CommunityScrapers repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"} is the source for community maintained scrapers. 28 | 29 | ## Scraper types 30 | 31 | ### By searching type 32 | 33 | #### Fragment 34 | 35 | This kind of scrapers will fetch the metadata from a website, by using existing data from Stash, like a scene's file name, performer's name...etc. Fragment scrapers will get all the data Stash knows about that scene/performer/gallery, so it's quite flexible when fetching information. 36 | 37 | #### Search by name 38 | 39 | A Search-By-Name scraper will get only "name" input from a scene or performer, then it will search a website with that name, and return a list of results. 40 | 41 | Scrapers includes: Babepedia.yml, FreeonesCommunity.yml, IAFD.yml 42 | 43 | #### Search by URL 44 | 45 | Most scrapers fetch metadata from a given URL, either by using XPath, JSON, or scripts. For this kind of scrapers you need to know the URL for that scene/performer/gallery/group so they can extract information from it. 46 | 47 | Scrapers includes: All other scrapers. 48 | 49 | ### By implementation 50 | 51 | #### XPath and JSON scrapers 52 | 53 | This is the most common type of scrapers, which use either XPath parser to pin-point the information and retrieve them, or send out JSON requests to get the information. xpathScraper and jsonScraper can be mixed in the same .yml file. 54 | 55 | #### CDP scrapers 56 | 57 | This type of scrapers is mostly the same as XPath/JSON scrapers, except it will launch a headless Chrome browser to retrieve the information from websites. It can also get cookies, simulate a mouse click and other actions. These scrapers have `useCDP: true` setting in them. 58 | 59 | #### Python / Ruby scrapers 60 | 61 | This type of scrapers will launch Python, Ruby to retrieve information from websites. Script scrapers are powerful, versatile and cross-platform. So they usually can do much more than regular scrapers. To install this kind of scrapers, you need to copy not only the .yml file, but also all the script files like .py, .rb that associated with it. 62 | 63 | ## More details 64 | 65 | You can view the [detailed information about scrapers here](/in-app-manual/scraping) or [CommunityScrapers README](https://github.com/stashapp/CommunityScrapers/blob/master/README.md){:target="_blank"}. 66 | 67 | ## Create your own 68 | 69 | To create your own scraper, there is [detailed information about that as well](/in-app-manual/scraping/scraperdevelopment). Best way to start is to read the simple ones and understand how xpath works. The [XPath Cheetsheet](https://devhints.io/xpath){:target="_blank"} is quite useful in creating a .yml file. In Firefox you can use xpath search in "Web Developer Tools (F12)". The "search HTML" bar actually accepts xpath searches. You can use it to verify your xpath queries. 70 | 71 | ## Contribution 72 | 73 | The Scraper community always welcome new members. If you create a nice scraper and find it stable and useful, you can share it via [the GitHub repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"}. Create a pull request, and let the mod review your work. The mods are busy, so it will probably take a few days, or a couple of weeks, but it will be a great feeling once your contribution is accepted by the community. 74 | -------------------------------------------------------------------------------- /docs/metadata-sources/stash-box-instances.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: stash-box instances 3 | --- 4 | 5 | ### FansDB 6 | 7 | FansDB is a community-driven metadata database focused on adult content platforms (OnlyFans, Fansly, ManyVids, etc.) where the independent creators are the primary focus. 8 | 9 | [:octicons-link-16: Website](https://fansdb.cc){:target="_blank"} | [:fontawesome-regular-file-lines: Guidelines](https://docs.fansdb.cc){:target="_blank"} | [:simple-discord: Discord](https://discord.gg/dhJaFAgYAj){:target="_blank"} | [:material-api: Endpoint `https://fansdb.cc/graphql`]() | [:fontawesome-solid-unlock-keyhole: Join](https://docs.fansdb.cc/#accessing-fansdb){:target="_blank"} 10 | 11 | ### JAVStash 12 | 13 | JAVStash is a metadata database focused on Japanese Adult Video (JAV) content and their original metadata in Japanese. Primarily driven by automated scrapers. 14 | 15 | [:octicons-link-16: Website](https://javstash.org){:target="_blank"} | [:simple-discord: Discord](https://discord.gg/jq2anJbxDb){:target="_blank"} | [:material-api: Endpoint `https://javstash.org/graphql`]() | [:fontawesome-solid-unlock-keyhole: Join](https://discord.com/channels/1270524250213842975/1271147030496018472){:target="_blank"}[^1] 16 | 17 | ### PMV Stash 18 | 19 | PMV Stash is a community-driven metadata database focused on remixed pornographic art such as Porn Music Videos (PMV), Cock Hero (CH), Hypno Vids, Compilations. 20 | 21 | [:octicons-link-16: Website](https://pmvstash.org){:target="_blank"} | [:fontawesome-regular-file-lines: Guidelines](https://blog.pmvstash.org/guidelines){:target="_blank"} | [:simple-discord: Discord](https://discord.gg/qGbs8kvpVk){:target="_blank"} | [:material-api: Endpoint `https://pmvstash.org/graphql`]() | [:fontawesome-solid-unlock-keyhole: Join](https://blog.pmvstash.org){:target="_blank"} 22 | 23 | ### StashDB 24 | 25 | StashDB is a community-driven metadata database focused on digital scenes of all orientations. 26 | 27 | [:octicons-link-16: Website](https://stashdb.org){:target="_blank"} | [:fontawesome-regular-file-lines: Guidelines](https://guidelines.stashdb.org){:target="_blank"} | [:fontawesome-brands-discourse: Community forum](https://discourse.stahapp.cc){:target="_blank"} | [:simple-discord: Discord](https://discord.com/invite/2TsNFKt){:target="_blank"} | [:material-api: Endpoint `https://stashdb.org/graphql`]() | [:fontawesome-solid-unlock-keyhole: Join](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/accessing-stashdb){:target="_blank"} 28 | 29 | ### ThePornDB[^2] 30 | 31 | ThePornDB is a metadata database focused on digital scenes and movies. Driven by automated scrapers. 32 | 33 | [:octicons-link-16: Website](https://theporndb.net){:target="_blank"} | [:simple-discord: Discord](https://discord.com/invite/XpSGpaB){:target="_blank"} | [:material-api: Endpoint `https://theporndb.net/graphql`]()[^3] | [:fontawesome-solid-unlock-keyhole: Join](https://theporndb.net/tools){:target="_blank"}[^4] 34 | 35 | [^1]: Link leads to a private Discord server. If you are getting that the link is invalid, make sure to join the private Discord server first! 36 | [^2]: Uses proprietary implemetation of stash-box API. 37 | [^3]: Has a different endpoint for movies and JAV. For movies use `https://theporndb.net/graphql?type=Movie`, for JAV use `https://theporndb.net/graphql?type=JAV`. 38 | [^4]: Requires registration to access the site. 39 | -------------------------------------------------------------------------------- /docs/networking/authentication-required-when-accessing-stash-from-the-internet.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Protecting against accidental exposure to the internet 3 | hide: 4 | - navigation 5 | --- 6 | 7 | ## Protecting against accidental exposure to the internet 8 | 9 | Stash data is considered private, and Stash is not designed to be publicly exposed, except to trusted confidants. Stash has a built-in protection against accidentally exposing itself publicly outside of your network. If Stash receives a request from the public internet, and you do not have a password enabled, Stash will reject the request and stop handling requests to protect your privacy. 10 | 11 | This often happens when you use the port-forwarding feature of your router or install Stash on a publicly accessible server, such as a VPS. When you do this, anybody in the world can access your Stash instance, so we enforce a password requirement. If your Stash instance has shutdown due to an insecure configuration, it will not handle requests again until you tell it that you have fixed the problem. After setting up either authentication, firewall, or removing your port forwarding rules, you can edit `.stash/config/config.yml` and remove the key `security_tripwire_accessed_from_public_internet`. 12 | 13 | ### Alternative and safe methods to access your Stash 14 | 15 | You may use several methods to safely access Stash from outside of your home network. In the most basic, you can enable authentication in Stash, and re-enable port forwarding. You can also use a VPN solution that allows you to securely access your home network, such as [Tailscale](https://tailscale.com){:target="_blank"}, [Zerotier](https://zerotier.com){:target="_blank"}, [Wireguard](https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-20-04){:target="_blank"}, or others. 16 | 17 | ### Using an external authentication provider 18 | 19 | If you are an advanced user, and have secured your Stash instance behind an authwall provided by a reverse proxy or hosting solution, you may continue to use that. You simply have to edit `.stash/config/config.yml` and set `dangerous_allow_public_without_auth` to `true`. If you have already tripped the security feature, you will also have to remove the `security_tripwire_accessed_from_public_internet` key in order to allow Stash to serve requests. -------------------------------------------------------------------------------- /docs/plugins/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Plugins 3 | --- 4 | 5 | !!! info 6 | Plugins are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Plugins adds further features that Stash doesn't itself provide. 9 | 10 | ## Managing plugins 11 | 12 | Plugins can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Plugins** page. 13 | 14 | Plugins are installed using the **Available Plugins** section. The **Community (stable)** source is configured by default. 15 | 16 | Installed plugins can be updated or uninstalled from the **Installed Plugins** section. 17 | 18 | ### Adding sources 19 | 20 | Anyone can create their own source index for plugins. To add a new source go to :fontawesome-solid-gear: **Settings** > **Plugins** page and under **Available Plugins** click **Add Source**. 21 | 22 | ### Installing plugins manually 23 | 24 | By default, Stash looks for plugin configurations in the plugins sub-directory of the directory where the stash `config.yml` is read. This will either be the `%USERPROFILE%\.stash\plugins` on Windows or `/root/.stash/plugins` on Unix systems (Mac, Linux, etc.) or the current working directory. 25 | 26 | Plugins are added by adding configuration yaml files (format: `pluginName.yml`) to the `plugins` directory. 27 | 28 | Loaded plugins can be viewed in the :fontawesome-solid-gear: **Settings** > **Plugins** page. After plugins are added, removed or edited while Stash is running, they can be reloaded by clicking :fontawesome-solid-rotate: **Reload plugins** button. -------------------------------------------------------------------------------- /docs/scripts/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Scripts 3 | --- 4 | 5 | !!! info 6 | Scripts are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Scripts are standalone programs that can interact with Stash either through GraphQL queries, custom Javascript or by directly editing Stash database or external files. 9 | 10 | To install a script follow the script's install instructions. -------------------------------------------------------------------------------- /docs/stylesheets/extra.css: -------------------------------------------------------------------------------- 1 | @keyframes heart { 2 | 0%, 40%, 80%, 100% { 3 | transform: scale(1); 4 | } 5 | 20%, 60% { 6 | transform: scale(1.15); 7 | } 8 | } 9 | .heart { 10 | animation: heart 1000ms infinite; 11 | color: #EE0F0F; 12 | } 13 | .md-nav__item svg { 14 | width: 18px !important; 15 | height: 18px !important; 16 | } 17 | /* 18 | .md-grid { 19 | max-width: 81rem; 20 | } 21 | */ 22 | -------------------------------------------------------------------------------- /docs/themes/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Themes 3 | --- 4 | 5 | !!! info 6 | Themes are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Stash supports CSS themes to adjust the look-and-feel of the interface. There are several that have been created by the maintainers and users. 9 | 10 | Themes can be installed either via plugin or as Custom CSS. 11 | 12 | ## Installing via plugin 13 | 14 | Plugins can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Plugins** page. 15 | 16 | Plugins are installed using the **Available Plugins** section. The **Community (stable)** source is configured by default that has several themes. 17 | 18 | Installed plugins can be updated or uninstalled from the **Installed Plugins** section. 19 | 20 | ### Adding sources 21 | 22 | Anyone can create their own source index for plugins. To add a new source go to :fontawesome-solid-gear: **Settings** > **Plugins** page and under **Available Plugins** click **Add Source**. 23 | 24 | ## Installing via Custom CSS 25 | 26 | 1. Find a theme from the list and copy the content of .css file. 27 | 1. In Stash, go to :fontawesome-solid-gear: **Settings** > **Interface** and scroll down to Custom CSS heading. 28 | 1. Make sure **Custom CSS enabled** is checked. 29 | 1. Click on **Edit** under **Custom CSS** and then paste the CSS code into the text box. 30 | 1. You will need to force-reload ++shift+f5++ in order to see the theme. -------------------------------------------------------------------------------- /docs/userscripts/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Userscripts 3 | --- 4 | 5 | !!! info 6 | Userscripts are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Userscripts are programs written in Javascript that modifies web pages to improve browsing with new features, formatting and more. 9 | 10 | ## Install 11 | 12 | To install the userscript you will need a browser extension such as: 13 | 14 | - [Violentmonkey](https://violentmonkey.github.io){:target="_blank"} 15 | - [Tampermonkey](https://www.tampermonkey.net){:target="_blank"} 16 | - [Greasemonkey](https://www.greasespot.net){:target="_blank"} -------------------------------------------------------------------------------- /docs/utilities/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Utilities 3 | --- 4 | 5 | !!! info 6 | Utilities are created by third parties and not officially affiliated or supported by the core Stash team. If you have issues, please reach out to the original creators. 7 | 8 | Utilities are other external applications that utilise or interact with Stash in some way. 9 | 10 | To install follow the utilities install instructions. -------------------------------------------------------------------------------- /docs/utilities/list.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Browse utilities 3 | --- 4 | 5 | ??? tip "stash-git-index" 6 | Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing). 7 | 8 | ??? tip "Utility no longer works" 9 | If you found that utility is no longer working you can try contacting the author directly or create an issue on their Git platform. You can also create a GitHub issue on [Stash-Docs](https://github.com/stashapp/Stash-Docs){target=_blank} for it to be removed from the list. 10 | 11 | ### [clip-mash](https://github.com/soundchaser128/clip-mash){target=_blank} 12 | 13 | === "Description" 14 | 15 | Video editing app that allows you to automate creating compilations from multiple videos. It runs in your browser. It's mostly made for, ahem, adult content, which is why it can connect to Stash and fetch videos and scene markers from there to guide the video creation process. You can also use local files and set the markers in ClipMash itself and then generate a compilation based on that. 16 | 17 | === "Author" 18 | 19 | [soundchaser128](https://github.com/soundchaser128){target=_blank} 20 | 21 | === "Screenshots" 22 | 23 | ### [Stash App for Android TV](https://github.com/damontecres/StashAppAndroidTV){target=_blank} 24 | 25 | === "Description" 26 | 27 | A basic Android TV app for browsing and playing videos from a Stash server. Not all features of Stash are supported, but the basics for browsing, searching, and playing scenes should work. The app is not intended to perform administrative functions such as scanning, scraping, or editing details. 28 | 29 | === "Author" 30 | 31 | [damontecres](https://github.com/damontecres){target=_blank} 32 | 33 | === "Screenshots" 34 | 35 | ![](/assets/add-ons/StashAppAndroidTV-1.png) 36 | ![](/assets/add-ons/StashAppAndroidTV-2.png) 37 | ![](/assets/add-ons/StashAppAndroidTV-3.png) 38 | 39 | ### [stash-compilation-maker](https://github.com/soundchaser128/stash-compilation-maker){target=_blank} 40 | 41 | === "Description" 42 | 43 | Connects to your Stash instance and creates simple compilation videos from scene markers. You select one or more tags, or one or more performers and it will take (currently) the first 15 seconds of video after the marker start and compile all of the markers into one video. 44 | 45 | === "Author" 46 | 47 | [soundchaser128](https://github.com/soundchaser128){target=_blank} 48 | 49 | === "Screenshots" 50 | 51 | ### [stash-qmt](https://github.com/PokerFacowaty/stash-qmt){target=_blank} 52 | 53 | === "Description" 54 | 55 | stash-qmt (quick manual tagger) is a simple GUI tool designed to help with cases of manually tagging multiple similar scenes (manually, as in, with having to actually watch them) in Stash. 56 | 57 | === "Author" 58 | 59 | [PokerFacowaty](https://github.com/PokerFacowaty){target=_blank} 60 | 61 | === "Screenshots" 62 | 63 | ![](/assets/add-ons/stash-qmt-1.png) 64 | ![](/assets/add-ons/stash-qmt-2.png) 65 | 66 | ### [stash-vr-companion](https://github.com/Tweeticoats/stash-vr-companion){target=_blank} 67 | 68 | === "Description" 69 | 70 | Similar to stash-deovr as above but designed as a web app that sits in a docker container next to stash to make it easier to use and add more functionality. 71 | 72 | === "Author" 73 | 74 | [Tweeticoats](https://github.com/Tweeticoats){target=_blank} 75 | 76 | === "Screenshots" 77 | 78 | ### [stash-vr](https://github.com/o-fl0w/stash-vr){target=_blank} 79 | 80 | === "Description" 81 | 82 | Watch your Stash library in VR for that full immersion effect. 83 | 84 | Stash-VR bridges your Stash instance and VR video player allowing you to browse, play and manage your scenes using the video players native VR UI. 85 | 86 | === "Author" 87 | 88 | [o-fl0w](https://github.com/o-fl0w){target=_blank} 89 | 90 | === "Screenshots" 91 | ### [stash-webvr](https://gitlab.com/stish/stash-webvr){target=_blank} 92 | 93 | === "Description" 94 | 95 | WebVR friendly Stash client that displays only videos tagged with "Virtual Reality" tag. 96 | 97 | === "Author" 98 | 99 | [stishadmin](https://gitlab.com/stishadmin){target=_blank} 100 | 101 | === "Screenshots" 102 | 103 | ### [Stash_helper](https://github.com/philpw99/Stash_Helper){target=_blank} 104 | 105 | === "Description" 106 | 107 | Adds some helping features to Stash (Bookmarks, playlist, external player, etc). Windows only. 108 | 109 | === "Author" 110 | 111 | [philpw99](https://github.com/philpw99){target=_blank} 112 | 113 | === "Screenshots" 114 | 115 | ![](/assets/add-ons/Stash_helper-1.png) 116 | 117 | ### [StashBox Performer Bot](https://github.com/S3L3CT3DLoves/StashBots){target=_blank} 118 | 119 | === "Description" 120 | 121 | This program is designed to help automate the creation and updating of Performers on StashBox instances. It is designed to copy Performer info from one StashBox to another, to avoid having to maintain the information in both sources manually. 122 | 123 | === "Author" 124 | 125 | [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank} 126 | 127 | === "Screenshots" 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/favicon.ico -------------------------------------------------------------------------------- /includes/abbreviations.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stashapp/Stash-Docs/03add7840a411fb440ec3b1ee4ada516dfbb6094/includes/abbreviations.md -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Stash-Docs 2 | site_url: https://docs.stashapp.cc 3 | site_description: >- 4 | Stash documentation, guides, plugins and support. 5 | 6 | repo_name: stashapp/Stash-Docs 7 | repo_url: https://github.com/stashapp/Stash-Docs 8 | edit_uri: edit/main/docs/ 9 | 10 | copyright: Copyright © 2017 - 2024 stashapp contributors 11 | 12 | theme: 13 | name: material 14 | logo: assets/images/logo_white.svg 15 | custom_dir: overrides 16 | features: 17 | - header.autohide 18 | - announce.dismiss 19 | - content.action.edit 20 | - content.action.view 21 | - search.highlight 22 | - search.share 23 | - navigation.instant 24 | - navigation.instant.progress 25 | # - content.code.copy 26 | # - content.code.annotate 27 | # - navigation.tracking 28 | - navigation.tabs 29 | # - navigation.tabs.sticky 30 | - navigation.sections 31 | - toc.follow 32 | - navigation.top 33 | # - navigation.footer 34 | - navigation.indexes 35 | - content.tooltips 36 | # - content.tabs.link 37 | - content.code.copy 38 | palette: 39 | # Palette toggle for light mode 40 | - media: "(prefers-color-scheme: light)" 41 | scheme: default 42 | #primary: indigo 43 | #accent: indigo 44 | toggle: 45 | icon: material/brightness-7 46 | name: Switch to dark mode 47 | 48 | # Palette toggle for dark mode 49 | - media: "(prefers-color-scheme: dark)" 50 | scheme: slate 51 | #primary: red 52 | #accent: red 53 | toggle: 54 | icon: material/brightness-4 55 | name: Switch to light mode 56 | favicon: assets/images/favicon.ico 57 | 58 | plugins: 59 | - search 60 | - git-revision-date-localized: 61 | enable_creation_date: true 62 | - git-committers: 63 | repository: stashapp/Stash-Docs 64 | branch: main 65 | enabled: !ENV [CI, false] 66 | - glightbox 67 | - social: 68 | enabled: !ENV [CI, false] 69 | - redirects: 70 | redirect_maps: 71 | 'metadata-sources/list.md': 'https://stashapp.github.io/CommunityScrapers' 72 | 'beginner-guides/exclude-file-configuration.md': 'in-app-manual/configuration.md' 73 | 'add-ons.md': 'plugins/index.md' 74 | 'faq/setup.md': 'https://discourse.stashapp.cc/t/-/1658' 75 | 76 | watch: 77 | - includes 78 | 79 | markdown_extensions: 80 | - attr_list 81 | - md_in_html 82 | - abbr 83 | - admonition 84 | - pymdownx.details 85 | - pymdownx.superfences 86 | - footnotes 87 | - tables 88 | - pymdownx.snippets: 89 | auto_append: 90 | - includes/abbreviations.md 91 | url_download: true 92 | - toc: 93 | permalink: true 94 | - pymdownx.tasklist: 95 | custom_checkbox: true 96 | - pymdownx.tabbed: 97 | alternate_style: true 98 | slugify: !!python/object/apply:pymdownx.slugs.slugify 99 | kwds: 100 | case: lower 101 | - pymdownx.emoji: 102 | emoji_index: !!python/name:material.extensions.emoji.twemoji 103 | emoji_generator: !!python/name:material.extensions.emoji.to_svg 104 | - pymdownx.saneheaders 105 | - pymdownx.keys 106 | #- pymdownx.magiclink: 107 | #repo_url_shortener: true 108 | #repo_url_shorthand: false 109 | #user: stashapp 110 | #repo: Stash-Docs 111 | 112 | nav: 113 | - Home: index.md 114 | - Installation: 115 | - installation/index.md 116 | - Windows: installation/windows.md 117 | - macOS: installation/macos.md 118 | - Linux: installation/linux.md 119 | - Docker: installation/docker.md 120 | - Synology: installation/synology.md 121 | - FreeNAS/TrueNAS: installation/freenas-truenas.md 122 | - Unraid: installation/unraid.md 123 | - Getting started: 124 | - First steps: getting-started/first-steps.md 125 | - In-app manual: 126 | - in-app-manual/index.md 127 | - Introduction: in-app-manual/introduction.md 128 | - Configuration: in-app-manual/configuration.md 129 | - Interface options: in-app-manual/interface.md 130 | - Tasks: 131 | - in-app-manual/tasks/index.md 132 | - Identify: in-app-manual/tasks/identify.md 133 | - Auto tagging: in-app-manual/tasks/autotagging.md 134 | - Scene filename parser: in-app-manual/tasks/scenefilenameparser.md 135 | - Import/export JSON specification: in-app-manual/tasks/jsonspec.md 136 | - Browsing: in-app-manual/browsing.md 137 | - Images and galleries: in-app-manual/images.md 138 | - Metadata scraping: 139 | - in-app-manual/scraping/index.md 140 | - Contributing scrapers: in-app-manual/scraping/scraperdevelopment.md 141 | - Plugins: 142 | - in-app-manual/plugins/index.md 143 | - External plugins: in-app-manual/plugins/externalplugins.md 144 | - Embedded plugins: in-app-manual/plugins/embeddedplugins.md 145 | - UI plugin API: in-app-manual/plugins/uipluginapi.md 146 | - Scene tagger: in-app-manual/tagger.md 147 | - Dupe checker: in-app-manual/deduplication.md 148 | - Interactivity: in-app-manual/interactive.md 149 | - Captions: in-app-manual/captions.md 150 | - Keyboard shortcuts: in-app-manual/keyboardshortcuts.md 151 | - Ways to contribute: in-app-manual/contributing.md 152 | - Guides: 153 | - guides/index.md 154 | - Scraping scenes via stash-box: guides/scraping-scenes-via-stash-box.md 155 | - Backup and restore database: guides/backup-and-restore-database.md 156 | - Reverse proxy: guides/reverse-proxy.md 157 | - Troubleshooting video playback: guides/troubleshooting-video-playback.md 158 | - Run CDP on TrueNAS Scale: guides/run-cdp-on-truenas-scale.md 159 | - Advanced configuration options: guides/advanced-configuration-options.md 160 | - Bulk importing via CSV using gql-iterate: guides/importing-via-csv-using-gql-iterate.md 161 | - Manually editing the Stash sqlite3 database: guides/manually-editing-the-stash-sqlite3-database.md 162 | - Scraping metadata behind login: guides/scraping-metadata-behind-login.md 163 | - Metadata sources: 164 | - metadata-sources/index.md 165 | - stash-box instances: metadata-sources/stash-box-instances.md 166 | - Scrapers: metadata-sources/scrapers.md 167 | - Browse scrapers: metadata-sources/list.md 168 | - Plugins: 169 | - plugins/index.md 170 | - Browse plugins: plugins/list.md 171 | - Themes: 172 | - themes/index.md 173 | - Browse themes: themes/list.md 174 | - Custom CSS snippets: themes/custom-css-snippets.md 175 | - Userscripts: 176 | - userscripts/index.md 177 | - Browse userscripts: userscripts/list.md 178 | - Scripts: 179 | - scripts/index.md 180 | - Browse scripts: scripts/list.md 181 | - Utilities: 182 | - utilities/index.md 183 | - Browse utilities: utilities/list.md 184 | - Integrations: 185 | - integrations/index.md 186 | - Browse integrations: integrations/list.md 187 | - API: api.md 188 | - Community forum: https://discourse.stashapp.cc 189 | - Code of conduct: code-of-conduct.md 190 | 191 | extra: 192 | social: 193 | - icon: simple/opencollective 194 | link: https://opencollective.com/stashapp 195 | - icon: simple/github 196 | link: https://github.com/stashapp 197 | - icon: simple/docker 198 | link: https://hub.docker.com/r/stashapp/stash 199 | - icon: simple/discord 200 | link: https://discord.gg/frQ7qBvB3S 201 | - icon: simple/discourse 202 | link: https://discourse.stashapp.cc 203 | - icon: simple/lemmy 204 | link: https://discuss.online/c/stashapp 205 | 206 | extra_css: 207 | - stylesheets/extra.css -------------------------------------------------------------------------------- /overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block extrahead %} 4 | 5 | {% endblock %} 6 | {% block announce %} 7 | {% include ".icons/fontawesome/solid/heart.svg" %} 8 | Support continued development via 9 | 10 | 11 | {% include ".icons/simple/opencollective.svg" %} 12 | 13 | OpenCollective donation 14 | or 15 | 16 | 17 | {% include ".icons/simple/github.svg" %} 18 | 19 | GitHub sponsorship 20 | {% endblock %} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@types/node": "^22.9.0", 4 | "axios": "^1.7.7", 5 | "ts-node": "^10.9.2", 6 | "typescript": "^5.6.3", 7 | "yaml": "^2.6.0" 8 | }, 9 | "scripts": { 10 | "serve": "mkdocs serve", 11 | "generate": "cd builder && ts-node build.ts", 12 | "copy": "copy builder\\dist\\* docs\\", 13 | "update": "npm run generate && npm run copy" 14 | }, 15 | "licence": "CC-BY-SA-4.0" 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "nodenext", 4 | } 5 | } --------------------------------------------------------------------------------