diff --git a/.github/ISSUE_TEMPLATE/request-for-plugin-to-be-added.md b/.github/ISSUE_TEMPLATE/request-for-plugin-to-be-added.md
deleted file mode 100644
index d64e4dd3..00000000
--- a/.github/ISSUE_TEMPLATE/request-for-plugin-to-be-added.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Request for plugin to be added
-about: Template for plugins to added to the docs
-title: "[Plugin] Plugin name"
-labels: plugin
-assignees: ''
-
----
-
-**Category:** Category of your plugin should be here
-**Plugin:** Name of your plugin should be here
-**Plugin link:** Link to your plugin should be here
-**Description:** Description of your plugin should be here
-**Author:** Your username should be here
-**Author link:** Link to your username should be here
-**Screenshots:** Optional screenshots on how your plugin looks, works, etc. should be here
diff --git a/.github/ISSUE_TEMPLATE/request-for-script-to-be-added.md b/.github/ISSUE_TEMPLATE/request-for-script-to-be-added.md
deleted file mode 100644
index 8cf24bb1..00000000
--- a/.github/ISSUE_TEMPLATE/request-for-script-to-be-added.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Request for script to be added
-about: Template for scripts to added to the docs
-title: "[Script] Script name"
-labels: script
-assignees: ''
-
----
-
-**Category:** Category of your script should be here
-**Script:** Name of your script should be here
-**Script link:** Link to your script should be here
-**Description:** Description of your script should be here
-**Author:** Your username should be here
-**Author link:** Link to your username should be here
-**Screenshots:** Optional screenshots on how your script looks, works, etc. should be here
diff --git a/.github/ISSUE_TEMPLATE/request-for-third-party-integration-to-be-added.md b/.github/ISSUE_TEMPLATE/request-for-third-party-integration-to-be-added.md
deleted file mode 100644
index 0242a000..00000000
--- a/.github/ISSUE_TEMPLATE/request-for-third-party-integration-to-be-added.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Request for third-party integration to be added
-about: Template for third-party integrations to added to the docs
-title: "[Third-party integration] Third-party integration name"
-labels: third-party integration
-assignees: ''
-
----
-
-**Category:** Category of your third-party integration should be here
-**Third-party integration:** Name of your third-party integration should be here
-**Third-party integration link:** Link to your third-party integration should be here
-**Description:** Description of your third-party integration should be here
-**Author:** Your username should be here
-**Author link:** Link to your username should be here
-**Screenshots:** Optional screenshots on how your third-party integration looks, works, etc. should be here
diff --git a/.github/ISSUE_TEMPLATE/request-for-userscript-to-be-added.md b/.github/ISSUE_TEMPLATE/request-for-userscript-to-be-added.md
deleted file mode 100644
index 8ebff7f6..00000000
--- a/.github/ISSUE_TEMPLATE/request-for-userscript-to-be-added.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Request for userscript to be added
-about: Template for userscripts to added to the docs
-title: "[Userscript] Userscript name"
-labels: userscript
-assignees: ''
-
----
-
-**Category:** Category of your userscript should be here
-**Userscript:** Name of your userscript should be here
-**Userscript link:** Link to your userscript should be here
-**Description:** Description of your userscript should be here
-**Author:** Your username should be here
-**Author link:** Link to your username should be here
-**Screenshots:** Optional screenshots on how your userscript looks, works, etc. should be here
diff --git a/.github/ISSUE_TEMPLATE/request-for-utility-to-be-added.md b/.github/ISSUE_TEMPLATE/request-for-utility-to-be-added.md
deleted file mode 100644
index 79645454..00000000
--- a/.github/ISSUE_TEMPLATE/request-for-utility-to-be-added.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-name: Request for utility to be added
-about: Template for utilities to added to the docs
-title: "[Utility] Utility name"
-labels: utility
-assignees: ''
-
----
-
-**Category:** Category of your utility should be here
-**Utility:** Name of your utility should be here
-**Utility link:** Link to your utility should be here
-**Description:** Description of your utility should be here
-**Author:** Your username should be here
-**Author link:** Link to your username should be here
-**Screenshots:** Optional screenshots on how your utility looks, works, etc. should be here
diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml
deleted file mode 100644
index 0acc24c4..00000000
--- a/.github/workflows/jekyll.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-# Sample workflow for building and deploying a Jekyll site to GitHub Pages
-name: Deploy Jekyll with GitHub Pages dependencies preinstalled
-
-on:
- # Runs on pushes targeting the default branch
- push:
- branches: ["main"]
-
- # Allows you to run this workflow manually from the Actions tab
- workflow_dispatch:
-
-# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
-permissions:
- contents: read
- pages: write
- id-token: write
-
-# Allow one concurrent deployment
-concurrency:
- group: "pages"
- cancel-in-progress: true
-
-jobs:
- # Build job
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Setup Pages
- uses: actions/configure-pages@v2
- - name: Build with Jekyll
- uses: actions/jekyll-build-pages@v1
- with:
- source: ./
- destination: ./_site
- - name: Upload artifact
- uses: actions/upload-pages-artifact@v1
-
- # Deployment job
- deploy:
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- needs: build
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v1
diff --git a/.github/workflows/mkdocs-ci.yml b/.github/workflows/mkdocs-ci.yml
new file mode 100644
index 00000000..122d0bae
--- /dev/null
+++ b/.github/workflows/mkdocs-ci.yml
@@ -0,0 +1,39 @@
+name: ci
+on:
+ push:
+ branches:
+ - main
+permissions:
+ contents: write
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Configure Git Credentials
+ run: |
+ git config user.name github-actions[bot]
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
+ - uses: actions/setup-python@v5
+ with:
+ python-version: 3.x
+ - uses: actions/setup-node@v4
+ - run: |
+ npm i
+ npm i -g ts-node
+ cd builder
+ mkdir dist
+ ts-node build.ts
+ cp dist/plugins/* ../docs/plugins/list.md
+ cp dist/themes/* ../docs/themes/list.md
+ - run: pip install \
+ mkdocs-material=="9.*" \
+ mkdocs-rss-plugin \
+ mkdocs-git-revision-date-localized-plugin \
+ mkdocs-git-committers-plugin-2 \
+ mkdocs-glightbox \
+ mkdocs-material[imaging] \
+ mkdocs-redirects
+ - run: mkdocs gh-deploy --force
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index b550767e..6d648d57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
# ignore directories for local testing
-.jekyll-cache/
-_site/
-.vscode
\ No newline at end of file
+.vscode
+site
+.cache
+node_modules/
+builder/dist/*
\ No newline at end of file
diff --git a/404.html b/404.html
deleted file mode 100644
index e5af1288..00000000
--- a/404.html
+++ /dev/null
@@ -1,25 +0,0 @@
----
-permalink: /404.html
-layout: default
----
-
-
-
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bed7690e..b0738230 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,8 +1,10 @@
# Contributing
-## Contributing from the site via `Edit this page on GitHub`
+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.
-1. On the bottom of every page you will find a link `Edit this page on GitHub`.
+## Contributing from the site via edit button
+
+1. At the top of every page you will find an edit button
2. Cliking on it will open GitHub where you will be met with a message about not being able to edit directly.
3. Click `Fork this repository`.
4. You should see the text editor now.
@@ -33,4 +35,4 @@
7. Click `Propose changes`.
8. Next page might look complicated, but all you need to do next is click `Create pull request`.
9. Here you can adjust the title and/or add extra comment and then click `Create pull request`.
-10. That's it!
+10. That's it!
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 6a445cf7..00000000
--- a/Gemfile
+++ /dev/null
@@ -1,9 +0,0 @@
-source "https://rubygems.org"
-
-gem "webrick", "~> 1.7"
-gem "just-the-docs"
-gem "jekyll-include-cache"
-
-group :jekyll_plugins do
- gem "jekyll-remote-theme", "~> 0.4.2"
- end
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 80a7beae..00000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,86 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- addressable (2.8.1)
- public_suffix (>= 2.0.2, < 6.0)
- colorator (1.1.0)
- concurrent-ruby (1.1.10)
- em-websocket (0.5.3)
- eventmachine (>= 0.12.9)
- http_parser.rb (~> 0)
- eventmachine (1.2.7)
- ffi (1.15.5-x64-mingw-ucrt)
- forwardable-extended (2.6.0)
- http_parser.rb (0.8.0)
- i18n (1.12.0)
- concurrent-ruby (~> 1.0)
- jekyll (4.2.2)
- addressable (~> 2.4)
- colorator (~> 1.0)
- em-websocket (~> 0.5)
- i18n (~> 1.0)
- jekyll-sass-converter (~> 2.0)
- jekyll-watch (~> 2.0)
- kramdown (~> 2.3)
- kramdown-parser-gfm (~> 1.0)
- liquid (~> 4.0)
- mercenary (~> 0.4.0)
- pathutil (~> 0.9)
- rouge (~> 3.0)
- safe_yaml (~> 1.0)
- terminal-table (~> 2.0)
- jekyll-include-cache (0.2.1)
- jekyll (>= 3.7, < 5.0)
- jekyll-remote-theme (0.4.3)
- addressable (~> 2.0)
- jekyll (>= 3.5, < 5.0)
- jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
- rubyzip (>= 1.3.0, < 3.0)
- jekyll-sass-converter (2.2.0)
- sassc (> 2.0.1, < 3.0)
- jekyll-seo-tag (2.8.0)
- jekyll (>= 3.8, < 5.0)
- jekyll-watch (2.2.1)
- listen (~> 3.0)
- just-the-docs (0.3.3)
- jekyll (>= 3.8.5)
- jekyll-seo-tag (~> 2.0)
- rake (>= 12.3.1, < 13.1.0)
- kramdown (2.4.0)
- rexml
- kramdown-parser-gfm (1.1.0)
- kramdown (~> 2.0)
- liquid (4.0.3)
- listen (3.7.1)
- rb-fsevent (~> 0.10, >= 0.10.3)
- rb-inotify (~> 0.9, >= 0.9.10)
- mercenary (0.4.0)
- pathutil (0.16.2)
- forwardable-extended (~> 2.6)
- public_suffix (5.0.0)
- rake (13.0.6)
- rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
- ffi (~> 1.0)
- rexml (3.2.5)
- rouge (3.30.0)
- rubyzip (2.3.2)
- safe_yaml (1.0.5)
- sassc (2.4.0)
- ffi (~> 1.9)
- terminal-table (2.0.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- unicode-display_width (1.8.0)
- webrick (1.7.0)
-
-PLATFORMS
- x64-mingw-ucrt
-
-DEPENDENCIES
- jekyll-include-cache
- jekyll-remote-theme (~> 0.4.2)
- just-the-docs
- webrick (~> 1.7)
-
-BUNDLED WITH
- 2.3.21
diff --git a/LICENSE b/LICENSE
index 0ad25db4..7d4f96c5 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,661 +1,427 @@
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate. Many developers of free software are heartened and
-encouraged by the resulting cooperation. However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
- The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community. It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server. Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
- An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals. This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU Affero General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software. This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time. Such new versions
-will be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published
- by the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source. For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code. There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-.
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+ including for purposes of Section 3(b); and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/README.md b/README.md
index 68fc9d26..f8b59e6c 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,31 @@
# Stash-Docs
Website: https://docs.stashapp.cc
-# Contributing
+## Contributing
Everyone is welcome to help with the documentation. All changes are managed through pull requests.
Read step-by-step guide on how to create a pull request [CONTRIBUTING.md](CONTRIBUTING.md).
-# Running locally with Ruby
+## Running locally with pip
-## Prerequsites
-- [Ruby](https://www.ruby-lang.org/en/downloads/) v2.5.0 or higher, including all development headers (check your Ruby version using `ruby -v`)
-- [RubyGems](https://rubygems.org/pages/download) (check your Gems version using `gem -v`)
-- [Bundler gem](https://rubygems.org/gems/bundler) run `gem install bundler`
+### Prerequsites
+
+- Python modules (intall with `pip install mkdocs-material=="9.*" mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-glightbox mkdocs-material[imaging] mkdocs-redirects`)
+ - [mkdocs-material=="9.*"]
+ - [mkdocs-git-revision-date-localized-plugin]
+ - [mkdocs-git-committers-plugin-2]
+ - [mkdocs-glightbox]
+ - [mkdocs-material[imaging]]
+ - [mkdocs-redirects]
- Clone/download the repository
-## Building the site
+### Building the site
1. Open Terminal/Command Prompt with Ruby and go to your directory where you saved the copy of the repository
-2. Run `bundle exec jekyll serve`
-> You can add `--livereload` option to automatically refresh the page after changes.
+2. Run `mkdocs serve`
+
+## License
+
+The documentation site is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
+
+[builder](/builder/) is licensed under MIT License.
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index 00ca7657..00000000
--- a/_config.yml
+++ /dev/null
@@ -1,92 +0,0 @@
-remote_theme: just-the-docs/just-the-docs
-plugins:
- - jekyll-remote-theme
-exclude: ["Gemfile", "Gemfile.lock", "LICENSE", "CONTRIBUTING.md", "README.md",]
-
-title: Stash-Docs
-tagline: Documentation for Stash software
-description: Stash software documentation from how to get started to advanced tutorials.
-domain: docs.stashapp.cc
-url: "docs.stashapp.cc"
-
-permalink: pretty
-
-# Set a path/url to a logo that will be displayed instead of the title
-logo: "/assets/logo_v4.png"
-#logo: https://stashapp.cc/images/stash.svg
-
-# Aux links for the upper right navigation
-aux_links:
- "Donate @ Open Collective":
- - "https://opencollective.com/stashapp"
-aux_links_new_tab: true
-
-# External navigation links
-nav_external_links:
- - title: Community Discord
- url: https://discord.gg/frQ7qBvB3S
- - title: Contributing to Stash-Docs
- url: https://github.com/stashapp/Stash-Docs#contributing
-
-# Footer content
-# appears at the bottom of every page's main content
-
-# Back to top link
-back_to_top: true
-back_to_top_text: "Back to top"
-
-# Footer "Edit this page on GitHub" link text
-gh_edit_link: true # show or hide edit this page link
-gh_edit_link_text: "Edit this page on GitHub"
-gh_edit_repository: "https://github.com/stashapp/Stash-Docs" # the github URL for your repo
-gh_edit_branch: "main" # the branch that your docs is served from
-gh_edit_view_mode: "edit" # "tree" or "edit" if you want the user to jump into the editor immediately
-
-search_enabled: true
-
-search:
- # Split pages into sections that can be searched individually
- # Supports 1 - 6, default: 2
- heading_level: 3
- # Maximum amount of previews per search result
- # Default: 3
- previews: 3
- # Maximum amount of words to display before a matched word in the preview
- # Default: 5
- preview_words_before: 5
- # Maximum amount of words to display after a matched word in the preview
- # Default: 10
- preview_words_after: 10
- # Set the search token separator
- # Default: /[\s\-/]+/
- # Example: enable support for hyphenated search words
- tokenizer_separator: /[\s/]+/
- # Display the relative url in search results
- # Supports true (default) or false
- rel_url: false
- # Enable or disable the search button that appears in the bottom right corner of every page
- # Supports true or false (default)
- button: true
-
-# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
-color_scheme: stashdb-dark
-
-callouts_level: loud
-callouts:
- warning:
- title: Warning
- color: red
- note:
- title: Note
- color: yellow
- new:
- title: New
- color: green
- important:
- title: Important
- color: blue
-
-kramdown:
- syntax_highlighter_opts:
- block:
- line_numbers: false
\ No newline at end of file
diff --git a/_includes/footer_custom.html b/_includes/footer_custom.html
deleted file mode 100644
index 9a7211dd..00000000
--- a/_includes/footer_custom.html
+++ /dev/null
@@ -1 +0,0 @@
-
Maintained by Stash community and licensed under AGPL-3.0
\ No newline at end of file
diff --git a/_layouts/clean.md b/_layouts/clean.md
deleted file mode 100644
index 4a19260b..00000000
--- a/_layouts/clean.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-layout: default
----
-
-
-
-
{{ page.title }}
-
-{{ content }}
\ No newline at end of file
diff --git a/_sass/color_schemes/stashdb-dark.scss b/_sass/color_schemes/stashdb-dark.scss
deleted file mode 100644
index 011932a2..00000000
--- a/_sass/color_schemes/stashdb-dark.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-$link-color: #48aff0;
-$btn-primary-color: #48aff0;
-$base-button-color: $grey-dk-250;
-$sidebar-color: #394B59fa;
-$body-background-color: #202b33fa;
-$body-text-color: #FFFFFF;
-$body-heading-color: #F5F8FA;
-$nav-child-link-color: #E9ECEF;
-$border-color: #808080;
-$table-background-color: $grey-dk-250;
-$feedback-color: darken($sidebar-color, 3%);
-$search-result-preview-color: darken($body-heading-color, 10%);
-$search-background-color: #394B59fa;
-@import "./vendor/OneDarkJekyll/syntax"; // this is the one-dark-vivid atom syntax theme
-$code-background-color: #394B59fa;
-.highlight, pre.highlight {
- background-color: #394B59fa !important;
-}
-th, td {
- background-color: #394B59fa !important;
-}
-:not(pre, figure) > code {
- border-radius: unset !important;
-}
\ No newline at end of file
diff --git a/_sass/color_schemes/stashdb-light.scss b/_sass/color_schemes/stashdb-light.scss
deleted file mode 100644
index 4ba83658..00000000
--- a/_sass/color_schemes/stashdb-light.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-$link-color: #137CBD;
-$btn-primary-color: #137CBD;
-$sidebar-color: #E9ECEF;
-$body-text-color: #000000;
\ No newline at end of file
diff --git a/_sass/custom/custom.scss b/_sass/custom/custom.scss
deleted file mode 100644
index 973b8de1..00000000
--- a/_sass/custom/custom.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@media (min-width: 50rem) { .site-title { padding-right: 0rem; padding-left: 2rem; } }
-
-@media (min-width: 66.5rem) { .side-bar {
- width: calc((100% - 1064px) / 2 + 264px);
- min-width: 264px;
- max-width: fit-content;
-} }
-
-@media (min-width: 66.5rem) {
-.main {
- margin-left: calc( (100% - 100% + 2px) / 2 + 264px );
- max-width: -webkit-fill-available;
- } }
-
-@media (min-width: 50rem) {
-.main-content-wrap {
- padding-right: 4rem;
- padding-left: 4rem;
- } }
\ No newline at end of file
diff --git a/add-ons.md b/add-ons.md
deleted file mode 100644
index c28ad775..00000000
--- a/add-ons.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: clean
-title: Add-ons
-nav_order: 5
-has_children: true
-has_toc: false
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. [Scrapers](/add-ons/scrapers)
-2. [Plugins](/add-ons/plugins)
-3. [Scripts](/add-ons/scripts)
-4. [Userscripts](/add-ons/userscripts)
-5. [Utilities](/add-ons/utilities)
-6. [Third-party Integrations](/add-ons/third-party-integrations)
-
diff --git a/add-ons/plugins.md b/add-ons/plugins.md
index 9112e828..e69de29b 100644
--- a/add-ons/plugins.md
+++ b/add-ons/plugins.md
@@ -1,317 +0,0 @@
----
-layout: clean
-title: Plugins
-nav_order: 2
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Stash plugins add further features that Stash doesn't itself provide.
-
-To install a plugin, save them to `%USERPROFILE%\.stash\plugins` on Windows or `/root/.stash/plugins` on Unix systems (Mac, Linux, etc.). The `plugins` directory won't exist by default so you will have to create it. Once installed, go to the Plugins page in your Stash settings and reload plugins.
-
-Plugins are separated into 2 sections [Official](#official) and [Third-party](#third-party).
-
-# Official
-
-{: .warning }
-List is outdated at the moment as there is a big overhaul of the repository happening. [Check the repository](https://github.com/stashapp/CommunityScripts/tree/main/plugins){:target="_blank"} for the up to date list.
-
-Official plugins are hosted on [CommunityScripts repository](https://github.com/stashapp/CommunityScripts){:target="_blank"}. All code is reviewed by core Stash team and any questions or issues you have regarding these plugins can be raised in Discord or GitHub.
-
-## GHScraper_Checker
-
-|-|-|
-|Category|Scraper|
-|Plugin|[GHScraper_Checker](https://github.com/stashapp/CommunityScripts/tree/main/plugins/GHScraper_Checker)|
-|Description|Compare local file against github file from the community scraper repo.|
-|Triggers|Task|
-|Stash version|v0.8 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![GHScraper_Checker](/assets/add-ons/GHScraper_Checker.png)|
-
-## renamerOnUpdate
-
-|-|-|
-|Category|Maintenance|
-|Plugin|[renamerOnUpdate](https://github.com/stashapp/CommunityScripts/blob/main/plugins/renamerOnUpdate){:target="_blank"}|
-|Description|Rename/Move your file based on Stash metadata.|
-|Triggers|Task Scene.Update|
-|Stash version|v0.7 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![renamerOnUpdate](/assets/add-ons/renamerOnUpdate.png)|
-
-## setSceneCoverFromFile
-
-|-|-|
-|Category|Maintenance|
-|Plugin|[setSceneCoverFromFile](https://github.com/stashapp/CommunityScripts/blob/main/plugins/setSceneCoverFromFile){:target="_blank"}|
-|Description|Searchs Stash for Scenes with a cover image in the same folder and sets the cover image in stash to that image.|
-|Triggers|Task|
-|Stash version|v0.7 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## markerTagToScene
-
-|-|-|
-|Category|Scene|
-|Plugin|[markerTagToScene](https://github.com/stashapp/CommunityScripts/blob/main/plugins/markerTagToScene){:target="_blank"}|
-|Description|Adds primary tag of Scene Marker to the Scene on marker create/update.|
-|Triggers|SceneMarker.Create SceneMarker.Update|
-|Stash version|v0.8 ([46bbede](https://github.com/stashapp/stash/commit/46bbede9a07144797d6f26cf414205b390ca88f9){:target="_blank"}) or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## defaultDataForPath
-
-|-|-|
-|Category|Scanning|
-|Plugin|[defaultDataForPath](https://github.com/stashapp/CommunityScripts/blob/main/plugins/defaultDataForPath){:target="_blank"}|
-|Description|Adds configured Tags, Performers and/or Studio to all newly scanned Scenes, Images and Galleries.|
-|Triggers|Scene.Create Gallery.Create Image.Create|
-|Stash version|v0.8 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## filenameParser
-
-|-|-|
-|Category|Scanning|
-|Plugin|[filenameParser](https://github.com/stashapp/CommunityScripts/blob/main/plugins/filenameParser){:target="_blank"}|
-|Description|Tries to parse filenames, primarily in {studio}.{year}.{month}.{day}.{performer1firstname}.{performer1lastname}.{performer2}.{title} format, into the respective fields.|
-|Triggers|Scene.Create Gallery.Create|
-|Stash version|v0.10 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## pathParser
-
-|-|-|
-|Category|Scanning|
-|Plugin|[pathParser](https://github.com/stashapp/CommunityScripts/blob/main/plugins/pathParser){:target="_blank"}|
-|Description|Updates scene info based on the file path.|
-|Triggers|Scene.Create|
-|Stash version|v0.17 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## titleFromFilename
-
-|-|-|
-|Category|Scanning|
-|Plugin|[titleFromFilename](https://github.com/stashapp/CommunityScripts/blob/main/plugins/titleFromFilename){:target="_blank"}|
-|Description|Sets the scene title to its filename.|
-|Triggers|Scene.Create|
-|Stash version|v0.17 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## tagGraph
-
-|-|-|
-|Category|Reporting|
-|Plugin|[tagGraph](https://github.com/stashapp/CommunityScripts/blob/main/plugins/tagGraph){:target="_blank"}|
-|Description|Creates a visual of the Tag relations.|
-|Triggers|Scene.Create|
-|Stash version|v0.7 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## DateParser
-
-|-|-|
-|Category|Scanning|
-|Plugin|[DateParser](https://github.com/stashapp/CommunityScripts/tree/main/plugins/DateParser){:target="_blank"}|
-|Description|Find date in path or filename and add it.|
-|Triggers|Task|
-|Stash version|v0.18 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## phashDuplicateTagger
-
-|-|-|
-|Category|Scene|
-|Plugin|[phashDuplicateTagger](https://github.com/stashapp/CommunityScripts/tree/main/plugins/phashDuplicateTagger){:target="_blank"}|
-|Description|Will tag scenes based on duplicate PHashes for easier/safer removal.|
-|Triggers|Task|
-|Stash version|v0.16 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## timestampTrade
-
-|-|-|
-|Category|Scene|
-|Plugin|[timestampTrade](https://github.com/stashapp/CommunityScripts/tree/main/plugins/timestampTrade){:target="_blank"}|
-|Description|[timestamp.trade API](https://timestamp.trade) syncs markers between Stash instances and XBVR. This sits along side other metadata databases like StashDB while we wait for the feature to be added there.|
-|Triggers|Scene.Update Task|
-|Stash version|v0.18 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## AI Tagger
-
-|-|-|
-|Category|Scene|
-|Plugin|[AI Tagger](https://github.com/stashapp/CommunityScripts/tree/main/plugins/AITagger){:target="_blank"}|
-|Description|Tag videos and Images with Locally hosted AI using Skier's Patreon AI models.|
-|Triggers|Task|
-|Stash version|v0.18 or higher|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-# Third-party
-
-{: .note }
-These 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.
-
-## YT-DL Downloader
-
-|-|-|
-|Category|Downloader|
-|Plugin|[YT-DL Downloader](https://github.com/niemands/StashPlugins){:target="_blank"}|
-|Description|Download Videos automated with yt-dl and add the scrape tag for Bulk URL Scraper.|
-|Author|[niemands](https://github.com/niemands){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Gallery Tags
-
-|-|-|
-|Category|Images|
-|Plugin|[Gallery Tags](https://github.com/niemands/StashPlugins){:target="_blank"}|
-|Description|Copy information from attached scene to galleries.|
-|Author|[niemands](https://github.com/niemands){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Update Image Titles
-
-|-|-|
-|Category|Images|
-|Plugin|[Update Image Titles](https://github.com/niemands/StashPlugins){:target="_blank"}|
-|Description|Update all image titles (Fixes natural sort).|
-|Author|[niemands](https://github.com/niemands){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Duplicate Finder
-
-|-|-|
-|Category|Maintenance|
-|Plugin|[Duplicate Finder](https://github.com/WithoutPants/stash-plugin-duplicate-finder){:target="_blank"}|
-|Description|Detects and marks duplicate scenes within Stash.|
-|Author|[WithoutPants](https://github.com/WithoutPants){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Performer Creator
-
-|-|-|
-|Category|Metadata|
-|Plugin|[Performer Creator](https://github.com/com1234475/stash-plugin-performer-creator){:target="_blank"}|
-|Description|Creates performers from scenes based on filenames.|
-|Author|[com1234475](https://github.com/com1234475){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Set PH Urls
-
-|-|-|
-|Category|Metadata|
-|Plugin|[Set PH Urls](https://github.com/niemands/StashPlugins){:target="_blank"}|
-|Description|Add urls to Pornhub scenes downloaded by youtube-dl.|
-|Author|[niemands](https://github.com/niemands){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Bulk URL Scraper
-
-|-|-|
-|Category|Scraping|
-|Plugin|[Bulk URL Scraper](https://github.com/niemands/StashPlugins){:target="_blank"}|
-|Description|Bulk scene url scraping.|
-|Author|[niemands](https://github.com/niemands){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## stash-plugin-performer-creator
-
-|-|-|
-|Category|Metadata|
-|Plugin|[stash-plugin-performer-creator](https://github.com/cc1234475/stash-plugin-performer-creator){:target="_blank"}|
-|Description|This is a plugin for Stash. It adds a Parse all scenes for performers task. This task processes all scenes and using Natural Language Processing tries to detect performer names and tries to find/add them.|
-|Author|[cc1234475](https://github.com/cc1234475){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash NFO Exporter for Kodi
-
-|-|-|
-|Category|Metadata|
-|Plugin|[StashNfoExporterKodi](https://github.com/scruffynerf/StashNfoExporterKodi){:target="_blank"}|
-|Description|Adds .nfo file and strm support to allow using Stash organized content with Kodi with no Kodi Addon needed.|
-|Author|[scruffynerf](https://github.com/scruffynerf){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Performer Body Calculator
-
-|-|-|
-|Category|Metadata|
-|Plugin|[performerBodyCalculator](https://github.com/stg-annon/performerBodyCalculator){:target="_blank"}|
-|Description|This plugin will tag performers based on existing metadata within stash the `measurements` attribute must be present for a performer to be tagged, additionally the `height` and `weight` attributes will be used if present but are not required.|
-|Author|[stg-annon](https://github.com/stg-annon){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Split Duplicate Merged Files
-
-|-|-|
-|Category|Maintenance|
-|Plugin|[Stash-Split-Duplicate-Merged-Files](https://github.com/elkorol/Stash-Split-Duplicate-Merged-Files){:target="_blank"}|
-|Description|This plugin will search for scenes that have duplicate files and are merged. It then iterates over the files skipping the first one and then using the next files to create new scenes.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Topaz Gigapixel AI, Performer Image Upscaler
-
-|-|-|
-|Category|Images|
-|Plugin|[Stash Topaz Gigapixel AI, Performer Image Upscaler](https://github.com/elkorol/Stash-Performer-Image-Gigapixel){:target="_blank"}|
-|Description|Uses the program Topaz Gigapixel AI, to upscale or downscale performer images that are tagged with the relevant tags.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Theme / CSS Switcher
-
-|-|-|
-|Category|Interface|
-|Plugin|[Stash Theme / CSS Switcher](https://github.com/elkorol/Stash-App-Theme-Switch-Plugin){:target="_blank"}|
-|Description|Adds a button that shows a menu, allowing you to change CSS Themes and apply various CSS snippets for Stash App.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png)![](/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png)|
-
-## aspectratio
-
-|-|-|
-|Category|Metadata|
-|Plugin|[aspectratio](https://github.com/scruffynerf/aspectratio){:target="_blank"}|
-|Description|Adds Ratio tags on Scene Create.|
-|Author|[scruffynerf](https://github.com/scruffynerf){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Duplicate Title/ID/URL tagger
-
-|-|-|
-|Category|Metadata|
-|Plugin|[Duplicate Title/ID/URL tagger](https://github.com/scruffynerf/stashstuff/tree/main/plugins/DuplicateTitle){:target="_blank"}|
-|Description|Adds Duplicate Title/ID/URL tag.|
-|Author|[scruffynerf](https://github.com/scruffynerf){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Prescreening tagger
-
-|-|-|
-|Category|Metadata|
-|Plugin|[Prescreening tagger](https://github.com/scruffynerf/stashstuff/tree/main/plugins/prescreen){:target="_blank"}|
-|Description|Adds prescreen tags on Scene Create or Demand.|
-|Author|[scruffynerf](https://github.com/scruffynerf){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## performerBodyCalculator
-
-|-|-|
-|Category|Metadata|
-|Plugin|[performerBodyCalculator](https://github.com/stg-annon/performerBodyCalculator){:target="_blank"}|
-|Description|This plugin will tag performers based on existing metadata within stash the measurements attribute must be present for a performer to be tagged, additionally the height and weight attributes will be used if present but are not required.|
-|Author|[stg-annon](https://github.com/stg-annon){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
diff --git a/add-ons/scrapers.md b/add-ons/scrapers.md
deleted file mode 100644
index 7e0fff60..00000000
--- a/add-ons/scrapers.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-layout: clean
-title: Scrapers
-nav_order: 1
-has_children: false
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Scrapers are the way to retrieve information from websites for your movies/scenes/galleries/performers...etc. Using scrapers wisely, you can avoid typing information manually and repetitively. They can help you quickly establish links between movies/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.
-
-{: .important }
-> Scrapers are in **.yml** format. Some of them requires Python or Ruby if you use those, you need to install Python/Ruby on your machine, and don't forget to get the corresponding **.py** or **.rb** file as well.
-
-# Installation
-
-To install a scraper:
-1. Make sure you have the `scrapers` folder in the same location of your Stash app. If you don't have it, create that folder/directory. You can also specify the name of this folder in the `config.yml`.
-2. Go to the [CommunityScrapers repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"}.
- - Find the scraper you want from [scrapers list](https://github.com/stashapp/CommunityScrapers/blob/master/SCRAPERS-LIST.md){:target="_blank"} > go back to the [main repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"} > go to scrapers folder > find the scraper, use `Ctrl+F` to open search > open the file > click `Raw` button > right click the page with your mouse and select `Save As...` or use `Ctrl+S`.
- - Download the whole [CommunityScrapers repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"} by clicking `Code` > `Download ZIP`. Copy the files from **scrapers** folder in your **.zip** to your `.stash/scrapers` directory.
-
-{: .note }
-For Python scrapers, it's also helpful to read the **.py** file. Some of them require extra Python modules installed to work.
-
-{:style="counter-reset:none"}
-3. Once the new scrapers are in position, you need to go to `Settings` > `Metadata Providers` and click on `Reload Scrapers` button. You should see your scrapers listed in the list below that button.
-
-{:style="counter-reset:none"}
-4. Navigate to the scene/gallery/movie/performer you want to scrape.
- - If that's a URL scraper, you need to paste the URL in its "URL" blanket, and the scrape icon next to it should light up.
- - If that's a Search-By-Name scraper, you can provide the name and choose "Scrape With...", and the scraper should fetch the list of potential matches for you.
-
-{:style="counter-reset:none"}
-5. You will preview the scrape result before you commit the change. Check on the left will keep the original value, check on the right will make the change.
-
-# Scraper Types
-
-## By Searching Type
-
-### Fragment
-
-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.
-
-Scrapers includes: AdultTimeAPI.yml, JavLibrary.yml, ThePornDB.yml
-
-### Search By Name
-
-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.
-
-Scrapers includes: Babepedia.yml, FreeonesCommunity.yml, IAFD.yml
-
-### Search By URL
-
-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/movie so they can extract information from it.
-
-Scrapers includes: All other scrapers.
-
-## By Implementation
-
-### XPath and JSON Scrapers
-
-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.
-
-### CDP Scrapers
-
-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.
-
-### Python / Ruby Scrapers
-
-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.
-
-# More details
-
-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"}.
-
-# Create your own
-
-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.
-
-# Contribution
-
-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.
\ No newline at end of file
diff --git a/add-ons/scripts.md b/add-ons/scripts.md
deleted file mode 100644
index 4af87282..00000000
--- a/add-ons/scripts.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-layout: clean
-title: Scripts
-nav_order: 3
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Scripts are standalone programs that can interact with stash either through graphql queries, custom Javascript or by directly editing Stash database/files.
-
-To install a script follow the script's install instructions.
-
-Scripts are separated into 2 sections [Official](#official) and [Third-party](#third-party).
-
-# Official
-
-Official scripts are hosted on [CommunityScripts repository](https://github.com/stashapp/CommunityScripts){:target="_blank"}. All code is reviewed by core Stash team and any questions or issues you have regarding these scripts can be raised in Discord or GitHub.
-
-## Kodi Helper
-
-|-|-|
-|Category|Kodi|
-|Script|[Kodi Helper](https://github.com/stashapp/CommunityScripts/tree/main/scripts/kodi-helper){:target="_blank"}|
-|Description|Generates `nfo` and `strm` for use with Kodi.|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Sqlite_Renamer
-
-|-|-|
-|Category|Maintenance|
-|Script|[Sqlite_Renamer](https://github.com/stashapp/CommunityScripts/tree/main/scripts/Sqlite_Renamer){:target="_blank"}|
-|Description|Renames your files using stash's metadata.|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Watcher
-
-|-|-|
-|Category|Scanning|
-|Script|[Stash Watcher](https://github.com/stashapp/CommunityScripts/tree/main/scripts/stash-watcher){:target="_blank"}|
-|Description|Stash Watcher is a service that watches your Stash library directories for changes and then triggers a Metadata Scan when new files are added to those directories.|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-# Third-party
-
-{: .note }
-These 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.
-
-## OnlyFans Scraper
-
-|-|-|
-|Category|Scraping|
-|Script|[OnlyFans Scraper](https://github.com/ALonelyJuicebox/OFMetadataToStash){:target="_blank"}|
-|Description|Powershell script that can (batch) import OnlyFans metadata into a Stash database from a OnlyFans metadata database scraped using DIGITALCRIMINALS's OnlyFans Scraper.|
-|Author|[ALonelyJuicebox](https://github.com/ALonelyJuicebox){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/OnlyFans_Scraper.png)![](/assets/add-ons/OnlyFans_Scraper2.png)|
-
-## FilenamePerformersToCSV
-
-|-|-|
-|Category|Metadata|
-|Script|[FilenamePerformersToCSV](https://github.com/ALonelyJuicebox/FilenamePerformersToCSV){:target="_blank"}|
-|Description|Parse performer names from your media filenames into CSV files for batch import into Stash!|
-|Author|[ALonelyJuicebox](https://github.com/ALonelyJuicebox){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/FilenamePerformersToCSV.png)|
-
-## pwPlayer.js - Scene Card Quick Player
-
-|-|-|
-|Category|Scene|
-|Script|[pwPlayer.js - Scene Card Quick Player](https://github.com/philpw99/StashCustomJavascripts){:target="_blank"}|
-|Description|This Javascript will create a "Play" button in each scene card. You can click on it and the video for that scene will be played right away. Click on the video again, then you are back to the scene list.|
-|Author|[philpw99](https://github.com/philpw99){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png)|
-
-## stashapp-tag-importer
-
-|-|-|
-|Category|Tags|
-|Script|[stashapp-tag-importer](https://github.com/soundchaser128/stashapp-tag-importer){:target="_blank"}|
-|Description|Bulk imports all the tags on Stashbox (usually stashdb.org) into your Stash application.|
-|Author|[soundchaser128](https://github.com/soundchaser128){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashTagSkins
-
-|-|-|
-|Category|Tags|
-|Script|[StashTagSkins](https://github.com/Stash-KennyG/StashTagSkins){:target="_blank"}|
-|Description|Bulk imports tags including Aliases from popular libraries - includes multiple themes in the repository including Icons and Images|
-|Author|[Stash-KennyG](https://github.com/Stash-KennyG){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashTagSkins_Sample.png)![](/assets/add-ons/StashTagSkins_Icons.png)![](/assets/add-ons/StashTagSkins_Hamster.png)|
-
-## blurryCardBackground
-
-|-|-|
-|Category|Scene/Movie/Gallery/Studio|
-|Script|[blurryCardBackground](https://github.com/philpw99/StashCustomJavascripts){:target="_blank"}|
-|Description|Add blurry background to scene/movie/gallery/image/studio.|
-|Author|[philpw99](https://github.com/philpw99){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/blurryCardBackground.png)
-
-## plex-to-stash-ratings
-
-|-|-|
-|Category|Metadata|
-|Script|[plex-to-stash-ratings](https://github.com/oikmeg/plex-to-stash-ratings){:target="_blank"}|
-|Description|Transfers scene ratings and view counts from Plex to Stash.|
-|Author|[oikmeg](https://github.com/oikmeg){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashGalleryUpdate
-
-|-|-|
-|Category|Gallery|
-|Script|[StashGalleryUpdate](https://github.com/Darklyter/StashGalleryUpdate){:target="_blank"}|
-|Description|A little script to match and update Stash galleries from scenes.|
-|Author|[Darklyter](https://github.com/Darklyter){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashStudioSync
-
-|-|-|
-|Category|Database|
-|Script|[StashStudioSync](https://github.com/Stash-KennyG/StashStudioSync){:target="_blank"}|
-|Description|An easy way to query a stashbox GQL endpoint and import any unknown studio IDs.|
-|Author|[Stash-KennyG](https://github.com/Stash-KennyG){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
\ No newline at end of file
diff --git a/add-ons/third-party-integrations.md b/add-ons/third-party-integrations.md
deleted file mode 100644
index 93d2d515..00000000
--- a/add-ons/third-party-integrations.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-layout: clean
-title: Third-party Integrations
-nav_order: 6
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Integrations are repositories developed to integrate Stash into other programs.
-
-{: .note }
-These third-party 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.
-
-## plugin.video.stash
-
-|-|-|
-|Category|Kodi|
-|Integration|[plugin.video.stash](https://github.com/gitgiggety/plugin.video.stash){:target="_blank"}|
-|Description|plugin.video.stash is an add-on for the Kodi home theater center software to incorporate Stash, an organizer for your porn.|
-|Author|[gitgiggety](https://github.com/gitgiggety){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashPlexAgent.bundle
-
-|-|-|
-|Category|Plex|
-|Integration|[StashPlexAgent.bundle](https://github.com/Darklyter/StashPlexAgent.bundle){:target="_blank"}|
-|Description|A very simplistic Plex agent to pull metadata from Stash.|
-|Author|[Darklyter](https://github.com/Darklyter){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Jellyfin.Plugin.Stash
-
-|-|-|
-|Category|Jellyfin|
-|Integration|[Jellyfin.Plugin.Stash](https://github.com/DirtyRacer1337/Jellyfin.Plugin.Stash){:target="_blank"}|
-|Description|Pulls data from your Stash using the filename to query on.|
-|Author|[DirtyRacer1337](https://github.com/DirtyRacer1337){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
diff --git a/add-ons/userscripts.md b/add-ons/userscripts.md
deleted file mode 100644
index 2b40a6f7..00000000
--- a/add-ons/userscripts.md
+++ /dev/null
@@ -1,531 +0,0 @@
----
-layout: clean
-title: Userscripts
-nav_order: 4
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Userscripts are programs written in Javascript that modifies web pages to improve browsing with new features, formatting and more.
-
-To install the userscript you will need a browser extension such as [Violentmonkey](https://violentmonkey.github.io){:target="_blank"} / [Tampermonkey](https://www.tampermonkey.net){:target="_blank"} / [Greasemonkey](https://www.greasespot.net){:target="_blank"}.
-
-# Categories
-
-- **Stash** - applies to Stash software.
-- **StashDB** - applies to StashDB.org stash-box instance (might work with other stash-box instances with some tweaking).
-- **Utility** - applies to sites not related to Stash.
-
-Userscripts are separated into 2 sections [Official](#official) and [Third-party](#third-party).
-
-# Official
-
-Official userscripts are hosted on [CommunityScripts repository](https://github.com/stashapp/CommunityScripts){:target="_blank"}. All code is reviewed by core Stash team and any questions or issues you have regarding these userscripts can be raised in Discord or GitHub.
-
-## StashDB Submission Helper
-
-|-|-|
-|Category|StashDB|
-|Userscript|[StashDB Submission Helper](https://github.com/stashapp/CommunityScripts/tree/main/userscripts/StashDB_Submission_Helper){:target="_blank"}|
-|Description|Adds handy functions for StashDB submissions like buttons to add aliases in bulk to a performer.|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashDB_Submission_Helper.png)|
-
-# Third-party
-
-{: .note }
-These 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.
-
-## Stash Batch Query Edit
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Batch Query Edit](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, adds button to batch update all query fields with a configurable combination of Date, Studio, Performers, and Title.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Batch_Query_Edit.png)![](/assets/add-ons/Stash_Batch_Query_Edit2.png)|
-
-## Stash Batch Result Toggle
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Batch Result Toggle](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, adds button to toggle all stashdb scene match result fields. Saves clicks when you only want to save a few metadata fields. Instead of turning off every field, you batch toggle them off, then toggle on the ones you want.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Batch_Result_Toggle.png)![](/assets/add-ons/Stash_Batch_Result_Toggle2.png)|
-
-## Stash Batch Save
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Batch Save](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, adds button to batch save all scenes. Opens a confirmation popup with clicked.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Batch_Save.png)|
-
-## Stash Batch Search
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Batch Search](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, adds button to batch search all scenes.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Batch_Search.png)|
-
-## Stash Markdown
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Markdown](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds markdown parsing to tag description fields.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Markdown.png)|
-
-## Stash New Performer Filter Button
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash New Performer Filter Button](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds button to performers page to switch to a filter by new performers tagger view.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_New_Performer_Filter_Button.png)|
-
-## Stash Open Media Player
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Open Media Player](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Open filepath link on scene page 'File Info' tab in an external media player when clicked.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Open_Media_Player.png)|
-
-## Stash Performer Audit Task Button
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Performer Audit Task Button](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds a button to the performers page to check for duplicate performer urls. Task output shown in stash logs.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Performer_Audit_Task_Button.png)![](/assets/add-ons/Stash_Performer_Audit_Task_Button2.png)![](/assets/add-ons/Stash_Performer_Audit_Task_Button3.png)|
-
-## Stash Performer Image Cropper
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Performer Image Cropper](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds ability to crop performer image from performer page.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Performer_Image_Cropper.png)|
-
-## Stash Performer Markers Tab
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Performer Markers Tab](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds a Markers link to performer pages.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Performer_Markers_Tab.png)|
-
-## Stash Performer Tagger Additions
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Performer Tagger Additions](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds performer birthdate and url to tagger view. Makes clicking performer name open stash profile in new tab instead of current tab.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Performer_Tagger_Additions.png)|
-
-## Stash Performer URL Searchbox
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Performer URL Searchbox](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds a performer URL search textbox to performers page for quicker searching by performer URL.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Performer_URL_Searchbox.png)|
-
-## Stash Scene Tagger Additions
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Scene Tagger Additions](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds scene duration, filepath, and url to tagger view in the collapsible scene details sections. Adds shift-click to collapsible scene details buttons to open/close all.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Scene_Tagger_Additions.png)![](/assets/add-ons/Stash_Scene_Tagger_Additions2.png)|
-
-## Stash Scene Tagger Colorizer
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Scene Tagger Colorizer](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, colorize scrape results. Matching fields are green, missing fields are yellow, and mismatching fields are red.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Scene_Tagger_Colorizer.png)![](/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png)|
-
-## Stash Scene Tagger Draft Submit
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Scene Tagger Draft Submit](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds button to Scene Tagger to submit draft to StashDB.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png)|
-
-## Stash Scene Tagger Linkify
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Scene Tagger Linkify](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Turn all scene tagger result text referencing stash or stashbox studio and performer names into clickable links.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Scene_Tagger_Linkify.png)![](/assets/add-ons/Stash_Scene_Tagger_Linkify2.png)|
-
-## Stash Set Stashbox Favorite Performers
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Set Stashbox Favorite Performers](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Sync Stashbox favorite performers whenever a stash performer is favorited or unfavorited. Also adds button to performers page to sync all.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png)![](/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png)![](/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png)|
-
-## Stash StashID Icon
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash StashID Icon](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds checkmark icon to performer and studio cards that have a StashID.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_StashID_Icon.png)![](/assets/add-ons/Stash_StashID_Icon2.png)![](/assets/add-ons/Stash_StashID_Icon3.png)|
-
-## Stash StashID Input
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash StashID Input](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds input textboxes to performer detail and studio detail pages for StashID entry. Also displays studio StashIDs on studio page without having to click edit to view.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_StashID_Input.png)![](/assets/add-ons/Stash_StashID_Input2.png)|
-
-## Stash Stats
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Stats](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds new stats to the stats page: marker count, favorite performer count, studios with StashID %, performers with StashID %, scenes with StashID %.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Stats.png)|
-
-## Stash Studio Image And Parent On Create
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Studio Image And Parent On Create](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|In Scene Tagger, sets studio image and parent studio from StashDB when a studio is created.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png)|
-
-## Stash Tag Image Cropper
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Tag Image Cropper](https://github.com/stg-annon/stash-userscripts){:target="_blank"}|
-|Description|Adds ability to crop tag image from tag page.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Tag_Image_Cropper.png)|
-
-## Visage
-
-|-|-|
-|Category|Stash|
-|Userscript|[Visage](https://github.com/cc1234475/visage){:target="_blank"}|
-|Description|Visage is a series of tools to do facial recognition on images (and create a searchable database).|
-|Author|[cc1234475](https://github.com/cc1234475)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Visage.png)|
-
-## Performer Suggestions
-
-|-|-|
-|Category|Stash|
-|Userscript|[Performer Suggestions](https://gist.github.com/QxxxGit/7d6e5759814b1ce84cb7535173415eff){:target="_blank"}|
-|Description|Adds performer suggestions based on similar tags.|
-|Author|[QxxxGit](https://github.com/QxxxGit)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Performer Card Details
-
-|-|-|
-|Category|Stash|
-|Userscript|[Performer Card Details](https://gist.github.com/QxxxGit/5c25005ff1a918d3f1213134b2282609){:target="_blank"}|
-|Description|Adds details to performer cards.|
-|Author|[QxxxGit](https://github.com/QxxxGit)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Performer_Card_Details.png)|
-
-## Stash Tag
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Tag](https://github.com/cc1234475/stashtag){:target="_blank"}|
-|Description|Stash tag is userscript to uses the playbar sprite images to do image recognition and return a list of possible tags to apply to the video.|
-|Author|[cc1234475](https://github.com/cc1234475)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/stash_tag.png)|
-
-## Stash Toggle Sprite
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Toggle Sprite](https://gist.github.com/DogmaDragon/66d8f81aa2a30cfbe1cea81e9a98ca49){:target="_blank"}|
-|Description|Toggle Sprites on Scene page in place of the cover.|
-|Author|iix63500#0330, Flashy#9094|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Userscript Tagger View Scene Element DIV Removal Button
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Userscript Tagger View Scene Element DIV Removal Button](https://github.com/elkorol/Stash-App-Userscript-Tagger-View-Div-Remover){:target="_blank"}|
-|Description|Adds a button on each scene element div in tagger view and is made to compliment 7dJx1qP's userscript Stash Batch Save, because currently, when hitting scrape all, if a particular scene gets missmatched to a wrong scene that is scraped, whilst all other scenes match up, ready for saving.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png)|
-
-## Stash Userscript VideoJS Player Copy/Save
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Userscript VideoJS Player Copy/Save](https://github.com/elkorol/Stash-App-Script-Video-JS-CopySave){:target="_blank"}|
-|Description|Adds a button to the scene player control bar, which on click will allow you to either save the current frame of the playing video to disk or copy the image as base64 to clipboard.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png)|
-
-## Stash Userscript Alphabet Selector
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Userscript Alphabet Selector](https://github.com/elkorol/Stash-App-Script-Alphabet-Selector){:target="_blank"}|
-|Description|Adds a button to the toolbar for an Alphabet keyboard, on Scenes, Movies, Performers, Studios and Tags page that when clicked adds a visible keyboard, allowing you to select letters or numerical value, that can either limit, aliases, name or both to whichever letter selected or number.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png)![](/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png)|
-
-## Stash Userscript Performer Image Upscaler
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Userscript Performer Image Upscaler](https://github.com/elkorol/Stash-Userscript-Upscaler){:target="_blank"}|
-|Description|Adds an upscale button on the performer page, that upon clicking allows you to select an appriate upcaling model then upscale and update the image.|
-|Author|[elkorol](https://github.com/elkorol){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash-Userscript-Upscaler-1.png)![](/assets/add-ons/Stash-Userscript-Upscaler-2.png)![](/assets/add-ons/Stash-Userscript-Upscaler-3.png)|
-
-## Batch Create All
-
-|-|-|
-|Category|Stash|
-|Userscript|[Batch Create All](https://github.com/Serechoo/stash-userscripts){:target="_blank"}|
-|Description|Allow batch create jobs for your stash. The idea behind it is this: Once you have the userscripts for 'Search All' installed and click it, you can then look to click the 'Create All' button that is installed via this javascript.|
-|Author|[Serechoo](https://github.com/Serechoo){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Video Compare Userscript
-
-|-|-|
-|Category|Stash|
-|Userscript|[Stash Video Compare Userscript](https://gist.github.com/DogmaDragon/fb3ed033c0d1f0a6811137dfea0c4ce8){:target="_blank"}|
-|Description|Allow to compare videos side by side.|
-|Author|scruffy_nerf|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashDB Copy StashID
-
-|-|-|
-|Category|StashDB|
-|Userscript|[StashDB Copy StashID](https://github.com/7dJx1qP/stashdb-userscripts){:target="_blank"}|
-|Description|Adds a button to copy StashID.|
-|Author|[7dJx1qP](https://github.com/7dJx1qP)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## StashDB Backlog Userscript
-
-|-|-|
-|Category|StashDB|
-|Userscript|[StashDB Backlog Userscript](https://gist.github.com/peolic/e4713081f7ad063cd0e91f2482ac39a7){:target="_blank"}|
-|Description|This userscript is used to be able to view pending changes from the StashDB Backlog spreadsheet directly on StashDB.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashDB_Backlog_Userscript.png)![](/assets/add-ons/StashDB_Backlog_Userscript2.png)![](/assets/add-ons/StashDB_Backlog_Userscript3.png)|
-
-## StashDB Images Userscript
-
-|-|-|
-|Category|StashDB|
-|Userscript|[StashDB Images Userscript](https://gist.github.com/peolic/7368022947a28ef11bf44d0ae802df45){:target="_blank"}|
-|Description|This userscript adds image resolutions next to every performer image on StashDB.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashDB_Images_Userscript.png)|
-
-## StashDB ID Copy Buttons
-
-|-|-|
-|Category|StashDB|
-|Userscript|[StashDB ID Copy Buttons](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Adds buttons to copy StashID.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashDB_ID_Copy_Buttons.png)|
-
-## Indexxx Helper Userscript
-
-|-|-|
-|Category|Utility|
-|Userscript|[Indexxx Helper Userscript](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|This userscript adds useful tools to indexxx.com.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## IAFD Helper Userscript
-
-|-|-|
-|Category|Utility|
-|Userscript|[IAFD Helper Userscript](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|This userscript converts dates to YYYY-MM-DD and provides a filter for the studios search page on iafd.com.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## ManyVids Release Year Userscript
-
-|-|-|
-|Category|Utility|
-|Userscript|[ManyVids Release Year Userscript](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|This userscript adds the year to partial video release dates on manyvids.com.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Brazzers Sub-Studio Userscript
-
-|-|-|
-|Category|Utility|
-|Userscript|[Brazzers Sub-Studio Userscript](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|This userscript adds the sub-studio of a Brazzers scene to the video page.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## 1 Pass For All Sites - Better Episode Image
-
-|-|-|
-|Category|Utility|
-|Userscript|[1 Pass For All Sites - Better Episode Image](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Attempts to grab a better episode image.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## CumLouder
-
-|-|-|
-|Category|Utility|
-|Userscript|[CumLouder](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Adds site logo and name to video pages. May not work for all videos.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## ExploitedX Sites - Release Codes
-
-|-|-|
-|Category|Utility|
-|Userscript|[ExploitedX Sites - Release Codes](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Shows episode numbers for ExploitedX sites.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## FTVCash - Better Image
-
-|-|-|
-|Category|Utility|
-|Userscript|[FTVCash - Better Image](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Attempts to grab a better episode image.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Gamma Entertainment - Scene Length
-
-|-|-|
-|Category|Utility|
-|Userscript|[Gamma Entertainment - Scene Length](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Adds scene length information on Gamma Entertainment sites.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Kink - Find Duration
-
-|-|-|
-|Category|Utility|
-|Userscript|[Kink - Find Duration](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Add "find duration" link to shoot pages.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## MindGeek Scene Trailer
-
-|-|-|
-|Category|Utility|
-|Userscript|[MindGeek Scene Trailer](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Shows trailers on MindGeek sites.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Porn Pros
-
-|-|-|
-|Category|Utility|
-|Userscript|[Porn Pros](https://github.com/peolic/userscripts){:target="_blank"}|
-|Description|Fixes duration on Porn Pros sites.|
-|Author|[peolic](https://github.com/peolic)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Vixen Media Group - Trailers, Studio Code, and Click to Copy
-
-|-|-|
-|Category|Utility|
-|Userscript|[Vixen Media Group - Trailers, Studio Code, and Click to Copy](https://github.com/mmenanno/userscripts#vixen-media-group---trailers-studio-code-and-click-to-copy){:target="_blank"}|
-|Description|Displays Studio Code, displays trailer links in 320p, 480p, 720p, 1080p, and 2160p formats (links open in new tab), click to copy studio code, click to copy date in stash format (YYYY-MM-DD), click to copy duration, click to copy Director name.|
-|Author|[mmenanno](https://github.com/mmenanno)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Freeones Forum Link Corrector
-
-|-|-|
-|Category|Utility|
-|Userscript|[Freeones Forum Link Corrector](https://github.com/mmenanno/userscripts#freeones-forum-link-corrector){:target="_blank"}|
-|Description|Converts old `board.freeones.showthread.php` style freeones links to the new format in order to avoid broken links. Currently runs on theNude, indexxx, and freeones. More can be added if there is a common need for them.|
-|Author|[mmenanno](https://github.com/mmenanno)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## ModelHub Exact Date
-
-|-|-|
-|Category|Utility|
-|Userscript|[ModelHub Exact Date](https://github.com/mmenanno/userscripts#modelhub-exact-date){:target="_blank"}|
-|Description|Replaces the approximate date (ex. 3 years ago) for a scene with an exact one in YYYY-MM-DD format as long as the user is logged in to a PornHub account. Modelhub has a tracking script for user activity that only triggers when the user is logged into a Pornhub account. This script contains the video's upload date, this is why being logged in is required. You will also be able to click on the date to copy it.|
-|Author|[mmenanno](https://github.com/mmenanno)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## ATK Girlfriends Scene and Image Links with Click to Copy
-
-|-|-|
-|Category|Utility|
-|Userscript|[ATK Girlfriends Scene and Image Links with Click to Copy](https://github.com/mmenanno/userscripts#atk-girlfriends-scene-and-image-links-with-click-to-copy){:target="_blank"}|
-|Description|This helps getting metadata from ATK Girlfriends. This runs on the model page as it solves this issues that a lot of scene pages on ATK Girlfriends will just return a blank white page. This script: extracts the scene link, adds a link, and a click to copy button, extracts the scene images, manipulates the url to be the larger version, adds a link, and a click to copy button, adds a click to copy button to the title, adds a click to copy button to the description.|
-|Author|[mmenanno](https://github.com/mmenanno)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## Stash Checker
-
-|-|-|
-|Category|Utility|
-|Userscript|[Stash Checker](https://github.com/timo95/stash-checker){:target="_blank"}|
-|Description|Checks if a Scene/Performer is in your Stash instance. It shows a checkmark if an item was found in your Stash. Supported websites include StashDB, TPDB, IAFD, JabLibrary and many more. Other features: A tooltip with the items metadata, multiple Stash endpoints, support for movies, galleries, etc.|
-|Author|[timo95](https://github.com/timo95)|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_Checker.png)|
diff --git a/add-ons/utilities.md b/add-ons/utilities.md
deleted file mode 100644
index 01e0b64a..00000000
--- a/add-ons/utilities.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-layout: clean
-title: Utilities
-nav_order: 5
-parent: Add-ons
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Utilities are other external applications that utilise or interact with Stash in some way.
-
-{: .note }
-These 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.
-
-## Stash_helper
-
-|-|-|
-|Category|Companion|
-|Utility|[Stash_helper](https://github.com/philpw99/Stash_Helper){:target="_blank"}|
-|Description|Adds some helping features to Stash (Bookmarks, playlist, external player... etc).|
-|Author|[philpw99](https://github.com/philpw99){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/Stash_helper-1.png)|
-
-## stash-vr
-
-|-|-|
-|Category|VR|
-|Utility|[stash-vr](https://github.com/o-fl0w/stash-vr){:target="_blank"}|
-|Description|Watch your stash library in VR.|
-|Author|[o-fl0w](https://github.com/o-fl0w){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## stash-vr-companion
-
-|-|-|
-|Category|VR|
-|Utility|[stash-vr-companion](https://github.com/Tweeticoats/stash-vr-companion){:target="_blank"}|
-|Description|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.|
-|Author|[Tweeticoats](https://github.com/Tweeticoats){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## stash-webvr
-
-|-|-|
-|Category|VR|
-|Utility|[stash-webvr](https://gitlab.com/stish/stash-webvr){:target="_blank"}|
-|Description|WebVR friendly Stash client that displays only videos tagged with "Virtual Reality" tag.|
-|Author|[stishadmin](https://gitlab.com/stishadmin){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## stash-compilation-maker
-
-|-|-|
-|Category|Markers|
-|Utility|[stash-compilation-maker](https://github.com/soundchaser128/stash-compilation-maker){:target="_blank"}|
-|Description|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.|
-|Author|[soundchaser128](https://github.com/soundchaser128){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## ClipMash
-
-|-|-|
-|Category|Compilations|
-|Utility|[clip-mash](https://github.com/soundchaser128/clip-mash){:target="_blank"}|
-|Description|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.|
-|Author|[soundchaser128](https://github.com/soundchaser128){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)|
-
-## stash-qmt
-
-|-|-|
-|Category|Tags|
-|Utility|[stash-qmt](https://github.com/PokerFacowaty/stash-qmt){:target="_blank"}|
-|Description|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.|
-|Author|[PokerFacowaty](https://github.com/PokerFacowaty){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/stash-qmt-1.png)![](/assets/add-ons/stash-qmt-2.png)|
-
-## Stash App for Android TV
-
-|-|-|
-|Category|TV|
-|Utility|[StashAppAndroidTV](https://github.com/damontecres/StashAppAndroidTV){:target="_blank"}|
-|Description|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.|
-|Author|[damontecres](https://github.com/damontecres){:target="_blank"}|
-|Screenshots|![](/assets/add-ons/fixed_table_width.png)![](/assets/add-ons/StashAppAndroidTV-1.png)![](/assets/add-ons/StashAppAndroidTV-2.png)![](/assets/add-ons/StashAppAndroidTV-3.png)|
diff --git a/advanced-tutorials.md b/advanced-tutorials.md
deleted file mode 100644
index 96effe4b..00000000
--- a/advanced-tutorials.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: clean
-title: Advanced Tutorials
-nav_order: 8
-has_children: true
-has_toc: false
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. [Advanced Configuration Options](/advanced-tutorials/advanced-configuration-options)
-2. [Importing via CSV Using gql-iterate](/advanced-tutorials/importing-via-csv-using-gql-iterate)
-3. [Manually Editing the Stash Sqlite3 Database](/advanced-tutorials/manually-editing-the-stash-sqlite3-database)
-
\ No newline at end of file
diff --git a/assets/getting-started/docker_logo.svg b/assets/getting-started/docker_logo.svg
deleted file mode 100644
index df60469e..00000000
--- a/assets/getting-started/docker_logo.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/getting-started/drive_location.png b/assets/getting-started/drive_location.png
deleted file mode 100644
index 939e3a3f..00000000
Binary files a/assets/getting-started/drive_location.png and /dev/null differ
diff --git a/assets/getting-started/linux_logo.svg b/assets/getting-started/linux_logo.svg
deleted file mode 100644
index b6ca3d22..00000000
--- a/assets/getting-started/linux_logo.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/getting-started/mac_logo.svg b/assets/getting-started/mac_logo.svg
deleted file mode 100644
index aaa4004f..00000000
--- a/assets/getting-started/mac_logo.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/getting-started/scan_options.png b/assets/getting-started/scan_options.png
deleted file mode 100644
index c235a310..00000000
Binary files a/assets/getting-started/scan_options.png and /dev/null differ
diff --git a/assets/getting-started/windows_logo.svg b/assets/getting-started/windows_logo.svg
deleted file mode 100644
index b6670956..00000000
--- a/assets/getting-started/windows_logo.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/home/video.png b/assets/home/video.png
deleted file mode 100644
index c73c8495..00000000
Binary files a/assets/home/video.png and /dev/null differ
diff --git a/assets/logo.png b/assets/logo.png
deleted file mode 100644
index d74ccb2e..00000000
Binary files a/assets/logo.png and /dev/null differ
diff --git a/assets/logo.svg b/assets/logo.svg
deleted file mode 100644
index 65e43543..00000000
--- a/assets/logo.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/logo_v2.png b/assets/logo_v2.png
deleted file mode 100644
index 5a215f6a..00000000
Binary files a/assets/logo_v2.png and /dev/null differ
diff --git a/assets/logo_v2.svg b/assets/logo_v2.svg
deleted file mode 100644
index 8063871a..00000000
--- a/assets/logo_v2.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/logo_v4.png b/assets/logo_v4.png
deleted file mode 100644
index 127e0477..00000000
Binary files a/assets/logo_v4.png and /dev/null differ
diff --git a/beginner-guides.md b/beginner-guides.md
deleted file mode 100644
index e40c9597..00000000
--- a/beginner-guides.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: clean
-title: Beginner Guides
-nav_order: 4
-has_children: true
-has_toc: false
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. [Guide to Scraping](/beginner-guides/guide-to-scraping)
-2. [Backup & Restore Database](/beginner-guides/backup-and-restore-database)
-3. [Exclude File Configuration](/beginner-guides/exclude-file-configuration)
-4. [Troubleshooting Video Playback](/beginner-guides/troubleshooting-video-playback)
-
diff --git a/beginner-guides/backup-and-restore-database.md b/beginner-guides/backup-and-restore-database.md
deleted file mode 100644
index c23970c5..00000000
--- a/beginner-guides/backup-and-restore-database.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-layout: clean
-title: Backup & Restore Database
-nav_order: 2
-parent: Beginner Guides
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Backup
-
-Always use the UI to create a backup of the DB. As with all live databases **DO NOT** copy manually the database file as a means of backup.
-The `Backup` or `Download Backup` tasks are the proper way to create a backup file.
-
-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.
-
-# Restore
-
-Assuming you have properly created a backup file you can use it to restore your database if needed.
-For the location of the db file check your configuration's `Database Path`.
-The restore procedure uses the default `stash-go.sqlite` filename, if you changed that when configuring stash adjust accordingly.
-
-The following steps are recommended when restoring a database file.
-
-1. Create a backup of the current database (Optional)
-1. Stop stash
-1. Move or delete the `stash-go.sqlite` database file (along with the `-shm` `-wal` `.journal` files if present)
-1. Copy the backup file that you want to restore to `stash-go.sqlite`
-1. Make sure that you now have a `stash-go.sqlite` file and that no `-shm` `-wal` `.journal` files are present.
-1. Start stash
-
-You should now have stash running with a working and restored database.
-
-# Advanced Troubleshooting
-
-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.
-For cases like this it is better to visit the [discord channel](https://discord.gg/frQ7qBvB3S).
-
-
-
-
diff --git a/beginner-guides/exclude-file-configuration.md b/beginner-guides/exclude-file-configuration.md
deleted file mode 100644
index 2d2fbc36..00000000
--- a/beginner-guides/exclude-file-configuration.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: clean
-title: Exclude File Configuration
-nav_order: 3
-parent: Beginner Guides
-
----
-
-Given a valid [regex](https://github.com/google/re2/wiki/Syntax){:target="_blank"}, files that match even partially are excluded during the Scan process and are not entered in the database.Also during the Clean task if these files exist in the DB they are removed from it and their generated files get deleted.
-Prior to matching both the filenames and patterns are converted to lower case so the match is case insensitive.
-
-Regex patterns can be added in the config file or from the UI.
-If you add manually to the config file a restart is needed while from the UI you just need to click the Save button.
-When added through the config file directly special care must be given to double escape the `\` character.
-
-Some examples
-
-For the config file you need the following added
-```
-exclude:
-- "sample\\.mp4$"
-- "/\\.[[:word:]]+/"
-- "c:\\\\stash\\\\videos\\\\exclude"
-- "^/stash/videos/exclude/"
-- "\\\\\\\\stash\\network\\\\share\\\\excl\\\\"
-```
-* the first excludes all files ending in `sample.mp4` ( `.` needs to be escaped also)
-* the second hidden directories `/.directoryname/`
-* the third is an example for a windows directory `c:\stash\videos\exclude`
-* the fourth the directory `/stash/videos/exclude/`
-* and the last a windows network path `\\stash\network\share\excl\`
-
-and thats how it looks if you use UI (notice the difference for the `\` character)
-
-![regexUI](/assets/beginner-guides/regexui.png)
-
-{: .note }
-Useful [link](https://regex101.com/?flavor=golang){:target="_blank"} to experiment with regexps (we use "Golang" as the regex flavour).
\ No newline at end of file
diff --git a/builder/LICENSE b/builder/LICENSE
new file mode 100644
index 00000000..e0c3d70f
--- /dev/null
+++ b/builder/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 FansDB
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/builder/build.ts b/builder/build.ts
new file mode 100644
index 00000000..2293629b
--- /dev/null
+++ b/builder/build.ts
@@ -0,0 +1,89 @@
+import axios from 'axios'
+import YAML from 'yaml'
+import fs from 'fs'
+import path from 'path'
+
+import { LocalCollection, LocalRepository, LocalSidecar, RemoteIndex } from './types'
+import { Plugin } from './plugin'
+import { infoLog, warnLog } from './utils'
+
+// iterate over folder
+async function searchRepository(pathName: string = "plugins"): Promise {
+ const repoPath = path.resolve(`./repositories/${pathName}`)
+ const repoFiles = fs.readdirSync(repoPath)
+
+ const repositories: LocalRepository[] = []
+ // find all files
+ repoFiles.forEach(file => {
+ if (file.endsWith(".yml")) {
+ const fileData = fs.readFileSync(`${repoPath}/${file}`, 'utf8')
+ const localRepo: LocalRepository = YAML.parse(fileData)
+ repositories.push(localRepo)
+ }
+ })
+ // iterate over repositories
+ const plugins: Plugin[] = []
+ for (const repo of repositories) {
+ const plugin = await parseRepository(repo)
+ plugins.push(...plugin)
+ }
+ // sort plugins and print to md
+ const sortedPlugins = plugins
+ .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()))
+ return sortedPlugins
+}
+
+function printPlugins(outputName: string, sortedPlugins: Plugin[]) {
+ // print to file
+ const outputPath = `./dist/${outputName}/list.md`
+ const stream = fs.createWriteStream(outputPath)
+ stream.write(`# List of ${outputName} \n\n`)
+ // iterate over plugins
+ for (const plugin of sortedPlugins) {
+ stream.write(plugin.printMD())
+ stream.write("\n")
+ }
+ stream.end()
+}
+
+async function parseRepository(localRepository: LocalRepository): Promise {
+ // load from parsed
+ const repoDefaults: LocalCollection = localRepository.collection
+ const repoSidecars: LocalSidecar[] = localRepository.scripts
+ // grab from index.yml
+ const indexData: RemoteIndex = await axios.get(repoDefaults.index)
+ .then(res => YAML.parse(res.data))
+ // iterate over remote index and match with sidecars
+ const indexPlugins: Plugin[] = []
+ for (const index of indexData) {
+ const sidecarMatch = repoSidecars.find(sidecar => sidecar.id == index.id)
+ if (sidecarMatch?.hide) {
+ // skip if hidden, but warn
+ infoLog(`Skipping hidden plugin: ${index.name}`)
+ continue
+ }
+ if (repoDefaults.exclusive && !sidecarMatch) continue // if exclusive, skip if no sidecar
+ const plugin = new Plugin(repoDefaults, sidecarMatch, index)
+ indexPlugins.push(plugin)
+ }
+ // check if there are leftover sidecars
+ const extraSidecars = repoSidecars.filter(sidecar => !indexPlugins.find(plugin => plugin.id == sidecar.id && !sidecar.hide))
+ if (extraSidecars.length > 0) {
+ warnLog(`Found ${extraSidecars.length} extra sidecars in ${localRepository.name}`)
+ extraSidecars.forEach(sidecar => warnLog(` ${sidecar.id}`))
+ }
+ return indexPlugins
+}
+
+async function run() {
+ // generate themes first then exclude
+ const themes = await searchRepository("themes")
+ printPlugins("themes", themes)
+ // generate plugins with themes excluded
+ const plugins = await searchRepository("plugins")
+ // remove themes from plugins
+ const filteredPlugins = plugins.filter(plugin => !themes.some(theme => theme.id == plugin.id))
+ printPlugins("plugins", filteredPlugins)
+}
+
+run()
\ No newline at end of file
diff --git a/builder/plugin.ts b/builder/plugin.ts
new file mode 100644
index 00000000..ccda7d53
--- /dev/null
+++ b/builder/plugin.ts
@@ -0,0 +1,78 @@
+import * as utils from './utils'
+import { LocalCollection, LocalSidecar, RemotePlugin } from './types'
+
+export class Plugin {
+ id: string // internal id of plugin
+ name: string // display name of plugin
+ description: string // description of plugin if available
+ index: string // index url of collection
+ repo: string // repository of collection
+ author: string // author of plugin
+ path: string // path to plugin in repository
+ screenshots: string[] // screenshots of plugin
+ readme: string | boolean | undefined // readme file
+ base_path: string // path to plugins/ folder
+ repo_path: string // path to repository in the format of owner/repo
+
+ constructor(defaults: LocalCollection, sidecar: LocalSidecar | undefined, index: RemotePlugin) {
+ this.id = index.id
+ this.name = index.name
+ this.description = index?.metadata?.description
+ ?? sidecar?.description
+ ?? "No Description Provided"
+ this.index = defaults.index
+ this.repo = defaults.global_repo
+ this.author = sidecar?.author
+ ?? defaults?.global_author // fall back to global author
+ ?? "No Author" // if no author
+ this.path = sidecar?.path
+ ?? index.id // default to ID
+ this.screenshots = sidecar?.screenshots ?? []
+ this.readme = sidecar?.readme ?? true // readme file
+ this.base_path = defaults.base_path ?? "main/plugins"
+ this.repo_path = `${this.base_path}/${this.path}`
+ }
+
+ printMD() {
+ // pre prepared values
+ const folderPath = `https://github.com/${this.repo}/tree/${this.repo_path}`
+ const filePath = `https://github.com/${this.repo}/blob/${this.repo_path}`
+ // if false, no readme
+ // if true, default readme
+ // otherwise, follow path or url
+ const readme = typeof(this.readme) == "string" // if readme is string
+ ? this.readme.includes("http") // if link, add target blank
+ ? `View [README](${this.readme}){target=_blank}`
+ : `View [README](${filePath}/${this.readme}){target=_blank}`
+ : this.readme // readme is boolean
+ ? `View [README](${filePath}/README.md){target=_blank}` // default path
+ : "No README available"
+ const screenshots = this.screenshots
+ .map(screenshot => `![${this.name} screenshot](${screenshot}){ loading=lazy } `)
+ .join("")
+ // ugly formatted markdown
+ return `
+### [${this.name}](${folderPath}){target=_blank}
+
+=== "Description"
+
+ ${utils.sanitizeMD(this.description)}
+
+=== "Source URL"
+
+ \`\`\`
+ ${this.index}
+ \`\`\`
+
+=== "README"
+
+ ${readme}
+
+=== "Author"
+
+ ${this.author.replace(/(\[.+\]\(http.+\)(?:,|\r|\n|\r\n))/g, "{target=_blank}")}
+
+=== "Screenshots"
+ ${screenshots}`
+ }
+}
diff --git a/builder/repositories/plugins/7djx1qp-stash-plugins.yml b/builder/repositories/plugins/7djx1qp-stash-plugins.yml
new file mode 100644
index 00000000..f24bafc8
--- /dev/null
+++ b/builder/repositories/plugins/7djx1qp-stash-plugins.yml
@@ -0,0 +1,146 @@
+collection:
+ index: https://7djx1qp.github.io/stash-plugins/main/index.yml
+ global_repo: 7dJx1qP/stash-plugins
+ global_author: "[7dJx1qP](https://github.com/7dJx1qP)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: stashBatchQueryEdit
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/config.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/scenes-tagger.png
+
+ - id: stashBatchResultToggle
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/config.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/scenes-tagger.png
+
+ - id: stashBatchSave
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Save/scenes-tagger.png
+
+ - id: stashBatchSearch
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Search/scenes-tagger.png
+
+ - id: stashMarkdown
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markdown/tag-description.png
+
+ - id: stashMarkersAutoscroll
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markers%20Autoscroll/scroll-settings.png
+
+ - id: stashNewPerformerFilterButton
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20New%20Performer%20Filter%20Button/performers-page.png
+
+ - id: stashOpenMediaPlayer
+ readme: false
+
+ - id: stashPerformerAuditTaskButton
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Audit%20Task%20Button/performers-page.png
+
+ - id: stashPerformerCustomFields
+ readme: https://github.com/7dJx1qP/stash-plugins/blob/main/plugins/stashPerformerCustomFields/README.md
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view-compact.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-edit.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/performer-details-edit.png
+
+ - id: stashPerformerImageCropper
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Image%20Cropper/performer-image-cropper.png
+
+ - id: stashPerformerMarkersTab
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Markers%20Tab/performer-page.png
+
+ - id: stashPerformerTaggerAdditions
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Tagger%20Additions/performer-tagger.png
+
+ - id: stashPerformerURLSearchbox
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20URL%20Searchbox/performers-page.png
+
+ - id: stashSceneTaggerAdditions
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/config.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/scenes-tagger.png
+
+ - id: stashSceneTaggerColorizer
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/config.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/scenes-tagger.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/tag-colors.png
+
+ - id: stashSceneTaggerDraftSubmit
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Draft%20Submit/scenes-tagger.png
+
+ - id: stashSetStashboxFavoritePerformers
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Set%20Stashbox%20Favorite%20Performers/performers-page.png
+
+ - id: stashStashIDIcon
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/performer-page.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/studio-page.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/scene-page.png
+
+ - id: stashStashIDInput
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/performer-page.png
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/studio-page.png
+
+ - id: stashStashboxSceneCount
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stashbox%20Scene%20Count/performer.png
+
+ - id: stashStats
+ readme: https://github.com/7dJx1qP/stash-plugins/blob/main/plugins/stashStats/README.md
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stats/stats-page.png
+
+ - id: stashTagImageCropper
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Tag%20Image%20Cropper/tag-image-cropper.png
+
+ - id: stashUserscriptLibrary7dJx1qP
+ readme: false
+
+ - id: stashVideoPlayerABLoopTimeInput
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Video%20Player%20AB%20Loop%20Time%20Input/ab-loop-time-input.png
\ No newline at end of file
diff --git a/builder/repositories/plugins/MinasukiHikimuna-MidnightRider-Stash.yml b/builder/repositories/plugins/MinasukiHikimuna-MidnightRider-Stash.yml
new file mode 100644
index 00000000..50304001
--- /dev/null
+++ b/builder/repositories/plugins/MinasukiHikimuna-MidnightRider-Stash.yml
@@ -0,0 +1,21 @@
+name: MinasukiHikimuna/MidnightRider-Stash plugins
+collection:
+ index: https://minasukihikimuna.github.io/MidnightRider-Stash/index.yml
+ global_repo: MinasukiHikimuna/MidnightRider-Stash
+ global_author: "[MinasukiHikimuna](https://github.com/MinasukiHikimuna)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: CompleteTheStash
+ readme: https://github.com/MinasukiHikimuna/MidnightRider-Stash/blob/main/plugins/CompleteTheStash/README.md
+
+ - id: HashTheStash
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/plugins/S3L3CT3DLoves-stashPlugins.yml b/builder/repositories/plugins/S3L3CT3DLoves-stashPlugins.yml
new file mode 100644
index 00000000..413e3e98
--- /dev/null
+++ b/builder/repositories/plugins/S3L3CT3DLoves-stashPlugins.yml
@@ -0,0 +1,26 @@
+collection:
+ index: https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml
+ global_repo: S3L3CT3DLoves/stashPlugins
+ global_author: "[S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: cleanupUI
+ readme: https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/CleanupUI/README.md
+
+ - id: easytag
+ readme: https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/QuickEdit/README.md
+
+ - id: folderSort
+ readme: https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/folderSort/README.md
+
+ - id: myIp
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/plugins/Valkyr-JS-stash-plugins.yml b/builder/repositories/plugins/Valkyr-JS-stash-plugins.yml
new file mode 100644
index 00000000..6bb2e0aa
--- /dev/null
+++ b/builder/repositories/plugins/Valkyr-JS-stash-plugins.yml
@@ -0,0 +1,26 @@
+collection:
+ index: https://valkyr-js.github.io/stash-plugins/index.yml
+ global_repo: Valkyr-JS/stash-plugins
+ global_author: "[Valkyr-JS](https://github.com/Valkyr-JS)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: PerformerDetailsExtended
+ readme: https://github.com/Valkyr-JS/PerformerDetailsExtended/blob/main/README.md
+
+ - id: StashReels
+ readme: https://github.com/Valkyr-JS/StashReels/blob/main/README.md
+
+ - id: ValkyrSceneCards
+ readme: https://github.com/Valkyr-JS/ValkyrSceneCards/blob/main/README.md
+ screenshots:
+ - /assets/plugins/ValkyrSceneCards/1.png
+ - /assets/plugins/ValkyrSceneCards/2.png
\ No newline at end of file
diff --git a/builder/repositories/plugins/carrotwaxr-stash-plugins.yml b/builder/repositories/plugins/carrotwaxr-stash-plugins.yml
new file mode 100644
index 00000000..cdbd4fba
--- /dev/null
+++ b/builder/repositories/plugins/carrotwaxr-stash-plugins.yml
@@ -0,0 +1,17 @@
+collection:
+ index: https://carrotwaxr.github.io/stash-plugins/stable/index.yml
+ global_repo: carrotwaxr/stash-plugins
+ global_author: "[carrotwaxr](https://github.com/carrotwaxr)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: mcMetadata
+ readme: https://github.com/carrotwaxr/stash-plugins/blob/main/plugins/mcMetadata/README.md
\ No newline at end of file
diff --git a/builder/repositories/plugins/d0t-d0t-d0t-stash-repo-plugins.yml b/builder/repositories/plugins/d0t-d0t-d0t-stash-repo-plugins.yml
new file mode 100644
index 00000000..da5aad86
--- /dev/null
+++ b/builder/repositories/plugins/d0t-d0t-d0t-stash-repo-plugins.yml
@@ -0,0 +1,19 @@
+name: d0t-d0t-d0t plugins
+collection:
+ index: https://raw.githubusercontent.com/d0t-d0t-d0t/stash-repo/refs/heads/dist/index.yml
+ global_repo: d0t-d0t-d0t/stash-repo
+ global_author: "[d0t-d0t-d0t](https://github.com/d0t-d0t-d0t)"
+ base_path: main/Plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: stashAudioPlayer
+ readme: https://github.com/d0t-d0t-d0t/stash-repo/blob/main/Plugins/stashaudioplayer/about.md
+ path: stashaudioplayer
\ No newline at end of file
diff --git a/builder/repositories/plugins/feederbox826-plugins.yml b/builder/repositories/plugins/feederbox826-plugins.yml
new file mode 100644
index 00000000..66b8c88d
--- /dev/null
+++ b/builder/repositories/plugins/feederbox826-plugins.yml
@@ -0,0 +1,95 @@
+name: feederbox826 plugins
+collection:
+ index: https://feederbox826.github.io/plugins/main/index.yml
+ global_repo: feederbox826/plugins
+ global_author: "[feederbox826](https://feederbox.cc)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: 0gql-intercept
+ readme: false
+
+ - id: avg-rating
+ readme: false
+
+ - id: deletefp
+ readme: false
+
+ - id: edit-unorganized
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/edit-unorganized/README.md
+
+ - id: fontawesome-js
+ readme: false
+
+ - id: forbiddenConfig
+ readme: false
+
+ - id: log-console
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/log-console/README.md
+
+ - id: markergen
+ readme: false
+
+ - id: rebrand
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/rebrand/README.md
+
+ - id: s6-helper
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/s6-helper/README.md
+
+ - id: skip-intro
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/skip-intro/README.md
+
+ - id: stash-omnisearch
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/stash-omnisearch/README.md
+
+ - id: stash-open
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/stash-open/README.md
+
+ - id: stashdb-api
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/stashdb-api/README.md
+
+ - id: stashdb-fullimg
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/stashdb-fullimg/README.md
+
+ - id: studio-img-bg
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/studio-img-bg/README.md
+ screenshots:
+ - "https://raw.githubusercontent.com/feederbox826/plugins/main/docs/studio-image-bg_after.png"
+
+ - id: tag-filter
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/tag-filter/README.md
+
+ - id: tag-graph-js
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/tag-graph-js/README.md
+
+ - id: tag-import
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/tag-import/README.md
+
+ - id: tag-video
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/tag-video/README.md
+
+ - id: tagger-img-res
+ readme: false
+
+ - id: titleobserver
+ readme: false
+
+ - id: vjs-mmb-fullscreen
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/vjs-mmb-fullscreen/README.md
+
+ - id: vjs-shortcut
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/vjs-shortcut/README.md
+
+ - id: watched-video
+ readme: https://github.com/feederbox826/plugins/blob/main/plugins/watched-video/README.md
+
+ - id: wfke
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/plugins/feederbox826-stashlist.yml b/builder/repositories/plugins/feederbox826-stashlist.yml
new file mode 100644
index 00000000..6530907c
--- /dev/null
+++ b/builder/repositories/plugins/feederbox826-stashlist.yml
@@ -0,0 +1,17 @@
+collection:
+ index: https://feederbox826.github.io/stashlist/main/index.yml
+ global_repo: feederbox826/stashlist
+ global_author: "[feederbox826](https://github.com/feederbox826)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: stashlist-sync
+ readme: https://github.com/feederbox826/stashlist/blob/main/README.md
\ No newline at end of file
diff --git a/builder/repositories/plugins/rosa-umineko-CommunityScripts-plugins.yml b/builder/repositories/plugins/rosa-umineko-CommunityScripts-plugins.yml
new file mode 100644
index 00000000..cfbd9817
--- /dev/null
+++ b/builder/repositories/plugins/rosa-umineko-CommunityScripts-plugins.yml
@@ -0,0 +1,21 @@
+collection:
+ index: https://rosa-umineko.github.io/CommunityScripts/stable/index.yml
+ global_repo: rosa-umineko/CommunityScripts
+ global_author: "[rosa-umineko](https://github.com/rosa-umineko)"
+ base_path: main/plugins
+ exclusive: true
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: addImagesToTags
+ readme: false
+
+ - id: setSceneCover
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/plugins/serechops-Serechops-Stash-plugins.yml b/builder/repositories/plugins/serechops-Serechops-Stash-plugins.yml
new file mode 100644
index 00000000..ccde8550
--- /dev/null
+++ b/builder/repositories/plugins/serechops-Serechops-Stash-plugins.yml
@@ -0,0 +1,149 @@
+collection:
+ index: https://serechops.github.io/Serechops-Stash/index.yml
+ global_repo: serechops/Serechops-Stash
+ global_author: "[serechops](https://github.com/serechops)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: Movie-Fy
+ path: Movie-Fy/Movie-Fy
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: Movie-Fy Bulk Movie URL Scrape
+ path: Movie-Fy/Movie-Fy%20Bulk%20Movie%20URL%20Scrape
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: Movie-Fy Check and Update Scene Titles
+ path: Movie-Fy/Movie-Fy%20Check%20and%20Update%20Scene%20Titles
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: Movie-Fy Create Movie Studio
+ path: Movie-Fy/Movie-Fy%20Create%20Movie%20Studio
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: Movie-Fy Scene Studio Bulk Update
+ path: Movie-Fy/Movie-Fy%20Scene%20Studio%20Bulk%20Update
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: Movie-Fy Update Movie Scene Covers
+ path: Movie-Fy/Movie-Fy%20Update%20Movie%20Scene%20Covers
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md
+
+ - id: performer_image_export
+ path: PerformerImageExport
+ readme: false
+
+ - id: renamer-dev
+ path: Renamer-Dev
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Renamer-Dev/README.md
+
+ - id: renamer
+ path: Renamer
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Renamer/README.md
+
+ - id: SceneHub
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/SceneHub/README.md
+
+ - id: bulkImportPerformers
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/bulkImportPerformers/README.md
+
+ - id: findMarkerTagImages
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/findMarkerTagImages/README.md
+
+ - id: image2Scene
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/image2Scene/README.md
+
+ - id: markerDupes
+ readme: false
+
+ - id: performerGallery
+ readme: false
+
+ - id: performerSceneCompare
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/performerSceneCompare/README.md
+
+ - id: pluginsBackup
+ readme: false
+
+ - id: sceneSpecsOverlay
+ readme: false
+
+ - id: scenesMovieDuration
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/scenesMovieDuration/README.md
+
+ - id: stashBatchCreateAll
+ readme: false
+
+ - id: stashDBTagImport
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDBTagImport/README.md
+
+ - id: stashDisable
+ path: stashDisableAll/stashDisable
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md
+
+ - id: stashDisableAll
+ path: stashDisableAll/stashDisableAll
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md
+
+ - id: stashDynamicGroups
+ readme: false
+
+ - id: stashFPSOverlay
+ readme: false
+
+ - id: stashEnableFromSave
+ path: stashDisableAll/stashEnableFromSave
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md
+
+ - id: stashJellyfinExport
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashJellyfinExporter/README.md
+
+ - id: stashPerformerMatchScrape
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashPerformerMatchScrape/README.md
+
+ - id: stashPluginYAMLGUI
+ readme: false
+
+ - id: stashRIghtClickGalleries
+ readme: false
+
+ - id: stashRightClickImages
+ readme: false
+
+ - id: stashRightClickPerformerMerge
+ readme: false
+
+ - id: stashRightClickPerformers
+ readme: false
+
+ - id: stashRightClickScenes
+ readme: false
+
+ - id: stashRightClickSettings
+ readme: false
+
+ - id: stashRightClickTags
+ readme: false
+
+ - id: stashSceneFileSize
+ readme: false
+
+ - id: stashStudioLogoWallView
+ readme: false
+
+ - id: stashTagPerformerImage
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashTagPerformerImage/README.md
+
+ - id: stashTimestamps
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashTimestamps/README.md
+
+ - id: studioTopPerformer
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/plugins/studioTopPerformer/README.md
\ No newline at end of file
diff --git a/builder/repositories/plugins/stashapp-CommunityScripts-plugins.yml b/builder/repositories/plugins/stashapp-CommunityScripts-plugins.yml
new file mode 100644
index 00000000..0e917f71
--- /dev/null
+++ b/builder/repositories/plugins/stashapp-CommunityScripts-plugins.yml
@@ -0,0 +1,165 @@
+name: stashapp/CommunityScripts Plugins
+collection:
+ index: https://stashapp.github.io/CommunityScripts/stable/index.yml
+ global_repo: stashapp/CommunityScripts
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: ai_tagger
+ path: AITagger
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/AITagger/README.md
+ author: "[skier233](https://github.com/skier233)"
+
+ - id: AdulttimeInteractiveDL
+ author: "[tooliload](https://github.com/tooliload)"
+
+ - id: CommunityScriptsUILibrary
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/CommunityScriptsUILibrary/README.md
+
+ - id: date_parser
+ path: DateParser
+ readme: false
+ author: HijackHornet
+
+ - id: filemonitor
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/FileMonitor/README.md
+ author: "[David-Maisonave](https://github.com/David-Maisonave)"
+ screenshots:
+ - /assets/plugins/filemonitor/1.png
+
+ - id: PythonToolsInstaller
+ author: "[tooliload](https://github.com/tooliload)"
+
+ - id: renamefile
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/RenameFile/README.md
+ author: "[David-Maisonave](https://github.com/David-Maisonave)"
+
+ - id: TPDBMarkers
+ readme: false
+ author: "[Tweeticoats](https://github.com/Tweeticoats)"
+
+ - id: VideoScrollWheel
+ readme: false
+ author: "[WeedLordVegeta420](https://github.com/WeedLordVegeta420)"
+
+ - id: cjCardTweaks
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/cjCardTweaks/README.md
+ screenshots:
+ - /assets/plugins/cjCardTweaks/1.png
+ - /assets/plugins/cjCardTweaks/2.png
+ - /assets/plugins/cjCardTweaks/3.png
+
+ - id: comicInfoExtractor
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/comicInfoExtractor/README.md
+ author: "[yoshnopa](https://github.com/yoshnopa)"
+
+ - id: defaultDataForPath
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/defaultDataForPath/README.md
+ author: "[TheSinfulKing](https://github.com/TheSinfulKing)"
+
+ - id: discordPresence
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/discordPresence/README.md
+ author: NotForMyCV
+
+ - id: dupeMarker
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/dupeMarker/README.md
+ author: "[feederbox826](https://github.com/feederbox826)"
+
+ - id: filenameParser
+ readme: false
+ author: "[gitgiggety](https://github.com/gitgiggety)"
+
+ - id: hotCards
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/hotCards/README.md
+ author: "[HandyRandyx](https://github.com/HandyRandyx)"
+
+ - id: markerDeleteButton
+ readme: false
+ author: "[WeedLordVegeta420](https://github.com/WeedLordVegeta420]"
+
+ - id: markerTagToScene
+ author: "[WithoutPants](https://github.com/WithoutPants)"
+ readme: false
+
+ - id: miscTags
+ readme: false
+ author: "[Tweeticoats](https://github.com/Tweeticoats)"
+
+ - id: pathParser
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/pathParser/README.md
+ author: "[ImJustMatt](https://github.com/ImJustMatt)"
+
+ - id: qxSceneCard
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/qxSceneCard/README.md
+ author: "[Qx](https://github.com/QxxxGit)"
+
+ - id: renamerOnUpdate
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/renamerOnUpdate/README.md
+ author: "[Belleyy](https://github.com/Belleyy)"
+ screenshots:
+ - /assets/plugins/renamerOnUpdate/1.png
+
+ - id: sceneCoverCropper
+ author: "[feederbox826](https://github.com/feederbox826)"
+ readme: false
+
+ - id: set_scene_cover
+ path: setSceneCoverFromFile
+ author: "[stg-annon](https://github.com/stg-annon)"
+ readme: false
+
+ - id: stashAppAndroidTvCompanion
+ readme: false
+ author: "[damontecres](https://github.com/damontecres)"
+
+ - id: stashai
+ author: "[cc1234475](https://github.com/cc1234475)"
+ readme: false
+
+ - id: stashNotes
+ readme: false
+ author: "[QxxxGit](https://github.com/QxxxGit)"
+
+ - id: stash-realbooru
+ path: stashRealbooru
+ readme: false
+ author: "[cc1234475](https://github.com/cc1234475)"
+
+ - id: stashdb-performer-gallery
+ readme: false
+ author: "[Tweeticoats](https://github.com/Tweeticoats)"
+
+ - id: stats
+ readme: false
+ author: "[7dJx1qP](https://github.com/7dJx1qP)"
+
+ - id: tagScenesWithPerfTags
+ readme: false
+ author: "[Dankonite](https://github.com/Dankonite)"
+
+ - id: themeSwitch
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/themeSwitch/README.MD
+ author: "[elkorol](https://github.com/elkorol)"
+ screenshots:
+ - /assets/plugins/themeSwitch/1.png
+ - /assets/plugins/themeSwitch/2.png
+
+ - id: timestampTrade
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/timestampTrade/README.md
+ author: "[Tweeticoats](https://github.com/Tweeticoats)"
+
+ - id: titleFromFilename
+ readme: https://github.com/stashapp/CommunityScripts/blob/main/plugins/titleFromFilename/README.md
+ author: "[bnkai](https://github.com/bnkai)"
+
+ - id: visage
+ readme: false
+ author: "[cc1234475](https://github.com/cc1234475)"
\ No newline at end of file
diff --git a/builder/repositories/plugins/stg-annon-StashScripts.yml b/builder/repositories/plugins/stg-annon-StashScripts.yml
new file mode 100644
index 00000000..d7cfc95a
--- /dev/null
+++ b/builder/repositories/plugins/stg-annon-StashScripts.yml
@@ -0,0 +1,27 @@
+collection:
+ index: https://stg-annon.github.io/StashScripts/stable/index.yml
+ global_repo: stg-annon/StashScripts
+ global_author: "[stg-annon](https://github.com/stg-annon)"
+ base_path: main/plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: findFileErrors
+ readme: false
+
+ - id: performer_body_calculator
+ path: performerBodyCalculator
+ readme: https://github.com/stg-annon/StashScripts/blob/main/plugins/performerBodyCalculator/README.md
+
+ - id: phashDuplicateTagger
+ readme: https://github.com/stg-annon/StashScripts/blob/main/plugins/phashDuplicateTagger/README.md
+
+ - id: tagGraph
+ readme: https://github.com/stg-annon/StashScripts/blob/main/plugins/tagGraph/README.md
\ No newline at end of file
diff --git a/builder/repositories/plugins/tetrax-10-stash-stuffs-plugins.yml b/builder/repositories/plugins/tetrax-10-stash-stuffs-plugins.yml
new file mode 100644
index 00000000..539036e3
--- /dev/null
+++ b/builder/repositories/plugins/tetrax-10-stash-stuffs-plugins.yml
@@ -0,0 +1,33 @@
+collection:
+ index: https://tetrax-10.github.io/stash-stuffs/index.yml
+ global_repo: tetrax-10/stash-stuffs
+ global_author: "[tetrax-10](https://github.com/Tetrax-10)"
+ base_path: main/Plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: AutoSelectUpdatablePluginsAndScrapers
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/AutoSelectUpdatablePlugins/demo.gif
+
+ - id: AutoUpdatePluginsAndScrapers
+ readme: false
+
+ - id: PlayVideoIfPreviewNotFound
+ readme: false
+ screenshots:
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/play-video-if-preview-not-found/demo.gif
+
+ - id: ReplaceThumbnailsWithImages
+ readme: false
+
+ - id: TetraxUserscriptLibrary
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/plugins/w0lfiew0lf-StashApp-Tools-plugins.yml b/builder/repositories/plugins/w0lfiew0lf-StashApp-Tools-plugins.yml
new file mode 100644
index 00000000..62c442b3
--- /dev/null
+++ b/builder/repositories/plugins/w0lfiew0lf-StashApp-Tools-plugins.yml
@@ -0,0 +1,19 @@
+collection:
+ index: https://w0lfiew0lf.github.io/StashApp-Tools/index.yml
+ global_repo: W0lfieW0lf/StashApp-Tools
+ global_author: "[W0lfieW0lf](https://github.com/W0lfieW0lf)"
+ base_path: main/Plugins
+
+scripts:
+ - id: example
+ path: PluginName
+ description: "New description"
+ readme: https://github.com/ghost/PluginName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: lightbox-visualnovel
+ readme: https://github.com/W0lfieW0lf/StashApp-Tools/blob/main/Plugins/LightBox-VisualNovel/README.md
+ screenshots:
+ - https://raw.githubusercontent.com/W0lfieW0lf/StashApp-Tools/refs/heads/main/docs/images/LightBox-VisualNovel/LightBox-VisualNovel.gif
\ No newline at end of file
diff --git a/builder/repositories/themes/feederbox826-themes.yml b/builder/repositories/themes/feederbox826-themes.yml
new file mode 100644
index 00000000..384ebd1b
--- /dev/null
+++ b/builder/repositories/themes/feederbox826-themes.yml
@@ -0,0 +1,35 @@
+collection:
+ index: https://feederbox826.github.io/themes/main/index.yml
+ global_repo: feederbox826/themes
+ global_author: "[feederbox826](https://github.com/feederbox826)"
+ base_path: main/themes
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: alternative-tag-layout
+ readme: https://github.com/feederbox826/themes/blob/main/themes/alternative-tag-layout/README.md
+
+ - id: direct-stream
+ readme: https://github.com/feederbox826/themes/blob/main/themes/direct-stream/README.md
+
+ - id: hide-donate
+ readme: https://github.com/feederbox826/themes/blob/main/themes/hide-donate/README.md
+
+ - id: hide-ocount
+ readme: false
+
+ - id: more-studio-row
+ readme: https://github.com/feederbox826/themes/blob/main/themes/more-studio-row/README.md
+
+ - id: performer-grid
+ readme: https://github.com/feederbox826/themes/blob/main/themes/performer-grid/README.md
+
+ - id: wrap-subtag
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/themes/rosa-umineko-CommunityScripts-themes.yml b/builder/repositories/themes/rosa-umineko-CommunityScripts-themes.yml
new file mode 100644
index 00000000..25d821f0
--- /dev/null
+++ b/builder/repositories/themes/rosa-umineko-CommunityScripts-themes.yml
@@ -0,0 +1,18 @@
+collection:
+ index: https://rosa-umineko.github.io/CommunityScripts/stable/index.yml
+ global_repo: rosa-umineko/CommunityScripts
+ global_author: "[rosa-umineko](https://github.com/rosa-umineko)"
+ base_path: rosa-umineko/themes
+ exclusive: true
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: Theme-Shadcn
+ readme: false
\ No newline at end of file
diff --git a/builder/repositories/themes/serechops-Serechops-Stash-themes.yml b/builder/repositories/themes/serechops-Serechops-Stash-themes.yml
new file mode 100644
index 00000000..d2a4198f
--- /dev/null
+++ b/builder/repositories/themes/serechops-Serechops-Stash-themes.yml
@@ -0,0 +1,60 @@
+collection:
+ index: https://serechops.github.io/Serechops-Stash/index.yml
+ global_repo: serechops/Serechops-Stash
+ global_author: "[serechops](https://github.com/serechops)"
+ base_path: main/themes
+ exclusive: true
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: Glassy - A Window to Your Collection
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Font Overhaul
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Front Page Animations and Blur
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Images
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Installer
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Marker Wall Redesign
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Performer Scene Card Details Redesign
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Scene Player-Details 60-40
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Scene Player-Details Reversed 60-40
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Scene Player-Details Reversed
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Scene and Movie Card Redesign - No Animated Titles
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Scene and Movie Card Redesign
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Smaller Performer Cards on Main Page
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Smaller Performer Image Cards
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
+
+ - id: Glassy - Video-Res Icons
+ readme: https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md
\ No newline at end of file
diff --git a/builder/repositories/themes/stashapp-CommunityScripts-themes.yml b/builder/repositories/themes/stashapp-CommunityScripts-themes.yml
new file mode 100644
index 00000000..ffa0fde4
--- /dev/null
+++ b/builder/repositories/themes/stashapp-CommunityScripts-themes.yml
@@ -0,0 +1,48 @@
+name: stashapp/CommunityScripts Themes
+collection:
+ index: https://stashapp.github.io/CommunityScripts/stable/index.yml
+ global_repo: stashapp/CommunityScripts
+ base_path: main/themes
+ exclusive: true
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: Theme-BlackHole
+ readme: false
+ author: BViking78
+
+ - id: Theme-ModernDark
+ readme: false
+ author: "[cj13](https://github.com/cj12312021)"
+
+ - id: Theme-NeonDark
+ readme: false
+ author: Dankonite
+
+ - id: Theme-Night
+ readme: false
+
+ - id: Theme-Plex
+ author: Fidelio
+
+ - id: Theme-PornHub
+ readme: false
+ author: ronilaukkarinen
+
+ - id: Theme-Pulsar
+ readme: false
+ author: Fonzie
+
+ - id: Theme-PulsarLight
+ readme: false
+ author: Fonzie
+
+ - id: Theme-RoundedYellow
+ author: Fonzie
diff --git a/builder/repositories/themes/tetrax-10-stash-stuffs-themes.yml b/builder/repositories/themes/tetrax-10-stash-stuffs-themes.yml
new file mode 100644
index 00000000..76567709
--- /dev/null
+++ b/builder/repositories/themes/tetrax-10-stash-stuffs-themes.yml
@@ -0,0 +1,26 @@
+collection:
+ index: https://tetrax-10.github.io/stash-stuffs/index.yml
+ global_repo: tetrax-10/stash-stuffs
+ global_author: "[tetrax-10](https://github.com/Tetrax-10)"
+ base_path: main/themes
+ exclusive: true
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: PlexBetterStyles
+ readme: https://github.com/Tetrax-10/stash-stuffs/tree/main#1-plex-better-styles
+ screenshots:
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/galleries.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/performers.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/images.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/scenes.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/settings.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/help.png
+ - https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/tags.png
\ No newline at end of file
diff --git a/builder/repositories/themes/uncertainmongoose-dracula-for-stash.yml b/builder/repositories/themes/uncertainmongoose-dracula-for-stash.yml
new file mode 100644
index 00000000..d652bf53
--- /dev/null
+++ b/builder/repositories/themes/uncertainmongoose-dracula-for-stash.yml
@@ -0,0 +1,18 @@
+collection:
+ index: https://uncertainmongoose.github.io/dracula-for-stash/index.yml
+ global_repo: uncertainmongoose/dracula-for-stash
+ global_author: "[UncertainMongoose](https://github.com/UncertainMongoose)"
+ base_path: main/themes
+
+scripts:
+ - id: example
+ path: ThemeName
+ description: "New description"
+ readme: https://github.com/ghost/ThemeName/blob/main/README.md
+ author: Deleted User
+ screenshots:
+ - https://avatars.githubusercontent.com/u/10137
+
+ - id: dracula-theme
+ path: dracula
+ readme: false
\ No newline at end of file
diff --git a/builder/types.ts b/builder/types.ts
new file mode 100644
index 00000000..a5faf662
--- /dev/null
+++ b/builder/types.ts
@@ -0,0 +1,39 @@
+export interface RemotePlugin {
+ id: string // internal id of plugin
+ name: string // display name of plugin
+ metadata?: Record | { description?: string } // metadata of plugin
+ version: string // version of plugin appended with hash
+ dath: string // date of last update
+ path: string // path to zip file relative to yml
+ sha256: string // sha256 hash of zip file
+ requires: string[] // list of dependencies
+}
+
+export type RemoteIndex = RemotePlugin[]
+
+export interface LocalRepository {
+ name: string // name of repository
+ collection: LocalCollection
+ scripts: LocalSidecar[]
+}
+
+export interface LocalCollection {
+ index: string // index url of collection
+ global_repo: string // repository of collection
+ global_author?: string // author of collection if it is just owner
+ base_path?: string // base path to plugins
+ exclusive: boolean // exclude any entires not in sidecar
+}
+
+export interface LocalSidecar {
+ id: string // internal id of plugin
+ path?: string // override path to plugin if not id
+ description?: string // override description if not in index
+ readme?: string // path to readme file
+ author?: string // author of plugin
+ screenshots?: string[] // screenshots of plugin
+ hide?: boolean // hide plugin from generated index
+ // this should only be used when the plugin is a backend dependency
+ // or is in a completely broken state and wholly incompatible
+ // or has been deprecated and should not be used
+}
\ No newline at end of file
diff --git a/builder/utils.ts b/builder/utils.ts
new file mode 100644
index 00000000..498cb437
--- /dev/null
+++ b/builder/utils.ts
@@ -0,0 +1,4 @@
+// utility functions for the builder
+export const sanitizeMD = (md: string) => md.replace("<", "<").replace(">", ">")
+export const infoLog = (message: string) => console.log(`[INFO] ${message}`)
+export const warnLog = (message: string) => console.warn(`[WARN] ${message}`)
\ No newline at end of file
diff --git a/docs/api.md b/docs/api.md
new file mode 100644
index 00000000..18f82fc6
--- /dev/null
+++ b/docs/api.md
@@ -0,0 +1,171 @@
+---
+title: Stash API
+hide:
+ - navigation
+---
+
+There is a GraphQL API which allows to do things automatically. GraphQL is also self-documenting.
+
+Stash has integrated playground where you run interact with the API and view the documentation.
+
+1. Go to `http(s)://IP:PORT/playground` (default is `http://localhost:9999/playground`).
+1. Expand **Docs** on the right to open Documentation Explorer.
+
+All HTTP requests have to go to `http(s)://IP:PORT/graphql` (default is `http://localhost:9999/graphql`).
+
+## Authentication
+
+You just need to add the key you generated in Stash (for more info about the API Key check stash's help section) in a header for every request you make.
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "ApiKey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJiaWxsIiwiaWF0IjoxNjE3MDkzMDYwLCJzdWIiOiJBUElLZXkifQ.WhUyvmnVeW8wGV5fkVyje3xLfz5A97HFwyZy-4i8Q-I" -H "Content-Type: application/json" --data '{ "query": "mutation { metadataScan (input:{})}" }' localhost:9999/graphql
+ ```
+
+### Legacy cookie authentication
+
+If you have configured a username/password you have to use cookies to authenticate.
+
+=== "Example using curl"
+
+ ```shell
+ curl --verbose --cookie-jar cookie.txt --data 'username=stash&password=**' localhost:9998/login
+ curl --cookie cookie.txt -H "Content-Type: application/json" --data '{ "query": "mutation { metadataScan ( input: {} ) } "}' localhost:9999/graphql
+ ```
+
+Using the `API Key` is recommended instead of the above cookie method.
+
+## Scan for new files
+
+=== "`HTTP-POST`"
+
+ ```json
+ {
+ "query": "mutation { metadataScan ( input: {} ) }"
+ }
+ ```
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": " mutation { metadataScan (input: {} ) }" }' localhost:9999/graphql
+ ```
+
+
+
+## Create backup
+
+=== "`HTTP-POST`"
+
+ ```json
+ {
+ "query": "mutation { backupDatabase(input: {download: false})}"
+ }
+ ```
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "mutation {backupDatabase(input: {download: false})}" }' localhost:9999/graphql
+ ```
+
+If `download:` is `true` the created backup is returned and not stored locally.
+
+## Generate content
+
+=== "`HTTP-POST`"
+
+ Payload (set desired content to generate **covers**, **sprites**, **previews**, **imagePreviews**, **markers**, **transcodes**, **phashes**, **interactiveHeatmapsSpeeds**, **imageThumbnails**, **clipPreviews** to `true` or `false`.
+
+ ```json
+ {
+ "query": "mutation { metadataGenerate ( input : { sprites: true previews: false imagePreviews: false markers: false transcodes: false } ) }"
+ }
+ ```
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "mutation { metadataGenerate ( input : { sprites: false previews: true imagePreviews: false markers: false transcodes: false } ) }" }' localhost:9999/graphql
+ ```
+
+## Get studios
+
+=== "`HTTP-POST`"
+
+ Payload (must be at least one of `id` `checksum` `url` `name` `image_path` `scene_count`).
+
+ ```json
+ {
+ "query": "{ allStudios { id checksum url name image_path scene_count } }"
+ }
+ ```
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ allStudios { name url scene_count} }" }' localhost:9999/graphql
+ ```
+
+## Scrape perfomer attributes from Freeones
+
+=== "`HTTP-POST`"
+
+ Payload
+
+ - `$performer name` is the name of the Performer you are scraping for
+ - return values must be at least one of `name` `url` `twitter` `instagram` `birthdate` `ethnicity` `country` `eye_color` `height` `measurements` `fake_tits` `career_length` `tattoos` `piercings` `aliases`
+
+ ```json
+ {
+ "query": "{ scrapeFreeones(performer_name: $performer_name) { name url twitter instagram birthdate ethnicity country eye_color height measurements fake_tits career_length tattoos piercings aliases } }"
+ }
+ ```
+
+ 1. Caution is needed when used in a script. Always set a waiting/sleep period between calls to avoid getting blacklisted by Freeones.
+ 1. Due to way it's used in Stash and to work reliably it requires the prior use of **scrapeFreeonesPerfomerList** (described beneath) to make sure the name of the performer exists in the list returned and thus in the Freeones db.
+
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ scrapeFreeones ( performer_name : \"Abella Danger\" ) { name height birthdate} }" }' localhost:9999/graphql
+ ```
+
+## Get list of perfomer names that match a name or alias from Freeones
+
+=== "`HTTP-POST`"
+
+ Payload (`$q` is the name or alias (or partial name , alias) of the performer you are looking for).
+
+ ```json
+ {
+ "query": "{ scrapeFreeonesPerformerList(query: $q) }"
+ }
+ ```
+
+ 1. Caution is needed when used in a script.Always set a waiting/sleep period between calls to avoid getting blacklisted by Freeones
+
+=== "Example using curl"
+
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ scrapeFreeonesPerformerList (query: \"bella\" ) }" }' localhost:9999/graphql
+ ```
+
+## Get system status
+
+=== "`HTTP-POST`"
+
+ ```json
+ {
+ "query": "{ systemStatus { databaseSchema databasePath configPath appSchema status } }"
+ }
+ ```
+
+=== "Example using curl"
+
+ ```shell
+ curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ systemStatus { appSchema status } }" }' localhost:9999/graphql
+ ```
\ No newline at end of file
diff --git a/assets/add-ons/FilenamePerformersToCSV.png b/docs/assets/add-ons/FilenamePerformersToCSV.png
similarity index 100%
rename from assets/add-ons/FilenamePerformersToCSV.png
rename to docs/assets/add-ons/FilenamePerformersToCSV.png
diff --git a/assets/add-ons/GHScraper_Checker.png b/docs/assets/add-ons/GHScraper_Checker.png
similarity index 100%
rename from assets/add-ons/GHScraper_Checker.png
rename to docs/assets/add-ons/GHScraper_Checker.png
diff --git a/assets/add-ons/OnlyFans_Scraper.png b/docs/assets/add-ons/OnlyFans_Scraper.png
similarity index 100%
rename from assets/add-ons/OnlyFans_Scraper.png
rename to docs/assets/add-ons/OnlyFans_Scraper.png
diff --git a/assets/add-ons/OnlyFans_Scraper2.png b/docs/assets/add-ons/OnlyFans_Scraper2.png
similarity index 100%
rename from assets/add-ons/OnlyFans_Scraper2.png
rename to docs/assets/add-ons/OnlyFans_Scraper2.png
diff --git a/assets/add-ons/Performer_Card_Details.png b/docs/assets/add-ons/Performer_Card_Details.png
similarity index 100%
rename from assets/add-ons/Performer_Card_Details.png
rename to docs/assets/add-ons/Performer_Card_Details.png
diff --git a/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png b/docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png
similarity index 100%
rename from assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png
rename to docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-1.png
diff --git a/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png b/docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png
similarity index 100%
rename from assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png
rename to docs/assets/add-ons/Stash-App-Script-Alphabet-Selector-2.png
diff --git a/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png b/docs/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png
similarity index 100%
rename from assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png
rename to docs/assets/add-ons/Stash-App-Script-Video-JS-CopySave-1.png
diff --git a/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png b/docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png
similarity index 100%
rename from assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png
rename to docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-1.png
diff --git a/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png b/docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png
similarity index 100%
rename from assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png
rename to docs/assets/add-ons/Stash-App-Theme-Switch-Plugin-2.png
diff --git a/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png b/docs/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png
similarity index 100%
rename from assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png
rename to docs/assets/add-ons/Stash-App-Userscript-Tagger-View-Div-Remover-1.png
diff --git a/assets/add-ons/Stash-Userscript-Upscaler-1.png b/docs/assets/add-ons/Stash-Userscript-Upscaler-1.png
similarity index 100%
rename from assets/add-ons/Stash-Userscript-Upscaler-1.png
rename to docs/assets/add-ons/Stash-Userscript-Upscaler-1.png
diff --git a/assets/add-ons/Stash-Userscript-Upscaler-2.png b/docs/assets/add-ons/Stash-Userscript-Upscaler-2.png
similarity index 100%
rename from assets/add-ons/Stash-Userscript-Upscaler-2.png
rename to docs/assets/add-ons/Stash-Userscript-Upscaler-2.png
diff --git a/assets/add-ons/Stash-Userscript-Upscaler-3.png b/docs/assets/add-ons/Stash-Userscript-Upscaler-3.png
similarity index 100%
rename from assets/add-ons/Stash-Userscript-Upscaler-3.png
rename to docs/assets/add-ons/Stash-Userscript-Upscaler-3.png
diff --git a/assets/add-ons/StashAppAndroidTV-1.png b/docs/assets/add-ons/StashAppAndroidTV-1.png
similarity index 100%
rename from assets/add-ons/StashAppAndroidTV-1.png
rename to docs/assets/add-ons/StashAppAndroidTV-1.png
diff --git a/assets/add-ons/StashAppAndroidTV-2.png b/docs/assets/add-ons/StashAppAndroidTV-2.png
similarity index 100%
rename from assets/add-ons/StashAppAndroidTV-2.png
rename to docs/assets/add-ons/StashAppAndroidTV-2.png
diff --git a/assets/add-ons/StashAppAndroidTV-3.png b/docs/assets/add-ons/StashAppAndroidTV-3.png
similarity index 100%
rename from assets/add-ons/StashAppAndroidTV-3.png
rename to docs/assets/add-ons/StashAppAndroidTV-3.png
diff --git a/assets/add-ons/StashDB_Backlog_Userscript.png b/docs/assets/add-ons/StashDB_Backlog_Userscript.png
similarity index 100%
rename from assets/add-ons/StashDB_Backlog_Userscript.png
rename to docs/assets/add-ons/StashDB_Backlog_Userscript.png
diff --git a/assets/add-ons/StashDB_Backlog_Userscript2.png b/docs/assets/add-ons/StashDB_Backlog_Userscript2.png
similarity index 100%
rename from assets/add-ons/StashDB_Backlog_Userscript2.png
rename to docs/assets/add-ons/StashDB_Backlog_Userscript2.png
diff --git a/assets/add-ons/StashDB_Backlog_Userscript3.png b/docs/assets/add-ons/StashDB_Backlog_Userscript3.png
similarity index 100%
rename from assets/add-ons/StashDB_Backlog_Userscript3.png
rename to docs/assets/add-ons/StashDB_Backlog_Userscript3.png
diff --git a/assets/add-ons/StashDB_ID_Copy_Buttons.png b/docs/assets/add-ons/StashDB_ID_Copy_Buttons.png
similarity index 100%
rename from assets/add-ons/StashDB_ID_Copy_Buttons.png
rename to docs/assets/add-ons/StashDB_ID_Copy_Buttons.png
diff --git a/assets/add-ons/StashDB_Images_Userscript.png b/docs/assets/add-ons/StashDB_Images_Userscript.png
similarity index 100%
rename from assets/add-ons/StashDB_Images_Userscript.png
rename to docs/assets/add-ons/StashDB_Images_Userscript.png
diff --git a/assets/add-ons/StashDB_Submission_Helper.png b/docs/assets/add-ons/StashDB_Submission_Helper.png
similarity index 100%
rename from assets/add-ons/StashDB_Submission_Helper.png
rename to docs/assets/add-ons/StashDB_Submission_Helper.png
diff --git a/assets/add-ons/StashTagSkins_Hamster.png b/docs/assets/add-ons/StashTagSkins_Hamster.png
similarity index 100%
rename from assets/add-ons/StashTagSkins_Hamster.png
rename to docs/assets/add-ons/StashTagSkins_Hamster.png
diff --git a/assets/add-ons/StashTagSkins_Icons.png b/docs/assets/add-ons/StashTagSkins_Icons.png
similarity index 100%
rename from assets/add-ons/StashTagSkins_Icons.png
rename to docs/assets/add-ons/StashTagSkins_Icons.png
diff --git a/assets/add-ons/StashTagSkins_Sample.png b/docs/assets/add-ons/StashTagSkins_Sample.png
similarity index 100%
rename from assets/add-ons/StashTagSkins_Sample.png
rename to docs/assets/add-ons/StashTagSkins_Sample.png
diff --git a/assets/add-ons/Stash_Batch_Query_Edit.png b/docs/assets/add-ons/Stash_Batch_Query_Edit.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Query_Edit.png
rename to docs/assets/add-ons/Stash_Batch_Query_Edit.png
diff --git a/assets/add-ons/Stash_Batch_Query_Edit2.png b/docs/assets/add-ons/Stash_Batch_Query_Edit2.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Query_Edit2.png
rename to docs/assets/add-ons/Stash_Batch_Query_Edit2.png
diff --git a/assets/add-ons/Stash_Batch_Result_Toggle.png b/docs/assets/add-ons/Stash_Batch_Result_Toggle.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Result_Toggle.png
rename to docs/assets/add-ons/Stash_Batch_Result_Toggle.png
diff --git a/assets/add-ons/Stash_Batch_Result_Toggle2.png b/docs/assets/add-ons/Stash_Batch_Result_Toggle2.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Result_Toggle2.png
rename to docs/assets/add-ons/Stash_Batch_Result_Toggle2.png
diff --git a/assets/add-ons/Stash_Batch_Save.png b/docs/assets/add-ons/Stash_Batch_Save.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Save.png
rename to docs/assets/add-ons/Stash_Batch_Save.png
diff --git a/assets/add-ons/Stash_Batch_Search.png b/docs/assets/add-ons/Stash_Batch_Search.png
similarity index 100%
rename from assets/add-ons/Stash_Batch_Search.png
rename to docs/assets/add-ons/Stash_Batch_Search.png
diff --git a/assets/add-ons/Stash_Checker.png b/docs/assets/add-ons/Stash_Checker.png
similarity index 100%
rename from assets/add-ons/Stash_Checker.png
rename to docs/assets/add-ons/Stash_Checker.png
diff --git a/assets/add-ons/Stash_Markdown.png b/docs/assets/add-ons/Stash_Markdown.png
similarity index 100%
rename from assets/add-ons/Stash_Markdown.png
rename to docs/assets/add-ons/Stash_Markdown.png
diff --git a/assets/add-ons/Stash_New_Performer_Filter_Button.png b/docs/assets/add-ons/Stash_New_Performer_Filter_Button.png
similarity index 100%
rename from assets/add-ons/Stash_New_Performer_Filter_Button.png
rename to docs/assets/add-ons/Stash_New_Performer_Filter_Button.png
diff --git a/assets/add-ons/Stash_Open_Media_Player.png b/docs/assets/add-ons/Stash_Open_Media_Player.png
similarity index 100%
rename from assets/add-ons/Stash_Open_Media_Player.png
rename to docs/assets/add-ons/Stash_Open_Media_Player.png
diff --git a/assets/add-ons/Stash_Performer_Audit_Task_Button.png b/docs/assets/add-ons/Stash_Performer_Audit_Task_Button.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Audit_Task_Button.png
rename to docs/assets/add-ons/Stash_Performer_Audit_Task_Button.png
diff --git a/assets/add-ons/Stash_Performer_Audit_Task_Button2.png b/docs/assets/add-ons/Stash_Performer_Audit_Task_Button2.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Audit_Task_Button2.png
rename to docs/assets/add-ons/Stash_Performer_Audit_Task_Button2.png
diff --git a/assets/add-ons/Stash_Performer_Audit_Task_Button3.png b/docs/assets/add-ons/Stash_Performer_Audit_Task_Button3.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Audit_Task_Button3.png
rename to docs/assets/add-ons/Stash_Performer_Audit_Task_Button3.png
diff --git a/assets/add-ons/Stash_Performer_Image_Cropper.png b/docs/assets/add-ons/Stash_Performer_Image_Cropper.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Image_Cropper.png
rename to docs/assets/add-ons/Stash_Performer_Image_Cropper.png
diff --git a/assets/add-ons/Stash_Performer_Markers_Tab.png b/docs/assets/add-ons/Stash_Performer_Markers_Tab.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Markers_Tab.png
rename to docs/assets/add-ons/Stash_Performer_Markers_Tab.png
diff --git a/assets/add-ons/Stash_Performer_Tagger_Additions.png b/docs/assets/add-ons/Stash_Performer_Tagger_Additions.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_Tagger_Additions.png
rename to docs/assets/add-ons/Stash_Performer_Tagger_Additions.png
diff --git a/assets/add-ons/Stash_Performer_URL_Searchbox.png b/docs/assets/add-ons/Stash_Performer_URL_Searchbox.png
similarity index 100%
rename from assets/add-ons/Stash_Performer_URL_Searchbox.png
rename to docs/assets/add-ons/Stash_Performer_URL_Searchbox.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Additions.png b/docs/assets/add-ons/Stash_Scene_Tagger_Additions.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Additions.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Additions.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Additions2.png b/docs/assets/add-ons/Stash_Scene_Tagger_Additions2.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Additions2.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Additions2.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Colorizer.png b/docs/assets/add-ons/Stash_Scene_Tagger_Colorizer.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Colorizer.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Colorizer.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png b/docs/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Colorizer2.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Colorizer2.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png b/docs/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Draft_Submit.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Linkify.png b/docs/assets/add-ons/Stash_Scene_Tagger_Linkify.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Linkify.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Linkify.png
diff --git a/assets/add-ons/Stash_Scene_Tagger_Linkify2.png b/docs/assets/add-ons/Stash_Scene_Tagger_Linkify2.png
similarity index 100%
rename from assets/add-ons/Stash_Scene_Tagger_Linkify2.png
rename to docs/assets/add-ons/Stash_Scene_Tagger_Linkify2.png
diff --git a/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png b/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png
similarity index 100%
rename from assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png
rename to docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers.png
diff --git a/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png b/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png
similarity index 100%
rename from assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png
rename to docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers2.png
diff --git a/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png b/docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png
similarity index 100%
rename from assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png
rename to docs/assets/add-ons/Stash_Set_Stashbox_Favorite_Performers3.png
diff --git a/assets/add-ons/Stash_StashID_Icon.png b/docs/assets/add-ons/Stash_StashID_Icon.png
similarity index 100%
rename from assets/add-ons/Stash_StashID_Icon.png
rename to docs/assets/add-ons/Stash_StashID_Icon.png
diff --git a/assets/add-ons/Stash_StashID_Icon2.png b/docs/assets/add-ons/Stash_StashID_Icon2.png
similarity index 100%
rename from assets/add-ons/Stash_StashID_Icon2.png
rename to docs/assets/add-ons/Stash_StashID_Icon2.png
diff --git a/assets/add-ons/Stash_StashID_Icon3.png b/docs/assets/add-ons/Stash_StashID_Icon3.png
similarity index 100%
rename from assets/add-ons/Stash_StashID_Icon3.png
rename to docs/assets/add-ons/Stash_StashID_Icon3.png
diff --git a/assets/add-ons/Stash_StashID_Input.png b/docs/assets/add-ons/Stash_StashID_Input.png
similarity index 100%
rename from assets/add-ons/Stash_StashID_Input.png
rename to docs/assets/add-ons/Stash_StashID_Input.png
diff --git a/assets/add-ons/Stash_StashID_Input2.png b/docs/assets/add-ons/Stash_StashID_Input2.png
similarity index 100%
rename from assets/add-ons/Stash_StashID_Input2.png
rename to docs/assets/add-ons/Stash_StashID_Input2.png
diff --git a/assets/add-ons/Stash_Stats.png b/docs/assets/add-ons/Stash_Stats.png
similarity index 100%
rename from assets/add-ons/Stash_Stats.png
rename to docs/assets/add-ons/Stash_Stats.png
diff --git a/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png b/docs/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png
similarity index 100%
rename from assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png
rename to docs/assets/add-ons/Stash_Studio_Image_And_Parent_On_Create.png
diff --git a/assets/add-ons/Stash_Tag_Image_Cropper.png b/docs/assets/add-ons/Stash_Tag_Image_Cropper.png
similarity index 100%
rename from assets/add-ons/Stash_Tag_Image_Cropper.png
rename to docs/assets/add-ons/Stash_Tag_Image_Cropper.png
diff --git a/assets/add-ons/Stash_helper-1.png b/docs/assets/add-ons/Stash_helper-1.png
similarity index 100%
rename from assets/add-ons/Stash_helper-1.png
rename to docs/assets/add-ons/Stash_helper-1.png
diff --git a/assets/add-ons/Visage.png b/docs/assets/add-ons/Visage.png
similarity index 100%
rename from assets/add-ons/Visage.png
rename to docs/assets/add-ons/Visage.png
diff --git a/assets/add-ons/blurryCardBackground.png b/docs/assets/add-ons/blurryCardBackground.png
similarity index 100%
rename from assets/add-ons/blurryCardBackground.png
rename to docs/assets/add-ons/blurryCardBackground.png
diff --git a/assets/add-ons/fixed_table_width.png b/docs/assets/add-ons/fixed_table_width.png
similarity index 100%
rename from assets/add-ons/fixed_table_width.png
rename to docs/assets/add-ons/fixed_table_width.png
diff --git a/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png b/docs/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png
similarity index 100%
rename from assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png
rename to docs/assets/add-ons/pwPlayer_js_Scene_Card_Quick_Player.png
diff --git a/assets/add-ons/renamerOnUpdate.png b/docs/assets/add-ons/renamerOnUpdate.png
similarity index 100%
rename from assets/add-ons/renamerOnUpdate.png
rename to docs/assets/add-ons/renamerOnUpdate.png
diff --git a/assets/add-ons/stash-qmt-1.png b/docs/assets/add-ons/stash-qmt-1.png
similarity index 100%
rename from assets/add-ons/stash-qmt-1.png
rename to docs/assets/add-ons/stash-qmt-1.png
diff --git a/assets/add-ons/stash-qmt-2.png b/docs/assets/add-ons/stash-qmt-2.png
similarity index 100%
rename from assets/add-ons/stash-qmt-2.png
rename to docs/assets/add-ons/stash-qmt-2.png
diff --git a/assets/add-ons/stash_tag.png b/docs/assets/add-ons/stash_tag.png
similarity index 100%
rename from assets/add-ons/stash_tag.png
rename to docs/assets/add-ons/stash_tag.png
diff --git a/assets/beginner-guides/create-tpdb-token.jpg b/docs/assets/beginner-guides/create-tpdb-token.jpg
similarity index 100%
rename from assets/beginner-guides/create-tpdb-token.jpg
rename to docs/assets/beginner-guides/create-tpdb-token.jpg
diff --git a/assets/beginner-guides/find-scene-tagger.jpg b/docs/assets/beginner-guides/find-scene-tagger.jpg
similarity index 100%
rename from assets/beginner-guides/find-scene-tagger.jpg
rename to docs/assets/beginner-guides/find-scene-tagger.jpg
diff --git a/assets/beginner-guides/find-stashid.jpg b/docs/assets/beginner-guides/find-stashid.jpg
similarity index 100%
rename from assets/beginner-guides/find-stashid.jpg
rename to docs/assets/beginner-guides/find-stashid.jpg
diff --git a/assets/beginner-guides/gen-phashes-manually.jpg b/docs/assets/beginner-guides/gen-phashes-manually.jpg
similarity index 100%
rename from assets/beginner-guides/gen-phashes-manually.jpg
rename to docs/assets/beginner-guides/gen-phashes-manually.jpg
diff --git a/assets/beginner-guides/gen-phashes-on-scan.jpg b/docs/assets/beginner-guides/gen-phashes-on-scan.jpg
similarity index 100%
rename from assets/beginner-guides/gen-phashes-on-scan.jpg
rename to docs/assets/beginner-guides/gen-phashes-on-scan.jpg
diff --git a/assets/beginner-guides/regexui.png b/docs/assets/beginner-guides/regexui.png
similarity index 100%
rename from assets/beginner-guides/regexui.png
rename to docs/assets/beginner-guides/regexui.png
diff --git a/assets/beginner-guides/scrape-all-and-search.jpg b/docs/assets/beginner-guides/scrape-all-and-search.jpg
similarity index 100%
rename from assets/beginner-guides/scrape-all-and-search.jpg
rename to docs/assets/beginner-guides/scrape-all-and-search.jpg
diff --git a/assets/beginner-guides/scrapers-folder-location.jpg b/docs/assets/beginner-guides/scrapers-folder-location.jpg
similarity index 100%
rename from assets/beginner-guides/scrapers-folder-location.jpg
rename to docs/assets/beginner-guides/scrapers-folder-location.jpg
diff --git a/assets/beginner-guides/tagger-source-tpdb.png b/docs/assets/beginner-guides/tagger-source-tpdb.png
similarity index 100%
rename from assets/beginner-guides/tagger-source-tpdb.png
rename to docs/assets/beginner-guides/tagger-source-tpdb.png
diff --git a/assets/beginner-guides/tpdb-scene-scraper-entry.jpg b/docs/assets/beginner-guides/tpdb-scene-scraper-entry.jpg
similarity index 100%
rename from assets/beginner-guides/tpdb-scene-scraper-entry.jpg
rename to docs/assets/beginner-guides/tpdb-scene-scraper-entry.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg b/docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg b/docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg b/docs/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-Repository-1.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg b/docs/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-Repository-2.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg b/docs/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg
diff --git a/assets/beginner-guides/unraid-docker-stash-page.jpg b/docs/assets/beginner-guides/unraid-docker-stash-page.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-docker-stash-page.jpg
rename to docs/assets/beginner-guides/unraid-docker-stash-page.jpg
diff --git a/assets/beginner-guides/unraid-gpuid.jpg b/docs/assets/beginner-guides/unraid-gpuid.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-gpuid.jpg
rename to docs/assets/beginner-guides/unraid-gpuid.jpg
diff --git a/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg b/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg
rename to docs/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg
diff --git a/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg b/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg
rename to docs/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg
diff --git a/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg b/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg
rename to docs/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg
diff --git a/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg b/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg
rename to docs/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg
diff --git a/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg b/docs/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg
similarity index 100%
rename from assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg
rename to docs/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg
diff --git a/docs/assets/guides/run-cdp-on-truenas-scale/1.png b/docs/assets/guides/run-cdp-on-truenas-scale/1.png
new file mode 100644
index 00000000..c0d34b0d
Binary files /dev/null and b/docs/assets/guides/run-cdp-on-truenas-scale/1.png differ
diff --git a/docs/assets/guides/run-cdp-on-truenas-scale/2.png b/docs/assets/guides/run-cdp-on-truenas-scale/2.png
new file mode 100644
index 00000000..bb77fb65
Binary files /dev/null and b/docs/assets/guides/run-cdp-on-truenas-scale/2.png differ
diff --git a/docs/assets/guides/run-cdp-on-truenas-scale/3.png b/docs/assets/guides/run-cdp-on-truenas-scale/3.png
new file mode 100644
index 00000000..b17ce1c4
Binary files /dev/null and b/docs/assets/guides/run-cdp-on-truenas-scale/3.png differ
diff --git a/docs/assets/guides/run-cdp-on-truenas-scale/4.png b/docs/assets/guides/run-cdp-on-truenas-scale/4.png
new file mode 100644
index 00000000..bc348e8b
Binary files /dev/null and b/docs/assets/guides/run-cdp-on-truenas-scale/4.png differ
diff --git a/docs/assets/guides/run-cdp-on-truenas-scale/5.png b/docs/assets/guides/run-cdp-on-truenas-scale/5.png
new file mode 100644
index 00000000..6933ac87
Binary files /dev/null and b/docs/assets/guides/run-cdp-on-truenas-scale/5.png differ
diff --git a/docs/assets/images/favicon.ico b/docs/assets/images/favicon.ico
new file mode 100644
index 00000000..028c3ba3
Binary files /dev/null and b/docs/assets/images/favicon.ico differ
diff --git a/docs/assets/plugins/ValkyrSceneCards/1.jpg b/docs/assets/plugins/ValkyrSceneCards/1.jpg
new file mode 100644
index 00000000..896e6437
Binary files /dev/null and b/docs/assets/plugins/ValkyrSceneCards/1.jpg differ
diff --git a/docs/assets/plugins/ValkyrSceneCards/2.jpg b/docs/assets/plugins/ValkyrSceneCards/2.jpg
new file mode 100644
index 00000000..c6cac1fc
Binary files /dev/null and b/docs/assets/plugins/ValkyrSceneCards/2.jpg differ
diff --git a/docs/assets/plugins/cjCardTweaks/1.png b/docs/assets/plugins/cjCardTweaks/1.png
new file mode 100644
index 00000000..c83a5876
Binary files /dev/null and b/docs/assets/plugins/cjCardTweaks/1.png differ
diff --git a/docs/assets/plugins/cjCardTweaks/2.png b/docs/assets/plugins/cjCardTweaks/2.png
new file mode 100644
index 00000000..4a075209
Binary files /dev/null and b/docs/assets/plugins/cjCardTweaks/2.png differ
diff --git a/docs/assets/plugins/cjCardTweaks/3.png b/docs/assets/plugins/cjCardTweaks/3.png
new file mode 100644
index 00000000..780c878f
Binary files /dev/null and b/docs/assets/plugins/cjCardTweaks/3.png differ
diff --git a/docs/assets/plugins/filemonitor/1.png b/docs/assets/plugins/filemonitor/1.png
new file mode 100644
index 00000000..72fc8332
Binary files /dev/null and b/docs/assets/plugins/filemonitor/1.png differ
diff --git a/docs/assets/plugins/renamerOnUpdate/1.png b/docs/assets/plugins/renamerOnUpdate/1.png
new file mode 100644
index 00000000..4ac6e45b
Binary files /dev/null and b/docs/assets/plugins/renamerOnUpdate/1.png differ
diff --git a/docs/assets/plugins/themeSwitch/1.png b/docs/assets/plugins/themeSwitch/1.png
new file mode 100644
index 00000000..86c7bb32
Binary files /dev/null and b/docs/assets/plugins/themeSwitch/1.png differ
diff --git a/docs/assets/plugins/themeSwitch/2.png b/docs/assets/plugins/themeSwitch/2.png
new file mode 100644
index 00000000..e6cfef42
Binary files /dev/null and b/docs/assets/plugins/themeSwitch/2.png differ
diff --git a/docs/assets/stylesheets/announce.css b/docs/assets/stylesheets/announce.css
new file mode 100644
index 00000000..244c187c
--- /dev/null
+++ b/docs/assets/stylesheets/announce.css
@@ -0,0 +1,3 @@
+.md-banner {
+ background-color: #1e2129;
+}
\ No newline at end of file
diff --git a/assets/user-interface-ui/Black-Hole-preview.png b/docs/assets/user-interface-ui/Black-Hole-preview.png
similarity index 100%
rename from assets/user-interface-ui/Black-Hole-preview.png
rename to docs/assets/user-interface-ui/Black-Hole-preview.png
diff --git a/assets/user-interface-ui/Border-around-cards.png b/docs/assets/user-interface-ui/Border-around-cards.png
similarity index 100%
rename from assets/user-interface-ui/Border-around-cards.png
rename to docs/assets/user-interface-ui/Border-around-cards.png
diff --git a/assets/user-interface-ui/Light-Pulsar-preview.jpg b/docs/assets/user-interface-ui/Light-Pulsar-preview.jpg
similarity index 100%
rename from assets/user-interface-ui/Light-Pulsar-preview.jpg
rename to docs/assets/user-interface-ui/Light-Pulsar-preview.jpg
diff --git a/assets/user-interface-ui/Modern-Dark-preview.jpg b/docs/assets/user-interface-ui/Modern-Dark-preview.jpg
similarity index 100%
rename from assets/user-interface-ui/Modern-Dark-preview.jpg
rename to docs/assets/user-interface-ui/Modern-Dark-preview.jpg
diff --git a/assets/user-interface-ui/Neon-Dark-preview.jpg b/docs/assets/user-interface-ui/Neon-Dark-preview.jpg
similarity index 100%
rename from assets/user-interface-ui/Neon-Dark-preview.jpg
rename to docs/assets/user-interface-ui/Neon-Dark-preview.jpg
diff --git a/assets/user-interface-ui/Night-preview.png b/docs/assets/user-interface-ui/Night-preview.png
similarity index 100%
rename from assets/user-interface-ui/Night-preview.png
rename to docs/assets/user-interface-ui/Night-preview.png
diff --git a/assets/user-interface-ui/Plex-preview.png b/docs/assets/user-interface-ui/Plex-preview.png
similarity index 100%
rename from assets/user-interface-ui/Plex-preview.png
rename to docs/assets/user-interface-ui/Plex-preview.png
diff --git a/assets/user-interface-ui/Pulsar-preview.jpg b/docs/assets/user-interface-ui/Pulsar-preview.jpg
similarity index 100%
rename from assets/user-interface-ui/Pulsar-preview.jpg
rename to docs/assets/user-interface-ui/Pulsar-preview.jpg
diff --git a/assets/user-interface-ui/blur2.png b/docs/assets/user-interface-ui/blur2.png
similarity index 100%
rename from assets/user-interface-ui/blur2.png
rename to docs/assets/user-interface-ui/blur2.png
diff --git a/assets/user-interface-ui/css-scrubber.png b/docs/assets/user-interface-ui/css-scrubber.png
similarity index 100%
rename from assets/user-interface-ui/css-scrubber.png
rename to docs/assets/user-interface-ui/css-scrubber.png
diff --git a/assets/user-interface-ui/fixed_table_width.png b/docs/assets/user-interface-ui/fixed_table_width.png
similarity index 100%
rename from assets/user-interface-ui/fixed_table_width.png
rename to docs/assets/user-interface-ui/fixed_table_width.png
diff --git a/assets/user-interface-ui/hide_0_count_badges.png b/docs/assets/user-interface-ui/hide_0_count_badges.png
similarity index 100%
rename from assets/user-interface-ui/hide_0_count_badges.png
rename to docs/assets/user-interface-ui/hide_0_count_badges.png
diff --git a/assets/user-interface-ui/more_studio_item_after.jpg b/docs/assets/user-interface-ui/more_studio_item_after.jpg
similarity index 100%
rename from assets/user-interface-ui/more_studio_item_after.jpg
rename to docs/assets/user-interface-ui/more_studio_item_after.jpg
diff --git a/assets/user-interface-ui/more_studio_item_before.jpg b/docs/assets/user-interface-ui/more_studio_item_before.jpg
similarity index 100%
rename from assets/user-interface-ui/more_studio_item_before.jpg
rename to docs/assets/user-interface-ui/more_studio_item_before.jpg
diff --git a/assets/user-interface-ui/more_tag_after_1.jpg b/docs/assets/user-interface-ui/more_tag_after_1.jpg
similarity index 100%
rename from assets/user-interface-ui/more_tag_after_1.jpg
rename to docs/assets/user-interface-ui/more_tag_after_1.jpg
diff --git a/assets/user-interface-ui/more_tag_after_2.jpg b/docs/assets/user-interface-ui/more_tag_after_2.jpg
similarity index 100%
rename from assets/user-interface-ui/more_tag_after_2.jpg
rename to docs/assets/user-interface-ui/more_tag_after_2.jpg
diff --git a/assets/user-interface-ui/more_tag_before.jpg b/docs/assets/user-interface-ui/more_tag_before.jpg
similarity index 100%
rename from assets/user-interface-ui/more_tag_before.jpg
rename to docs/assets/user-interface-ui/more_tag_before.jpg
diff --git a/assets/user-interface-ui/more_tag_subtag.jpg b/docs/assets/user-interface-ui/more_tag_subtag.jpg
similarity index 100%
rename from assets/user-interface-ui/more_tag_subtag.jpg
rename to docs/assets/user-interface-ui/more_tag_subtag.jpg
diff --git a/assets/user-interface-ui/navigation-after.png b/docs/assets/user-interface-ui/navigation-after.png
similarity index 100%
rename from assets/user-interface-ui/navigation-after.png
rename to docs/assets/user-interface-ui/navigation-after.png
diff --git a/assets/user-interface-ui/navigation-before.png b/docs/assets/user-interface-ui/navigation-before.png
similarity index 100%
rename from assets/user-interface-ui/navigation-before.png
rename to docs/assets/user-interface-ui/navigation-before.png
diff --git a/assets/user-interface-ui/studios_layout.png b/docs/assets/user-interface-ui/studios_layout.png
similarity index 100%
rename from assets/user-interface-ui/studios_layout.png
rename to docs/assets/user-interface-ui/studios_layout.png
diff --git a/assets/user-interface-ui/tags_layout.png b/docs/assets/user-interface-ui/tags_layout.png
similarity index 100%
rename from assets/user-interface-ui/tags_layout.png
rename to docs/assets/user-interface-ui/tags_layout.png
diff --git a/assets/user-interface-ui/themes/light-pulsar-1.jpg b/docs/assets/user-interface-ui/themes/light-pulsar-1.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/light-pulsar-1.jpg
rename to docs/assets/user-interface-ui/themes/light-pulsar-1.jpg
diff --git a/assets/user-interface-ui/themes/light-pulsar-2.jpg b/docs/assets/user-interface-ui/themes/light-pulsar-2.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/light-pulsar-2.jpg
rename to docs/assets/user-interface-ui/themes/light-pulsar-2.jpg
diff --git a/assets/user-interface-ui/themes/light-pulsar-3.jpg b/docs/assets/user-interface-ui/themes/light-pulsar-3.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/light-pulsar-3.jpg
rename to docs/assets/user-interface-ui/themes/light-pulsar-3.jpg
diff --git a/assets/user-interface-ui/themes/mobile-layout-overhaul-1.png b/docs/assets/user-interface-ui/themes/mobile-layout-overhaul-1.png
similarity index 100%
rename from assets/user-interface-ui/themes/mobile-layout-overhaul-1.png
rename to docs/assets/user-interface-ui/themes/mobile-layout-overhaul-1.png
diff --git a/assets/user-interface-ui/themes/modern-dark-1.jpg b/docs/assets/user-interface-ui/themes/modern-dark-1.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/modern-dark-1.jpg
rename to docs/assets/user-interface-ui/themes/modern-dark-1.jpg
diff --git a/assets/user-interface-ui/themes/neon-dark-1.jpg b/docs/assets/user-interface-ui/themes/neon-dark-1.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-1.jpg
rename to docs/assets/user-interface-ui/themes/neon-dark-1.jpg
diff --git a/assets/user-interface-ui/themes/neon-dark-1.png b/docs/assets/user-interface-ui/themes/neon-dark-1.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-1.png
rename to docs/assets/user-interface-ui/themes/neon-dark-1.png
diff --git a/assets/user-interface-ui/themes/neon-dark-2.png b/docs/assets/user-interface-ui/themes/neon-dark-2.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-2.png
rename to docs/assets/user-interface-ui/themes/neon-dark-2.png
diff --git a/assets/user-interface-ui/themes/neon-dark-3.png b/docs/assets/user-interface-ui/themes/neon-dark-3.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-3.png
rename to docs/assets/user-interface-ui/themes/neon-dark-3.png
diff --git a/assets/user-interface-ui/themes/neon-dark-4.png b/docs/assets/user-interface-ui/themes/neon-dark-4.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-4.png
rename to docs/assets/user-interface-ui/themes/neon-dark-4.png
diff --git a/assets/user-interface-ui/themes/neon-dark-5.png b/docs/assets/user-interface-ui/themes/neon-dark-5.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-5.png
rename to docs/assets/user-interface-ui/themes/neon-dark-5.png
diff --git a/assets/user-interface-ui/themes/neon-dark-6.png b/docs/assets/user-interface-ui/themes/neon-dark-6.png
similarity index 100%
rename from assets/user-interface-ui/themes/neon-dark-6.png
rename to docs/assets/user-interface-ui/themes/neon-dark-6.png
diff --git a/assets/user-interface-ui/themes/night-1.png b/docs/assets/user-interface-ui/themes/night-1.png
similarity index 100%
rename from assets/user-interface-ui/themes/night-1.png
rename to docs/assets/user-interface-ui/themes/night-1.png
diff --git a/assets/user-interface-ui/themes/plex-1.png b/docs/assets/user-interface-ui/themes/plex-1.png
similarity index 100%
rename from assets/user-interface-ui/themes/plex-1.png
rename to docs/assets/user-interface-ui/themes/plex-1.png
diff --git a/assets/user-interface-ui/themes/plex-background.png b/docs/assets/user-interface-ui/themes/plex-background.png
similarity index 100%
rename from assets/user-interface-ui/themes/plex-background.png
rename to docs/assets/user-interface-ui/themes/plex-background.png
diff --git a/assets/user-interface-ui/themes/plex-logo.png b/docs/assets/user-interface-ui/themes/plex-logo.png
similarity index 100%
rename from assets/user-interface-ui/themes/plex-logo.png
rename to docs/assets/user-interface-ui/themes/plex-logo.png
diff --git a/assets/user-interface-ui/themes/plex-noise.png b/docs/assets/user-interface-ui/themes/plex-noise.png
similarity index 100%
rename from assets/user-interface-ui/themes/plex-noise.png
rename to docs/assets/user-interface-ui/themes/plex-noise.png
diff --git a/assets/user-interface-ui/themes/pulsar-1.jpg b/docs/assets/user-interface-ui/themes/pulsar-1.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/pulsar-1.jpg
rename to docs/assets/user-interface-ui/themes/pulsar-1.jpg
diff --git a/assets/user-interface-ui/themes/pulsar-2.jpg b/docs/assets/user-interface-ui/themes/pulsar-2.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/pulsar-2.jpg
rename to docs/assets/user-interface-ui/themes/pulsar-2.jpg
diff --git a/assets/user-interface-ui/themes/pulsar-3.jpg b/docs/assets/user-interface-ui/themes/pulsar-3.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/pulsar-3.jpg
rename to docs/assets/user-interface-ui/themes/pulsar-3.jpg
diff --git a/assets/user-interface-ui/themes/pulsar-4.jpg b/docs/assets/user-interface-ui/themes/pulsar-4.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/pulsar-4.jpg
rename to docs/assets/user-interface-ui/themes/pulsar-4.jpg
diff --git a/assets/user-interface-ui/themes/pulsar-5.jpg b/docs/assets/user-interface-ui/themes/pulsar-5.jpg
similarity index 100%
rename from assets/user-interface-ui/themes/pulsar-5.jpg
rename to docs/assets/user-interface-ui/themes/pulsar-5.jpg
diff --git a/beginner-guides/guide-to-scraping.md b/docs/beginner-guides/guide-to-scraping.md
similarity index 83%
rename from beginner-guides/guide-to-scraping.md
rename to docs/beginner-guides/guide-to-scraping.md
index 3a61fb04..b26629a1 100644
--- a/beginner-guides/guide-to-scraping.md
+++ b/docs/beginner-guides/guide-to-scraping.md
@@ -1,66 +1,54 @@
---
-layout: clean
title: Guide to Scraping
-nav_order: 1
-parent: Beginner Guides
-
+hide:
+ - navigation
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
The following is our recommended procedure for new Stash users who want to get info for their scenes as quickly, easily, and as accurately as possible. Pulling info directly from StashDB is still the best option, but unfortunately this will not always be possible. Alternative methods are also covered for when StashDB doesn't have what you need. This is an expanded version of @Scruffy's [pinned post](https://discord.com/channels/559159668438728723/798641040029777980/997893396733640737){:target="_blank"} in the **#stashdb-general** channel in our Discord. Go there if you'd like something more succinct and direct. Hopefully this guide will reduce the pain and frustration for those who are lost and don't know where to start.
**The following sections are in this particular order for a reason, so please follow this guide from the beginning**.
-# Generate pHashes
+## Generate pHashes
1. Navigate to the Settings page (⚙ icon in top right), make sure you're on "Tasks" in the sidebar to the left, then find the first heading "Library" in the middle of the page. Make sure "Generate perceptual hashes" is turned on so pHashes will be created automatically each time you run a scan to add new scenes. This will slow down the scanning process, but for most users [it's worth it](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/whats-a-phash){:target="_blank"}. pHashes are the main way to match your scenes with our data on StashDB.
![How to generate pHashes on scan](/assets/beginner-guides/gen-phashes-on-scan.jpg)
-{:style="counter-reset:none"}
+
1. pHash generation is not turned on by default, so you'll need to generate them manually if you haven't already. This can be done on your entire library on the same Settings --> Tasks page, scroll down to the "Generated Content" heading. Make sure "Perceptual hashes (for deduplication)" is turned on and click the "Generate" button at the top. As long as "Overwrite existing generated files" is turned off, this will only generate missing files and hashes.
![How to generate pHashes manually](/assets/beginner-guides/gen-phashes-manually.jpg)
-# Join StashDB
+## Join StashDB
If you haven't set up StashDB in your Stash settings yet, now's the time to do it. The best way to do that is to follow this guide to [Accessing StashDB](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/accessing-stashdb/). It includes step-by-step instructions for both signing up to StashDB and connecting your new account to Stash.
-# Use the Scene Tagger
+## Use the Scene Tagger
1. Go to your Scenes page on Stash and click the double 🔖 icon to the far right of the search bar. This is your Scene Tagger view and should be your first choice for pulling data, not Identify / Autotag / Filename Parser / URL Scrapers / etc. Always use the Scene Tagger first, the rest are for users with more specific needs who understand the strengths and weaknesses of each tool.
![How to find the Scene Tagger](/assets/beginner-guides/find-scene-tagger.jpg)
-{: .important }
-Tags are not created automatically. You need to click `+` icon near the tag name to create it for you locally and attach it to the scene. Once it's created, it will match automatically in the future.
+ !!! important
+ Tags are not created automatically. You need to click `+` icon near the tag name to create it for you locally and attach it to the scene. Once it's created, it will match automatically in the future.
-{:style="counter-reset:none"}
-1. First, click the "Scrape All" button. This will use your pHashes to find matching scenes on StashDB for every scene on the current page. The "Scrape by fragment" buttons will do the same thing but just for one scene at a time. Also, you may want to change your Scene Tagger settings with the ⚙ icon next to "Scrape All." You can tell it to Merge (keep all) tags, Overwrite (keep only new) tags, or ignore StashDB's tags entirely (leave box unchecked). If you plan on [contributing to StashDB](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/contributing-to-stashdb){:target="_blank"}, you should have "Show male performers" turned on to better follow [these guidelines](https://guidelines.stashdb.org/docs/scenes/edit/scene-performers/missing-performers){:target="_blank"}.
+1. First, click the "Scrape All" button. This will use your pHashes to find matching scenes on StashDB for every scene on the current page. The "Scrape by fragment" buttons will do the same thing but just for one scene at a time. Also, you may want to change your Scene Tagger settings with the ⚙ icon next to "Scrape All." You can tell it to Merge (keep all) tags, Overwrite (keep only new) tags, or ignore StashDB's tags entirely (leave box unchecked). If you plan on [contributing to StashDB](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/contributing-to-stashdb){:target="_blank"}, you should have "Show male performers" turned on to better follow [these guidelines](https://guidelines.stashdb.org/docs/scenes/edit/scene-performers/missing-performers){:target="_blank"}.
![Running "Scrape All" and "Search"](/assets/beginner-guides/scrape-all-and-search.jpg)
-{:style="counter-reset:none"}
+
1. If your fingerprint search doesn't return a correct result for your scene, you can try searching with the "Query" field using title, performer, release date, or studio. Try to use as little text as possible to find your scene. Otherwise, unnecessary words that do not match StashDB's info may block correct results. If you can find the matching scene on StashDB.org but can't find it using the Scene Tagger, you can use the scene's [StashID](https://guidelines.stashdb.org/docs/faq_getting-started/stashdb/whats-a-stashid){:target="_blank"} as your Tagger query.
![How to find a StashID](/assets/beginner-guides/find-stashid.jpg)
-{:style="counter-reset:none"}
+
1. Be sure to double-check that each selected result matches your scene before clicking the "Save" button at the bottom of each card. **If you're confident that all of your saved matches are accurate**, you may click the "Submit fingerprints" button after you're done. This will add your files' hashes to StashDB to make them easier for other users to find. But again, **make sure your files were matched correctly first**. The button will appear right next to the "Scrape All" button.
-# Use ThePornDB Endpoint
+## Use ThePornDB Endpoint
1. If you are absolutely sure a scene isn't on StashDB anywhere, the next easiest method is to try ThePornDB. They have significantly more scenes than StashDB thanks to their automated scrapers, but their info isn't always as complete or accurate compared to StashDB's manually curated approach. They also don't have as many pHashes so matching scenes can be trickier as well. By using their Endpoint and submitting fingerprints to them when you have a good match via searching, you make life easier for everyone else scraping there.
@@ -71,35 +59,34 @@ Tags are not created automatically. You need to click `+` icon near the tag name
![How to create an API token on ThePornDB](/assets/beginner-guides/create-tpdb-token.jpg)
-{:style="counter-reset:none"}
+
1. Go to the **Settings** page in Stash ([http://localhost:9999/settings](http://localhost:9999/settings){:target="_blank"} by default), click **Metadata Providers** on the left side and find **Stash-box Endpoints** at the top.
{:style="counter-reset:none"}
1. Click **Add** and fill out the form that pops up: paste in your API key you created earlier amd enter `ThePornDB` (or anything else you'd like, like TPDB) for **Name**, and enter `https://theporndb.net/graphql` as the **GraphQL endpoint**.
-{:style="counter-reset:none"}
1. Click **Test Credentials** to make sure you've entered everything correctly, then click **Confirm**.
-{:style="counter-reset:none"}
1. Finally, we can use the Scene Tagger to scrape from ThePornDB. First you'll need to switch to "ThePornDB" as the Tagger's source. It will always default to the first Stash-Box source, so you'll need to switch it every time you need something else. Use the same process here as [we used with StashDB and the Scene Tagger](#use-the-scene-tagger). The "Scrape All" and "Scrape by fragment" buttons will match by using file hashes (pHash and oshash). If these don't give you the right results, you can try the "Search" button and customize your search terms as needed. Remember to use as few terms as possible in your search because unneccessary words that don't match ThePornDB's info may block correct results. You can also copy-paste additional terms from TPDB's page if you need to narrow down the Tagger's results more.
![Tagger source set to ThePornDB](/assets/beginner-guides/tagger-source-tpdb.png)
-- **For those wanting to contribute to StashDB**: As noted before, ThePornDB leans heavily on automated scrapers to pull all of their info. Often that data is incomplete or inaccurate compared to what we'd want on StashDB. Before you [submit your scene to StashDB](https://guidelines.stashdb.org/docs/faq_getting-started/drafts/submit-from-stash){:target="_blank"}, you'll need to double-check your info, clean it up a bit first, and make sure you're following [these guidelines](https://guidelines.stashdb.org/docs/scenes){:target="_blank"}. Submitting to StashDB is discussed further in the [last step](#submit-to-stashdb) of this guide.
+!!! note "For those wanting to contribute to StashDB"
+ As noted before, ThePornDB leans heavily on automated scrapers to pull all of their info. Often that data is incomplete or inaccurate compared to what we'd want on StashDB. Before you [submit your scene to StashDB](https://guidelines.stashdb.org/docs/faq_getting-started/drafts/submit-from-stash){:target="_blank"}, you'll need to double-check your info, clean it up a bit first, and make sure you're following [these guidelines](https://guidelines.stashdb.org/docs/scenes){:target="_blank"}. Submitting to StashDB is discussed further in the [last step](#submit-to-stashdb) of this guide.
-# Use Site-Specific Scrapers
+## Use Site-Specific Scrapers
1. If you've already [tried StashDB](#use-the-scene-tagger), you've already [tried ThePornDB](#use-theporndb-endpoint), and you still want to scrape a site directly, you can try using a site-specific scraper. However, every scraper is going to work differently. Some will need Python installed. Others will need you to set a user agent or a Chrome CDP path. A handful will need to be edited and configured first. Only a few can search a studio's website for the right scene. The entire process is much more advanced and is different for each scraper, which is why we recommend StashDB and TPDB first for new users. They can all be found in [the same repo](https://github.com/stashapp/CommunityScrapers){:target="_blank"}. You can download them individually, or you can download the entire repo as a zip archive.
-{:style="counter-reset:none"}
+
1. First you'll want to search [this page](https://github.com/stashapp/CommunityScrapers/blob/master/SCRAPERS-LIST.md){:target="_blank"} for your website to see if we have a scraper for it and to get an idea of what its requirements are. For most of these scrapers, you'll need to find and save a studio URL to your scene first. If you've managed to set up a fragment scraper, you can click on the "Scrape with..." button in the scene's edit tab to select your scraper. Typically fragment scrapers are better than URL scrapers. Otherwise, you'll need to click the button at the far right end of the URL field to run a URL scraper. It should light up when the field is filled with a URL that matches one of your installed scrapers. That's about as detailed as we can get in this guide for new users. If you've tried StashDB, tried TPDB, checked the relevant documentation, checked your logs, and still can't get one of these scrapers working, you can ask for help on [Discord](https://discord.com/channels/559159668438728723){:target="_blank"} in the **#help** channel. More advanced discussions might be moved to the **#scrapers** channel
-# Submit to StashDB
+## Submit to StashDB
1. If you're certain a scene isn't on StashDB and you've found the info using ThePornDB or some other scraper, please consider submitting it to StashDB yourself. That way nobody else will have to duplicate the same work you've done for that particular scene if they can match their [pHash](#generate-phashes) with yours. You'll need to ask for edit privileges in our [Discord](https://discord.com/channels/559159668438728723){:target="_blank"} and follow the guidelines on [this website](https://guidelines.stashdb.org/docs/scenes){:target="_blank"}. In particular, please note that [not every scene can be added to StashDB](https://guidelines.stashdb.org/docs/scenes/create){:target="_blank"} at this time. Some [studios aren't allowed](https://guidelines.stashdb.org/docs/studios/create){:target="_blank"} and [full movies likely won't be eligible](https://guidelines.stashdb.org/docs/scenes/create/full-movie-entries){:target="_blank"} either.
-{:style="counter-reset:none"}
+
1. Also, please don't blindly resubmit data gotten from ThePornDB. You should verify the data is correct and complete first, make sure the URL is right, check for any [missing performers](https://guidelines.stashdb.org/docs/scenes/edit/scene-performers/missing-performers){:target="_blank"}, and look up any relevant [guidelines](https://guidelines.stashdb.org/docs/scenes){:target="_blank"} if something else seems funky to you. You should update your data within Stash before submitting a draft or you can edit the draft on StashDB itself before creating the edit. You should also have the studio URL now, so you should also compare with that page manually or even scrape again with a site-specific scraper as explained in the [previous step](#use-site-specific-scrapers) of this guide. Also please note in your [edit comment](https://guidelines.stashdb.org/docs/faq_getting-started/scenes/scene-edit-comments){:target="_blank"} where your data is coming from.
diff --git a/docs/changelog/v010.md b/docs/changelog/v010.md
new file mode 100644
index 00000000..78134ab8
--- /dev/null
+++ b/docs/changelog/v010.md
@@ -0,0 +1,48 @@
+### ✨ New Features
+
+* Configurable custom performer scrapers
+* Support looping of short videos.
+* Optionally auto-start videos.
+* Add scene auto-tagging from filename
+* Add Play random button to scenes and scene markers page
+* Allow uploading of custom scene covers
+* Configurable custom scene metadata scrapers
+* Add "Open Random" to performer list
+* Add scenes tab to performer page
+* Add version check
+* Add "O-" (or "splooge-") counter
+* Add external_host option
+
+### 🎨 Improvements
+
+* Improve scene wall layout
+* Read config from current working directory before user profile directory
+* Upload pull request builds to transfer.sh
+* Save interface options
+* Change marker time input to mm:ss
+* Allow pasting image into performer/studio
+* Scene UI improvements
+* Update JWPlayer to 8.11.5
+* Beautify scene list table
+* Add responsive menu
+* Make scene metadata from file metadata optional
+* Add transcode seeking support to JWPlayer and remove video.js
+* Allow exclusion patterns for scanning
+* Support scraping from other stash instances
+* Display both server address and listening address in log
+* Add scene duration filter
+* Add useful links to about page
+* Generate a new order when selecting random sorting
+* Maintain filter parameters in session
+* Change thumbnail default size and resize algorithm
+* Improve caching of static files and performer images
+* Improve position and cropping of performer images
+* Improve stats page
+
+### 🐛 Bug fixes
+
+* Fix importing on Windows
+* Fix previews sometimes taking a long time to generate
+* Fix input fields losing focus when switching between windows
+* Fix VTT for chapter display in scene players
+* Fix usage of Box.Bytes causing depreciation message
diff --git a/docs/changelog/v0100.md b/docs/changelog/v0100.md
new file mode 100644
index 00000000..8f58aacf
--- /dev/null
+++ b/docs/changelog/v0100.md
@@ -0,0 +1,45 @@
+!!! info
+ Please check your logs after migrating to this release. A log warning will be generated on startup if duplicate image checksums exist in your system. Search for the images using the logged checksums, and remove the unwanted ones.
+
+!!! info
+ The system will now stop serving requests if authentication is not configured and it detects a connection from public internet. See [this link](https://github.com/stashapp/stash/wiki/Authentication-Required-When-Accessing-Stash-From-the-Internet) for details.
+
+### ✨ New Features
+* Added support for Tag hierarchies. ([#1519](https://github.com/stashapp/stash/pull/1519))
+* Revamped image lightbox to support zoom, pan and various display modes. ([#1708](https://github.com/stashapp/stash/pull/1708))
+* Added support for Studio aliases. ([#1660](https://github.com/stashapp/stash/pull/1660))
+* Added support for querying scene scrapers using keywords. ([#1712](https://github.com/stashapp/stash/pull/1712))
+* Added native support for Apple Silicon / M1 Macs. ([#1646](https://github.com/stashapp/stash/pull/1646))
+* Support subpaths when serving stash via reverse proxy. ([#1719](https://github.com/stashapp/stash/pull/1719))
+* Disallow access from public internet addresses when authentication is not configured. ([#1761](https://github.com/stashapp/stash/pull/1761))
+* Added options to generate webp and static preview files for markers. ([#1604](https://github.com/stashapp/stash/pull/1604))
+* Added sort by option for gallery rating. ([#1720](https://github.com/stashapp/stash/pull/1720))
+* Added Movies to Scene bulk edit dialog. ([#1676](https://github.com/stashapp/stash/pull/1676))
+* Added Movies tab to Studio and Performer pages. ([#1675](https://github.com/stashapp/stash/pull/1675))
+* Support filtering Movies by Performers. ([#1675](https://github.com/stashapp/stash/pull/1675))
+
+### 🎨 Improvements
+* Optimised image thumbnail generation (optionally using `libvips`) and made optional. ([#1655](https://github.com/stashapp/stash/pull/1655))
+* Improved image query performance. ([#1740](https://github.com/stashapp/stash/pull/1740), [#1750](https://github.com/stashapp/stash/pull/1750))
+* Support setting metadata import/export directory from UI. ([#1782](https://github.com/stashapp/stash/pull/1782))
+* Added movie count to performer and studio cards. ([#1760](https://github.com/stashapp/stash/pull/1760))
+* Added date and details to Movie card, and move scene count to icon. ([#1758](https://github.com/stashapp/stash/pull/1758))
+* Added date and details to Gallery card, and move image count to icon. ([#1763](https://github.com/stashapp/stash/pull/1763))
+* Support scraper script logging to specific log levels. ([#1648](https://github.com/stashapp/stash/pull/1648))
+* Added sv-SE language option. ([#1691](https://github.com/stashapp/stash/pull/1691))
+
+### 🐛 Bug fixes
+* Disabled float-on-scroll player on mobile devices. ([#1721](https://github.com/stashapp/stash/pull/1721))
+* Fix video transcoding process starting before video is played. ([#1780](https://github.com/stashapp/stash/pull/1780))
+* Fix Scene Edit Panel form layout for mobile and desktop. ([#1737](https://github.com/stashapp/stash/pull/1737))
+* Don't scan zero-length files. ([#1779](https://github.com/stashapp/stash/pull/1779))
+* Accept svg files in file selector for tag images. ([#1778](https://github.com/stashapp/stash/pull/1778))
+* Optimised exclude filter queries. ([#1815](https://github.com/stashapp/stash/pull/1815))
+* Fix video player aspect ratio shifting sometimes when clicking scene tabs. ([#1764](https://github.com/stashapp/stash/pull/1764))
+* Fix criteria being incorrectly applied when clicking back button. ([#1765](https://github.com/stashapp/stash/pull/1765))
+* Show first page and fix order direction not being maintained when clicking on card popover button. ([#1765](https://github.com/stashapp/stash/pull/1765))
+* Fix panic in autotagger when backslash character present in tag/performer/studio name. ([#1753](https://github.com/stashapp/stash/pull/1753))
+* Fix Scene Player CLS issue ([#1739](https://github.com/stashapp/stash/pull/1739))
+* Fix Gallery create plugin hook not being invoked when creating Gallery from folder. ([#1731](https://github.com/stashapp/stash/pull/1731))
+* Fix tag aliases not being matched when autotagging from the tasks page. ([#1713](https://github.com/stashapp/stash/pull/1713))
+* Fix Create Marker form on small devices. ([#1718](https://github.com/stashapp/stash/pull/1718))
diff --git a/docs/changelog/v011.md b/docs/changelog/v011.md
new file mode 100644
index 00000000..8e0e81ed
--- /dev/null
+++ b/docs/changelog/v011.md
@@ -0,0 +1,2 @@
+### 🐛 Bug fixes
+* Fix version checking.
diff --git a/docs/changelog/v0110.md b/docs/changelog/v0110.md
new file mode 100644
index 00000000..a6c18fc6
--- /dev/null
+++ b/docs/changelog/v0110.md
@@ -0,0 +1,43 @@
+### 💫 [Help Shape the Future of Stash!](https://forms.gle/x5nZa1zrVTJpgMHx8)
+The Stash developers would greatly appreciate if you take a [short, anonymous survey](https://forms.gle/x5nZa1zrVTJpgMHx8). It would help us out a great deal to make yourself heard, let us know how you use Stash, and tell us what you'd like to see in the future.
+
+### ✨ New Features
+* Added Identify task to automatically identify scenes from stash-box/scraper sources. See manual entry for details. ([#1839](https://github.com/stashapp/stash/pull/1839))
+* Added support for matching scenes using perceptual hashes when querying stash-box. ([#1858](https://github.com/stashapp/stash/pull/1858))
+* Generalised Tagger view to support tagging using supported scene scrapers. ([#1812](https://github.com/stashapp/stash/pull/1812))
+* Added built-in `Auto Tag` scene scraper to match performers, studio and tags from filename - using AutoTag logic. ([#1817](https://github.com/stashapp/stash/pull/1817))
+* Add options to auto-start videos when playing from selection and continue to scene playlists. ([#1921](https://github.com/stashapp/stash/pull/1921))
+* Support is (not) null for multi-relational filter criteria. ([#1785](https://github.com/stashapp/stash/pull/1785))
+* Optionally open browser on startup (enabled by default for new systems). ([#1832](https://github.com/stashapp/stash/pull/1832))
+* Support setting defaults for Delete File and Delete Generated Files in the Interface Settings. ([#1852](https://github.com/stashapp/stash/pull/1852))
+* Added interface options to disable creating performers/studios/tags from dropdown selectors. ([#1814](https://github.com/stashapp/stash/pull/1814))
+
+### 🎨 Improvements
+* Added Italian 🇮🇹, French 🇫🇷, and Spanish 🇪🇸 translations ([#1875](https://github.com/stashapp/stash/pull/1875), [#1967](https://github.com/stashapp/stash/pull/1967), [#1886](https://github.com/stashapp/stash/pull/1886))
+* Added stash-id to scene scrape dialog. ([#1955](https://github.com/stashapp/stash/pull/1955))
+* Reworked main navbar and positioned at bottom for mobile devices. ([#1769](https://github.com/stashapp/stash/pull/1769))
+* Show files being deleted in the Delete dialogs. ([#1852](https://github.com/stashapp/stash/pull/1852))
+* Added specific page titles. ([#1831](https://github.com/stashapp/stash/pull/1831))
+* Show pagination at top and bottom of page. ([#1776](https://github.com/stashapp/stash/pull/1776))
+* Include total duration/megapixels and filesize information on Scenes and Images pages. ([#1776](https://github.com/stashapp/stash/pull/1776))
+* Optimised generate process. ([#1871](https://github.com/stashapp/stash/pull/1871))
+* Added clear button to query text field. ([#1845](https://github.com/stashapp/stash/pull/1845))
+* Moved Performer rating stars from details/edit tabs to heading section of performer page. ([#1844](https://github.com/stashapp/stash/pull/1844))
+* Optimised scanning process. ([#1816](https://github.com/stashapp/stash/pull/1816))
+
+### 🐛 Bug fixes
+* Fix tag hierarchy not being validated during tag creation. ([#1926](https://github.com/stashapp/stash/pull/1926))
+* Fix tag hierarchy validation incorrectly failing for some hierarchies. ([#1926](https://github.com/stashapp/stash/pull/1926))
+* Fix exclusion pattern fields losing focus on keypress. ([#1952](https://github.com/stashapp/stash/pull/1952))
+* Include stash ids in import/export. ([#1916](https://github.com/stashapp/stash/pull/1916))
+* Fix tiny menu items in scrape menu when a stash-box instance has no name. ([#1889](https://github.com/stashapp/stash/pull/1889))
+* Fix creating missing entities removing the incorrect entry from the missing list in the scrape dialog. ([#1890](https://github.com/stashapp/stash/pull/1890))
+* Allow creating missing Studio during movie scrape. ([#1899](https://github.com/stashapp/stash/pull/1899))
+* Fix image files in folder galleries not being deleting when delete file option is checked. ([#1872](https://github.com/stashapp/stash/pull/1872))
+* Fix marker generation task reading video files unnecessarily. ([#1871](https://github.com/stashapp/stash/pull/1871))
+* Fix accessing Stash via IPv6 link local address causing security tripwire to be activated. ([#1841](https://github.com/stashapp/stash/pull/1841))
+* Fix Twitter value defaulting to freeones in built-in Freeones scraper. ([#1853](https://github.com/stashapp/stash/pull/1853))
+* Fix colour codes not outputting correctly when logging to file on Windows. ([#1846](https://github.com/stashapp/stash/pull/1846))
+* Sort directory listings using case sensitive collation. ([#1823](https://github.com/stashapp/stash/pull/1823))
+* Fix auto-tag logic for names which have single-letter words. ([#1817](https://github.com/stashapp/stash/pull/1817))
+* Fix huge memory usage spike during clean task. ([#1805](https://github.com/stashapp/stash/pull/1805))
diff --git a/docs/changelog/v0120.md b/docs/changelog/v0120.md
new file mode 100644
index 00000000..82c33b7c
--- /dev/null
+++ b/docs/changelog/v0120.md
@@ -0,0 +1,27 @@
+### ✨ New Features
+* Changed query string parsing behaviour to require all words by default, with the option to `or` keywords and exclude keywords. See the `Browsing` section of the manual for details. ([#1982](https://github.com/stashapp/stash/pull/1982))
+* Show heatmaps and median stroke speed for interactive scenes on the scenes page. ([#2096](https://github.com/stashapp/stash/pull/2096))
+* Added selective clean task. ([#2125](https://github.com/stashapp/stash/pull/2125))
+* Added option to force generation of transcodes for selected scenes. ([#2126](https://github.com/stashapp/stash/pull/2126))
+* Save task options when scanning, generating and auto-tagging. ([#1949](https://github.com/stashapp/stash/pull/1949), [#2061](https://github.com/stashapp/stash/pull/2061))
+* Added forward jump 10 second button to video player. ([#1973](https://github.com/stashapp/stash/pull/1973))
+
+### 🎨 Improvements
+* Overhauled, restructured and added auto-save to the settings pages. ([#2086](https://github.com/stashapp/stash/pull/2086))
+* Added keyboard shortcuts to hide scene page sidebar and scene scrubber. ([#2099](https://github.com/stashapp/stash/pull/2099))
+* Added support for setting scrapers path in the settings page. ([#2124](https://github.com/stashapp/stash/pull/2124))
+* Made scene phash field in File Info tab a link to show duplicate scenes. ([#2154](https://github.com/stashapp/stash/pull/2154))
+* Rollback operation if files fail to be deleted. ([#1954](https://github.com/stashapp/stash/pull/1954))
+* Prefer right-most Studio match in the file path when autotagging. ([#2057](https://github.com/stashapp/stash/pull/2057))
+* Show Created/Updated dates in scene/image/gallery details pages. ([#2145](https://github.com/stashapp/stash/pull/2145))
+* Include path and hashes in destroy scene/image/gallery post hook input. ([#2102](https://github.com/stashapp/stash/pull/2102/files))
+* Added plugin hook for Tag merge operation. ([#2010](https://github.com/stashapp/stash/pull/2010))
+
+### 🐛 Bug fixes
+* Don't include audio in marker previews if Include Audio option is unchecked. ([#2101](https://github.com/stashapp/stash/pull/2101))
+* Include performer aliases when scraping from stash-box. ([#2091](https://github.com/stashapp/stash/pull/2091/files))
+* Remove empty folder-based galleries during clean. ([#1954](https://github.com/stashapp/stash/pull/1954))
+* Select first scene result in scene tagger where possible. ([#2051](https://github.com/stashapp/stash/pull/2051))
+* Reject dates with invalid format. ([#2052](https://github.com/stashapp/stash/pull/2052))
+* Fix Autostart Video on Play Selected and Continue Playlist default settings not working. ([#2050](https://github.com/stashapp/stash/pull/2050))
+* Fix "Custom Performer Images" feature picking up non-image files. ([#2017](https://github.com/stashapp/stash/pull/2017))
diff --git a/docs/changelog/v0130.md b/docs/changelog/v0130.md
new file mode 100644
index 00000000..d2f1302f
--- /dev/null
+++ b/docs/changelog/v0130.md
@@ -0,0 +1,41 @@
+### ✨ New Features
+* Added title, rating and o-counter in image lightbox. ([#2274](https://github.com/stashapp/stash/pull/2274))
+* Added option to hide scene scrubber by default. ([#2325](https://github.com/stashapp/stash/pull/2325))
+* Added support for bulk-editing movies. ([#2283](https://github.com/stashapp/stash/pull/2283))
+* Added support for filtering scenes, images and galleries featuring favourite performers and performer age at time of production. ([#2257](https://github.com/stashapp/stash/pull/2257))
+* Added support for filtering scenes with (or without) phash duplicates. ([#2257](https://github.com/stashapp/stash/pull/2257))
+* Added support for sorting scenes by phash. ([#2257](https://github.com/stashapp/stash/pull/2257))
+* Open stash in system tray on Windows/MacOS when not running via terminal. ([#2073](https://github.com/stashapp/stash/pull/2073))
+* Optionally send desktop notifications when a task completes. ([#2073](https://github.com/stashapp/stash/pull/2073))
+* Added button to image card to view image in Lightbox. ([#2275](https://github.com/stashapp/stash/pull/2275))
+* Added support for submitting performer/scene drafts to stash-box. ([#2234](https://github.com/stashapp/stash/pull/2234))
+
+### 🎨 Improvements
+* Removed generate options from Tasks -> Generate. These should be set in System -> Preview Generation instead. ([#2342](https://github.com/stashapp/stash/pull/2342))
+* Added gallery icon on Image cards. ([#2324](https://github.com/stashapp/stash/pull/2324))
+* Made Performer page consistent with Studio and Tag pages. ([#2200](https://github.com/stashapp/stash/pull/2200))
+* Added gender icons to performers. ([#2179](https://github.com/stashapp/stash/pull/2179))
+* Added button to test credentials when adding/editing stash-box endpoints. ([#2173](https://github.com/stashapp/stash/pull/2173))
+* Show counts on list tabs in Performer, Studio and Tag pages. ([#2169](https://github.com/stashapp/stash/pull/2169))
+
+### 🐛 Bug fixes
+* Fix Scrape All button not returning phash distance-matched results from stash-box. ([#2355](https://github.com/stashapp/stash/pull/2355))
+* Fix performer checksum not being updated when name updated via batch stash-box tag. ([#2345](https://github.com/stashapp/stash/pull/2345))
+* Fix studios/performers/tags with unicode characters not being auto-tagged. ([#2336](https://github.com/stashapp/stash/pull/2336))
+* Preview Generation now uses defaults defined in System settings unless overridden in the Generate options. ([#2328](https://github.com/stashapp/stash/pull/2328))
+* Fix scraped performer tags being incorrectly applied to scene tags. ([#2339](https://github.com/stashapp/stash/pull/2339))
+* Fix performer tattoos incorrectly being applied to Twitter URL during batch performer tag. ([#2332](https://github.com/stashapp/stash/pull/2332))
+* Fix performer country not expanding from code when tagging from stash-box. ([#2323](https://github.com/stashapp/stash/pull/2323))
+* Fix image exclude regex not being honoured when scanning in zips. ([#2317](https://github.com/stashapp/stash/pull/2317))
+* Delete funscripts when deleting scene files. ([#2265](https://github.com/stashapp/stash/pull/2265))
+* Fix regex queries incorrectly being converted to lowercase. ([#2314](https://github.com/stashapp/stash/pull/2314))
+* Fix saved filters with URL encoded characters being incorrectly converted. ([#2301](https://github.com/stashapp/stash/pull/2301))
+* Removed trusted proxies setting. ([#2229](https://github.com/stashapp/stash/pull/2229))
+* Fix preview videos causing background media to stop on Android. ([#2254](https://github.com/stashapp/stash/pull/2254))
+* Allow Stash to be iframed. ([#2217](https://github.com/stashapp/stash/pull/2217))
+* Resolve CDP hostname if necessary. ([#2174](https://github.com/stashapp/stash/pull/2174))
+* Generate sprites for short video files. ([#2167](https://github.com/stashapp/stash/pull/2167))
+* Fix stash-box scraping including underscores in ethnicity. ([#2191](https://github.com/stashapp/stash/pull/2191))
+* Fix stash-box batch performer task not setting birthdate. ([#2189](https://github.com/stashapp/stash/pull/2189))
+* Fix error when scanning symlinks. ([#2196](https://github.com/stashapp/stash/issues/2196))
+* Fix timezone issue with Created/Updated dates in scene/image/gallery details pages. ([#2190](https://github.com/stashapp/stash/pull/2190))
diff --git a/docs/changelog/v0131.md b/docs/changelog/v0131.md
new file mode 100644
index 00000000..4eeb5c06
--- /dev/null
+++ b/docs/changelog/v0131.md
@@ -0,0 +1,2 @@
+### 🐛 Bug fixes
+* Fix auto-tag not using case-insensitive matching. ([#2378](https://github.com/stashapp/stash/pull/2378))
\ No newline at end of file
diff --git a/docs/changelog/v0140.md b/docs/changelog/v0140.md
new file mode 100644
index 00000000..b83ba310
--- /dev/null
+++ b/docs/changelog/v0140.md
@@ -0,0 +1,27 @@
+!!! info
+ Image Slideshow Delay (in Interface Settings) is now in seconds rather than milliseconds and has not been converted. Please adjust your settings as needed.
+
+### ✨ New Features
+* Add Ignore Auto Tag flag to Performers, Studios and Tags. ([#2439](https://github.com/stashapp/stash/pull/2439))
+* Add python location in System Settings for script scrapers and plugins. ([#2409](https://github.com/stashapp/stash/pull/2409))
+
+### 🎨 Improvements
+* Added support for Handy APIv2. ([#2193](https://github.com/stashapp/stash/pull/2193))
+* Added support for bulk editing most performer fields. ([#2467](https://github.com/stashapp/stash/pull/2467))
+* Changed video player to videojs. ([#2100](https://github.com/stashapp/stash/pull/2100))
+* Maintain lightbox settings and add lightbox settings to Interface settings page. ([#2406](https://github.com/stashapp/stash/pull/2406))
+* Image lightbox now transitions to next/previous image when scrolling in pan-Y mode. ([#2403](https://github.com/stashapp/stash/pull/2403))
+* Allow customisation of UI theme color using `theme_color` property in `config.yml` ([#2365](https://github.com/stashapp/stash/pull/2365))
+* Improved autotag performance. ([#2368](https://github.com/stashapp/stash/pull/2368))
+
+### 🐛 Bug fixes
+* Fix existing performers being lost when setting performers in the scene tagger. ([#2478](https://github.com/stashapp/stash/issues/2478))
+* Fix scene fields being overwritten with empty values when saving from the scene tagger. ([#2461](https://github.com/stashapp/stash/pull/2461))
+* Fix Is Missing Date filter not including null date values. ([#2434](https://github.com/stashapp/stash/pull/2434))
+* Fix Open Stash systray menu item not opening stash when Skip Opening Browser was enabled. ([#2418](https://github.com/stashapp/stash/pull/2418))
+* Fix error saving a scene from the tagger when the scene has stash ids. ([#2408](https://github.com/stashapp/stash/pull/2408))
+* Perform tag pattern exclusion on stash-box sources. ([#2391](https://github.com/stashapp/stash/pull/2391))
+* Don't generate jpg thumbnails for animated webp files. ([#2388](https://github.com/stashapp/stash/pull/2388))
+* Removed warnings and incorrect error message in json scrapers. ([#2375](https://github.com/stashapp/stash/pull/2375))
+* Ensure identify continues using other scrapers if a scrape returns no results. ([#2375](https://github.com/stashapp/stash/pull/2375))
+* Continue trying to identify scene if scraper fails. ([#2375](https://github.com/stashapp/stash/pull/2375))
\ No newline at end of file
diff --git a/docs/changelog/v0150.md b/docs/changelog/v0150.md
new file mode 100644
index 00000000..50319ac3
--- /dev/null
+++ b/docs/changelog/v0150.md
@@ -0,0 +1,24 @@
+### ✨ New Features
+* Show Handy status on scene player where applicable. ([#2555](https://github.com/stashapp/stash/pull/2555))
+* Added recommendations to home page. ([#2571](https://github.com/stashapp/stash/pull/2571))
+* Add support for VTT and SRT captions for scenes. ([#2462](https://github.com/stashapp/stash/pull/2462))
+* Added option to require a number of scroll attempts before navigating to next/previous image in Lightbox. ([#2544](https://github.com/stashapp/stash/pull/2544))
+
+### 🎨 Improvements
+* Added Handy server sync button to Interface settings page. ([#2555](https://github.com/stashapp/stash/pull/2555))
+* Changed playback rate options to be the same as those provided by YouTube. ([#2550](https://github.com/stashapp/stash/pull/2550))
+* Display error message on fatal error when running stash with double-click in Windows. ([#2543](https://github.com/stashapp/stash/pull/2543))
+
+### 🐛 Bug fixes
+* Fix gallery zip files being rescanned unnecessarily. ([#2594](https://github.com/stashapp/stash/pull/2594))
+* Fix long Handy initialisation delay. ([#2555](https://github.com/stashapp/stash/pull/2555))
+* Fix lightbox autoplaying while offscreen. ([#2563](https://github.com/stashapp/stash/pull/2563))
+* Fix playback rate resetting when seeking. ([#2550](https://github.com/stashapp/stash/pull/2550))
+* Fix video not starting when clicking scene scrubber. ([#2546](https://github.com/stashapp/stash/pull/2546))
+* Update vtt files when scene hash changes. ([#2554](https://github.com/stashapp/stash/pulls?q=is%3Apr+is%3Aclosed))
+* Don't break up preview video into segments for shorter scenes. ([#2553](https://github.com/stashapp/stash/pull/2553))
+* Fix parsing query URLs when query string contains special characters. ([#2552](https://github.com/stashapp/stash/pull/2552))
+* Fix crash when cancelling pending tasks. ([#2527](https://github.com/stashapp/stash/pull/2527))
+* Fix markers not refreshing after creating new marker. ([#2502](https://github.com/stashapp/stash/pull/2502))
+* Fix error when submitting scene draft to stash-box without performers. ([#2515](https://github.com/stashapp/stash/pull/2515))
+* Fix incorrect video player positioning on touch-enabled devices. ([#2501](https://github.com/stashapp/stash/issues/2501))
diff --git a/docs/changelog/v0160.md b/docs/changelog/v0160.md
new file mode 100644
index 00000000..e65dd05e
--- /dev/null
+++ b/docs/changelog/v0160.md
@@ -0,0 +1,19 @@
+### ✨ New Features
+* Added hotkeys to scrub scene by 10% duration. ([#2678](https://github.com/stashapp/stash/pull/2678))
+* Added support for customizing recommendations on home page. ([#2592](https://github.com/stashapp/stash/pull/2592))
+* Support submitting stash-box scene updates for scenes with stash ids. ([#2577](https://github.com/stashapp/stash/pull/2577))
+
+### 🎨 Improvements
+* Moved Filter and Saved Filters buttons out of the query input field. ([#2668](https://github.com/stashapp/stash/pull/2668))
+
+### 🐛 Bug fixes
+* Fix fields disappearing after creating missing objects in the scrape dialog. ([#2702](https://github.com/stashapp/stash/pull/2702))
+* Fix saved filters with uppercase characters not appearing in filtered results. ([#2698](https://github.com/stashapp/stash/pull/2698))
+* Fix query results not updating when clearing search query field. ([#2686](https://github.com/stashapp/stash/pull/2686))
+* Fix incorrect field name in movie export json. ([#2664](https://github.com/stashapp/stash/pull/2664))
+* Fix ffprobe showing window on some systems. ([#2685](https://github.com/stashapp/stash/pull/2685))
+* Fix portrait videos orienting incorrectly in full-screen mode. ([#2665](https://github.com/stashapp/stash/pull/2665))
+* Fix scene scrubber stopping scrolling after editing scene or marker. ([#2600](https://github.com/stashapp/stash/pull/2600))
+* Fix folder-based galleries not auto-tagging correctly if folder name contains `.` characters. ([#2658](https://github.com/stashapp/stash/pull/2658))
+* Fix scene cover in scene edit panel not being updated when changing scenes. ([#2657](https://github.com/stashapp/stash/pull/2657))
+* Fix moved gallery zip files not being rescanned. ([#2611](https://github.com/stashapp/stash/pull/2611))
diff --git a/docs/changelog/v0161.md b/docs/changelog/v0161.md
new file mode 100644
index 00000000..f0103f76
--- /dev/null
+++ b/docs/changelog/v0161.md
@@ -0,0 +1,10 @@
+### 🐛 Bug fixes
+* Fix New button not being localised correctly. ([#2772](https://github.com/stashapp/stash/pull/2772))
+* Fix scene player losing focus when playing next/previous scene. ([#2758](https://github.com/stashapp/stash/pull/2758))
+* Fix UI crash when % character used in tag names. ([#2757](https://github.com/stashapp/stash/pull/2757))
+* Fix keyboard shortcuts not working after selecting an object. ([#2750](https://github.com/stashapp/stash/pull/2750))
+* Fix UI crash on session timeout. ([#2755](https://github.com/stashapp/stash/pull/2755))
+* Fix incorrect scene metadata being set when video has cover art. ([#2752](https://github.com/stashapp/stash/pull/2752))
+* Fix incorrect image being displayed when first previewing image. ([#2754](https://github.com/stashapp/stash/pull/2754))
+* Fix issues with multi-edit behaviour. ([#2754](https://github.com/stashapp/stash/pull/2724))
+* Fix UI crash after upgrading with pending fingerprints. ([#2754](https://github.com/stashapp/stash/pull/2724))
diff --git a/docs/changelog/v0170.md b/docs/changelog/v0170.md
new file mode 100644
index 00000000..137881ed
--- /dev/null
+++ b/docs/changelog/v0170.md
@@ -0,0 +1,50 @@
+!!! info
+ After migrating, please run a scan on your entire library to populate missing data, and to ingest identical files which were previously ignored.
+
+### 💥 Known issues and other changes
+* Import/export schema has changed and is incompatible with the previous version.
+* `Set name, date, details from embedded file metadata` scan flag is no longer supported. This functionality may be implemented as a built-in scraper in the future.
+
+### ✨ New Features
+* Added support for identical files. Identical files are assigned to the same scene/gallery/image and can be viewed in File Info. ([#2676](https://github.com/stashapp/stash/pull/2676))
+* Added support for setting primary file for scenes, images and galleries. ([#2790](https://github.com/stashapp/stash/pull/2790))
+* Added support for deleting secondary files from scenes, images and galleries. ([#2790](https://github.com/stashapp/stash/pull/2790))
+* Added support for filtering and sorting by file count. ([#2744](https://github.com/stashapp/stash/pull/2744))
+* Added description field to Tags. ([#2708](https://github.com/stashapp/stash/pull/2708))
+* Added Interface option to abbreviate counts on cards and details pages. ([#2781](https://github.com/stashapp/stash/pull/2781))
+* Added Interface options to include sub-studio/sub-tag content in Studio/Tag pages. ([#2832](https://github.com/stashapp/stash/pull/2832))
+* Populate name from query field when creating new performer/studio/tag/gallery. ([#2701](https://github.com/stashapp/stash/pull/2701))
+* Added backup location configuration setting. ([#2953](https://github.com/stashapp/stash/pull/2953))
+* Allow overriding UI localisation strings. ([#2837](https://github.com/stashapp/stash/pull/2837))
+* Added release notes dialog. ([#2726](https://github.com/stashapp/stash/pull/2726))
+
+### 🎨 Improvements
+* **[0.17.1]** Added Ukrainian language option.
+* Object titles are now displayed as the file basename if the title is not explicitly set. The `Don't include file extension as part of the title` scan flag is no longer supported.
+* Optionally show Tag card when hovering over tag badge. ([#2708](https://github.com/stashapp/stash/pull/2708))
+* Show default thumbnails for scenes and images where the actual image is not found. ([#2949](https://github.com/stashapp/stash/pull/2949))
+* Added unix timestamp parsing in the `parseDate` scraper post processor. ([#2817](https://github.com/stashapp/stash/pull/2817))
+* Improve matching scene order in the tagger to prioritise matching phashes and durations. ([#2840](https://github.com/stashapp/stash/pull/2840))
+* Encode reserved characters in query URLs. ([#2899](https://github.com/stashapp/stash/pull/2899))
+* Moved Changelogs to Settings page. ([#2726](https://github.com/stashapp/stash/pull/2726))
+
+### 🐛 Bug fixes
+* **[0.17.2]** Fix file rename detection on case-insensitive file systems. ([#3047](https://github.com/stashapp/stash/pull/3047))
+* **[0.17.2]** Fix size calculation for symlinks. ([#3046](https://github.com/stashapp/stash/pull/3046))
+* **[0.17.2]** Use file base name as title if title is empty in scraper operations. ([#3040](https://github.com/stashapp/stash/pull/3040))
+* **[0.17.2]** Fix error when submitting fingerprints from deleted scene. ([#3039](https://github.com/stashapp/stash/pull/3039))
+* **[0.17.2]** Fix moved zip file creating duplicate galleries. ([#3036](https://github.com/stashapp/stash/pull/3036))
+* **[0.17.1]** Fix Windows exporting incompatible zip files. ([#3022](https://github.com/stashapp/stash/pull/3022))
+* **[0.17.1]** Fix migration error handling various NULL values. ([#3021](https://github.com/stashapp/stash/pull/3021))
+* **[0.17.1]** Updated translations missed during release.
+* Fix live transcoded videos hanging at end. ([#2996](https://github.com/stashapp/stash/pull/2996))
+* Fix display of scene markers when title is empty. ([#2994](https://github.com/stashapp/stash/pull/2994))
+* Fix tag marker count sorting. ([#2993](https://github.com/stashapp/stash/pull/2993))
+* Fix studio/tag alias and caption null filtering. ([#2990](https://github.com/stashapp/stash/pull/2990))
+* Fix generated file naming algorithm being set incorrectly in certain circumstances. ([#2496](https://github.com/stashapp/stash/pull/2946))
+* Fix continue queue checkbox value not persisting. ([#2895](https://github.com/stashapp/stash/pull/2895))
+* Fix `autostartVideoOnPlaySelected` option not applying when navigating from scene queue. ([#2896](https://github.com/stashapp/stash/pull/2896))
+* Fix incorrect gallery value in Scene edit tab after navigating from scene queue. ([#2897](https://github.com/stashapp/stash/pull/2897))
+* Fix https schema not being used over some https connections. ([#2900](https://github.com/stashapp/stash/pull/2900))
+* Fix scene files not deleting correctly when streaming over https. ([#2900](https://github.com/stashapp/stash/pull/2900))
+* Fix panic when custom performer image location is invalid. ([#2894](https://github.com/stashapp/stash/pull/2894))
diff --git a/docs/changelog/v0180.md b/docs/changelog/v0180.md
new file mode 100644
index 00000000..ccf42200
--- /dev/null
+++ b/docs/changelog/v0180.md
@@ -0,0 +1,47 @@
+### 💥 Known issues
+* Performer autotagging does not currently match on performer aliases. This will be addressed when finer control over the matching is implemented.
+
+### ✨ New Features
+* Added disambiguation field to Performers, to differentiate between performers with the same name. ([#3113](https://github.com/stashapp/stash/pull/3113))
+* Added ability to track play count and duration for scenes. ([#3055](https://github.com/stashapp/stash/pull/3055))
+* Scenes now optionally show the last point watched, and can be resumed from that point. ([#3055](https://github.com/stashapp/stash/pull/3055))
+* Added support for filtering stash ids by endpoint. ([#3005](https://github.com/stashapp/stash/pull/3005))
+* Added ability to select rating system in the Interface settings, allowing 5 stars with full-, half- or quarter-stars, or numeric score out of 10 with one decimal point. ([#2830](https://github.com/stashapp/stash/pull/2830))
+* Support creation of scenes without files. ([#3006](https://github.com/stashapp/stash/pull/3006))
+* Added ability to reassign files to other scenes. ([#3006](https://github.com/stashapp/stash/pull/3006))
+* Added ability to split and merge scenes. ([#3006](https://github.com/stashapp/stash/pull/3006))
+* Added Director and Studio Code fields to scenes. ([#3051](https://github.com/stashapp/stash/pull/3051))
+* Added custom javascript option. ([#3132](https://github.com/stashapp/stash/pull/3132))
+* Added filter criteria for Birthdate, Death Date, Date, Created At and Updated At fields. ([#2834](https://github.com/stashapp/stash/pull/2834))
+* Added selector for Country field. ([#1922](https://github.com/stashapp/stash/pull/1922))
+* Added tag description filter criterion. ([#3011](https://github.com/stashapp/stash/pull/3011))
+
+### 🎨 Improvements
+* Changed performer aliases to be a list, rather than a string field. ([#3113](https://github.com/stashapp/stash/pull/3113))
+* Jump back/forward buttons on mobile have been replaced with double-tap gestures on mobile. ([#3120](https://github.com/stashapp/stash/pull/3120))
+* Added shift- and ctrl-keybinds for seeking for shorter and longer intervals, respectively. ([#3120](https://github.com/stashapp/stash/pull/3120))
+* Limit number of items in selector drop-downs to 200. ([#3062](https://github.com/stashapp/stash/pull/3062))
+* Changed Performer height to be numeric, and changed filtering accordingly. ([#3060](https://github.com/stashapp/stash/pull/3060))
+* Improved performance viewing galleries with many images. ([#3183](https://github.com/stashapp/stash/pull/3183))
+* Generated heatmaps now only show ranges within the duration of the scene. ([#3182](https://github.com/stashapp/stash/pull/3182))
+* Added File Modification Time to File Info panels. ([#3054](https://github.com/stashapp/stash/pull/3054))
+* Added counter to File Info tabs for objects with multiple files. ([#3054](https://github.com/stashapp/stash/pull/3054))
+* Added file count in Scene Duplicate Checker for scenes with multiple files. ([#3054](https://github.com/stashapp/stash/pull/3054))
+* Also show imperial units for performer height and weight. ([#3097](https://github.com/stashapp/stash/pull/3097))
+* Added Estonian and Russian Language translations. Added in-progress Languages for Persian, Ukrainian, Bengali, Thai, Romainian, Hungarian, and Czech.([#3024] (https://github.com/stashapp/stash/pull/3024))
+
+### 🐛 Bug fixes
+* Fixed `database is locked` errors when performing operations while running a scan. ([#3153](https://github.com/stashapp/stash/pull/3153))
+* Fixed hang when deleting scene when video has started playing in Firefox. ([#3169](https://github.com/stashapp/stash/pull/3169))
+* Fixed database backup in incorrect directory during migration when database location is an absolute path. ([#3140](https://github.com/stashapp/stash/pull/3140))
+* Fixed autotag error when tagging a large amount of objects. ([#3106](https://github.com/stashapp/stash/pull/3106))
+* Scene Player no longer always resumes playing when seeking. ([#3020](https://github.com/stashapp/stash/pull/3020))
+* Fixed error when editing paths when metadata directory is overridden. ([#3212](https://github.com/stashapp/stash/pull/3212))
+* Fixed sort direction sometimes not being set when selecting a saved filter. ([#3206](https://github.com/stashapp/stash/pull/3206))
+* Fixed gallery create post hook not being fired during gallery creation. ([#3134](https://github.com/stashapp/stash/pull/3134))
+* Fixed Gallery title being incorrectly marked as mandatory for file- and folder-based galleries. ([#3110](https://github.com/stashapp/stash/pull/3110))
+* Fixed Saved Filters not ordered by name. ([#3101](https://github.com/stashapp/stash/pull/3101))
+* Fixed space bar sometimes no playing/pausing the scene player. ([#3020](https://github.com/stashapp/stash/pull/3020))
+* Fixed scrubber thumbnails not disappearing when seeking on mobile. ([#3020](https://github.com/stashapp/stash/pull/3020))
+* Fixed path filter behaviour to be consistent with previous behaviour. ([#3041](https://github.com/stashapp/stash/pull/3041))
+* Fixed `index.html` not correctly served from custom mapped folders. ([#3168](https://github.com/stashapp/stash/pull/3168))
diff --git a/docs/changelog/v0190.md b/docs/changelog/v0190.md
new file mode 100644
index 00000000..9de63607
--- /dev/null
+++ b/docs/changelog/v0190.md
@@ -0,0 +1,29 @@
+### 💥 Known issues
+* Performer autotagging does not currently match on performer aliases. This will be addressed when finer control over the matching is implemented.
+
+### ✨ New Features
+* Added support for specifying the use of a proxy for network requests. ([#3284](https://github.com/stashapp/stash/pull/3284))
+* Added support for injecting arguments into `ffmpeg` during generation and live-transcoding. ([#3216](https://github.com/stashapp/stash/pull/3216))
+* Added URL and Date fields to Images. ([#3015](https://github.com/stashapp/stash/pull/3015))
+* Added support for plugins to add injected CSS and Javascript to the UI. ([#3195](https://github.com/stashapp/stash/pull/3195))
+* Added disambiguation field to Performers, to differentiate between performers with the same name. ([#3113](https://github.com/stashapp/stash/pull/3113))
+* Added Anonymise task to generate an anonymised version of the database. ([#3186](https://github.com/stashapp/stash/pull/3186))
+
+### 🎨 Improvements
+* Added `r x x` keyboard shortcuts to set decimal ratings. ([#3226](https://github.com/stashapp/stash/pull/3226))
+* Changed performer aliases to be a list, rather than a string field. ([#3113](https://github.com/stashapp/stash/pull/3113))
+
+### 🐛 Bug fixes
+* **[0.19.1]** Fixed performance issues with Scene Tagger view. ([#3444](https://github.com/stashapp/stash/pull/3444), [#3452](https://github.com/stashapp/stash/pull/3452))
+* **[0.19.1]** Fixed panic when batch adding performers from the Tagger view. ([#3456](https://github.com/stashapp/stash/pull/3456))
+* Fixed folder symlinks not being handled correctly during clean. ([#3415](https://github.com/stashapp/stash/pull/3415))
+* Fixed error when clicking Scrape All when a file-less scene is in the scene list. ([#3414](https://github.com/stashapp/stash/pull/3414))
+* Fixed clicking popover pills not clearing search term. ([#3408](https://github.com/stashapp/stash/pull/3408))
+* Fixed URL not being preserved when redirected to login. ([#3305](https://github.com/stashapp/stash/pull/3305))
+* Fixed scene previews not being overwritten when Overwrite option is selected. ([#3256](https://github.com/stashapp/stash/pull/3256))
+* Fixed objects without titles not being sorted correctly with objects with titles. ([#3244](https://github.com/stashapp/stash/pull/3244))
+* Fixed incorrect new Performer pill being removed when creating Performer from scrape dialog. ([#3251](https://github.com/stashapp/stash/pull/3251))
+* Fixed date fields not being nulled correctly when cleared. ([#3243](https://github.com/stashapp/stash/pull/3243))
+* Fixed scene wall items to show file base name where scene has no title set. ([#3242](https://github.com/stashapp/stash/pull/3242))
+* Fixed image exclusion pattern being applied to all files. ([#3241](https://github.com/stashapp/stash/pull/3241))
+* Fixed missing captions not being removed during scan. ([#3240](https://github.com/stashapp/stash/pull/3240))
\ No newline at end of file
diff --git a/docs/changelog/v020.md b/docs/changelog/v020.md
new file mode 100644
index 00000000..0185c269
--- /dev/null
+++ b/docs/changelog/v020.md
@@ -0,0 +1,61 @@
+!!! info
+ After upgrading performance will be degraded until a full [scan](/settings?tab=tasks) has been completed.
+
+!!! info
+ [Language](/settings?tab=interface) has been set to \`English (United States)\` by default, which affects number and date formatting.
+
+### ✨ New Features
+* Movies are now supported.
+* Responsive layout for mobile phones.
+* Add support for image scraping.
+* Allow user to regenerate scene cover based on timestamp.
+* Autoassociate galleries to scenes when scanning.
+* Configurable scraper user agent string.
+* Backup database if a migration is needed.
+* Add modes for performer/tag for bulk scene editing.
+* Add gender support for performer.
+* Add SVG studio image support, and studio image caching.
+* Enable sorting for galleries.
+* Add scene rating to scene filename parser.
+* Replace basic auth with cookie authentication.
+* Add detection of container/video_codec/audio_codec compatibility for live file streaming or transcoding.
+* Move image with cover.jpg in name to first place in Galleries.
+* Add "reshuffle button" when sortby is random.
+* Implement clean for missing galleries.
+* Add parser support for 3-letter month.
+* Add is-missing tags filter.
+
+### 🎨 Improvements
+* Performance improvements and improved video support.
+* Support for localized text, dates and numbers.
+* Replace Blueprint with react-bootstrap.
+* Add image count to gallery list.
+* Add library size to main stats page.
+* Add slim endpoints for entities to speed up filters.
+* Export performance optimization.
+* Add random male performer image.
+* Added various missing filters to performer page.
+* Add index/total count to end of pagination buttons.
+* Add flags for performer countries.
+* Overhaul look and feel of folder select.
+* Add cache for gallery thumbnails.
+* Add changelog to start page.
+* Include subdirectories when searching for scraper configurations.
+* Add debug logging for xpath scraping to assist scraper development.
+* Encode pasted images to jpeg.
+* Allow selection of wall preview type: video, animated image and static image.
+* Localize dates and numbers.
+
+### 🐛 Bug fixes
+* Update performer image in UI when it's replaced.
+* Fix performer height filter.
+* Fix error when viewing scenes related to objects with illegal characters in name.
+* Make ethnicity freetext and fix freeones ethnicity panic.
+* Delete marker preview on marker change or delete.
+* Include scene o-counter in import/export.
+* Make image extension check in zip files case insensitive.
+* Fix incorrect stash directory setting when directory has spaces.
+* Update built-in Freeones scraper for new API.
+* Fix redirect loops in login, migrate and setup pages.
+* Make studio, movies, tag, performers scrape/parser matching case insensitive.
+* Fix files with special characters in filename not being scanned.
diff --git a/docs/changelog/v0200.md b/docs/changelog/v0200.md
new file mode 100644
index 00000000..16673ff7
--- /dev/null
+++ b/docs/changelog/v0200.md
@@ -0,0 +1,59 @@
+!!! info
+ The cache directory is now required if using HLS/DASH streaming. Please set the cache directory in the System Settings page.
+
+!!! info
+ The image data subsystem has been reworked in this release. Existing systems will have their storage system set to `Database`, which stores all image data in the database. This can be changed in the System Settings page.
+
+A migration is required to change the storage system, and can be accessed from the Tasks page.
+
+The `Database` storage system is not recommended for large libraries, as it can cause performance issues. The `Filesystem` storage system is recommended for large libraries, and is the default for new systems.
+
+!!! info
+ The `generated/screenshots` jpg files are now considered legacy. These files can be migrated into the blob storage system by running the `Migrate Screenshots` task from the Tasks page.
+
+Once migrated, these files can be deleted. The files can be optionally deleted during the migration.
+
+### ✨ New Features
+* Added `Is Missing Cover` scene filter criterion. ([#3187](https://github.com/stashapp/stash/pull/3187))
+* Added Chapters to Galleries. ([#3289](https://github.com/stashapp/stash/pull/3289))
+* Added button to tagger scene cards to view scene sprite. ([#3536](https://github.com/stashapp/stash/pull/3536))
+* Added hardware acceleration support (for a limited number of encoders) for transcoding. ([#3419](https://github.com/stashapp/stash/pull/3419))
+* Added support for DASH streaming. ([#3275](https://github.com/stashapp/stash/pull/3275))
+* Added configuration option for the maximum number of items in selector drop-downs. ([#3277](https://github.com/stashapp/stash/pull/3277))
+* Added configuration option to perform generation operations sequentially after scanning a new video file. ([#3378](https://github.com/stashapp/stash/pull/3378))
+* Optionally show range in generated funscript heatmaps. ([#3373](https://github.com/stashapp/stash/pull/3373))
+* Show funscript heatmaps in scene player scrubber. ([#3374](https://github.com/stashapp/stash/pull/3374))
+* Support customising the filename regex used for determining the gallery cover image. ([#3391](https://github.com/stashapp/stash/pull/3391))
+* Added tenth-place rating precision option. ([#3343](https://github.com/stashapp/stash/pull/3343))
+* Added toggleable favorite button to Performer cards. ([#3369](https://github.com/stashapp/stash/pull/3369))
+
+### 🎨 Improvements
+* Added date/time pickers for date and timestamp fields. ([#3572](https://github.com/stashapp/stash/pull/3572))
+* Added folder browser to path filter UI. ([#3570](https://github.com/stashapp/stash/pull/3570))
+* Include Organized flag in merge dialog. ([#3565](https://github.com/stashapp/stash/pull/3565))
+* Scene cover generation is now optional during scanning, and can be generated using the Generate task. ([#3187](https://github.com/stashapp/stash/pull/3187))
+* Overhauled the image blob storage system and added filesystem-based blob storage. ([#3187](https://github.com/stashapp/stash/pull/3187))
+* Overhauled filtering interface to allow setting filter criteria from a single dialog. ([#3515](https://github.com/stashapp/stash/pull/3515))
+* Removed upper limit on page size. ([#3544](https://github.com/stashapp/stash/pull/3544))
+* Anonymise task now obfuscates Marker titles. ([#3542](https://github.com/stashapp/stash/pull/3542))
+* Improved Images wall view layout and added Interface settings to adjust the layout. ([#3511](https://github.com/stashapp/stash/pull/3511))
+* Added collapsible divider to Gallery, Performer, Studio and Tag pages. ([#3508](https://github.com/stashapp/stash/pull/3508), [#3514](https://github.com/stashapp/stash/pull/3514))
+* Overhauled and improved HLS streaming. ([#3274](https://github.com/stashapp/stash/pull/3274))
+
+### 🐛 Bug fixes
+* **[0.20.2]** Fixed empty strings being preferred in scrape dialog. ([#3647](https://github.com/stashapp/stash/pull/3647))
+* **[0.20.2]** Fixed scene covers being regenerated when video file was moved. ([#3646](https://github.com/stashapp/stash/pull/3646))
+* **[0.20.1]** Fixed null values being preferred in scrape dialog. ([#3621](https://github.com/stashapp/stash/pull/3621))
+* Fixed login screen not working correctly from the logout screen. ([#3555](https://github.com/stashapp/stash/pull/3555))
+* Fixed incorrect stash ID being overwritten when updating performer with multiple stash-box endpoints. ([#3543](https://github.com/stashapp/stash/pull/3543)
+* Fixed batch performer update overwriting incorrect stash IDs when multiple endpoints are configured. ([#3548](https://github.com/stashapp/stash/pull/3548))
+* Fixed `/stream` endpoint serving directory list. ([#3541](https://github.com/stashapp/stash/pull/3541))
+* Fixed error when querying with a large or unlimited page size. ([#3544](https://github.com/stashapp/stash/pull/3544))
+* Fixed sprites not being displayed for scenes with numeric-only hashes. ([#3513](https://github.com/stashapp/stash/pull/3513))
+* Fixed Save button being disabled when setting Tag image. ([#3509](https://github.com/stashapp/stash/pull/3509))
+* Fixed incorrect performer with identical name being matched when scraping from stash-box. ([#3488](https://github.com/stashapp/stash/pull/3488))
+* Fixed scene cover not being included when submitting file-less scenes to stash-box. ([#3465](https://github.com/stashapp/stash/pull/3465))
+* Fixed URL not being during stash-box scrape if the Studio URL is not set. ([#3439](https://github.com/stashapp/stash/pull/3439))
+* Fixed generating previews for variable frame rate videos. ([#3376](https://github.com/stashapp/stash/pull/3376))
+* Fixed errors reading zip files with non-UTF8 encoding. ([#3389](https://github.com/stashapp/stash/pull/3389))
+* Fixed plugins not able to access API during zip scan operations on systems with authentication enabled. ([#3433](https://github.com/stashapp/stash/pull/3433))
diff --git a/docs/changelog/v021.md b/docs/changelog/v021.md
new file mode 100644
index 00000000..7ffb6808
--- /dev/null
+++ b/docs/changelog/v021.md
@@ -0,0 +1,3 @@
+### 🐛 Bug fixes
+* Fix max loop duration not working.
+* Fix URL sanitization on non-Chrome browsers.
diff --git a/docs/changelog/v0210.md b/docs/changelog/v0210.md
new file mode 100644
index 00000000..51f3ba27
--- /dev/null
+++ b/docs/changelog/v0210.md
@@ -0,0 +1,42 @@
+### ✨ New Features
+* Added VR button to the scene player when the scene tag includes a configurable tag. ([#3636](https://github.com/stashapp/stash/pull/3636))
+* Added ability to include and exclude performers, studios and tags in the same filter. ([#3619](https://github.com/stashapp/stash/pull/3619))
+* Added penis length and circumcision status for Performers. ([#3627](https://github.com/stashapp/stash/pull/3627))
+* Added text field to search criteria in the edit filter dialog. ([#3740](https://github.com/stashapp/stash/pull/3740))
+* Added ability to add (short) video files as images. ([#3583](https://github.com/stashapp/stash/pull/3583))
+* Added ability to force gallery creation by adding `.forcegallery` to directory. ([#3715](https://github.com/stashapp/stash/pull/3715))
+* Added ability to ignore gallery creation by adding `.nogallery` to directory. ([#3715](https://github.com/stashapp/stash/pull/3715))
+* Added Maximum Duration Difference option to the Duplicate Scene Checker. ([#3663](https://github.com/stashapp/stash/pull/3663))
+* Added ability to configure the default sort order for videos served by DLNA. ([#3645](https://github.com/stashapp/stash/pull/3645))
+* Support pinning filter criteria to the top of the edit filter page. ([#3675](https://github.com/stashapp/stash/pull/3675))
+* Added Appears With tab to Performer page showing other performers that appear in the same scenes. ([#3563](https://github.com/stashapp/stash/pull/3563))
+* Added derived Performer O-Counter field. ([#3588](https://github.com/stashapp/stash/pull/3588))
+* Added distance parameter to phash filter. ([#3596](https://github.com/stashapp/stash/pull/3596))
+
+### 🎨 Improvements
+* Gallery Updated At timestamp is now updated when its contents are changed. ([#3771](https://github.com/stashapp/stash/pull/3771))
+* Added male performer images that are consistent with the other performer images. ([#3770](https://github.com/stashapp/stash/pull/3770))
+* Improved the UX when navigating the edit filter dialog using keyboard. ([#3739](https://github.com/stashapp/stash/pull/3739))
+* Changed modifier selector to a set of clickable pills. ([#3598](https://github.com/stashapp/stash/pull/3598))
+* Movie covers can now be shown in the Lightbox when clicking on them. ([#3705](https://github.com/stashapp/stash/pull/3705))
+* Scrapers are now sorted by name in the Scraper UI. ([#3691](https://github.com/stashapp/stash/pull/3691))
+* Changed source selector menu to require click instead of mouseover. ([#3578](https://github.com/stashapp/stash/pull/3578))
+* Updated default studio icon to be consistent with other icons. ([#3577](https://github.com/stashapp/stash/pull/3577))
+* Make cards use up the full width of the screen on mobile. ([#3576](https://github.com/stashapp/stash/pull/3576))
+* Log errors when a graphql request fails. ([#3562](https://github.com/stashapp/stash/pull/3562))
+* Use case insensitive sorting for text based sorting. ([#3560](https://github.com/stashapp/stash/pull/3560))
+* Default date sorting in descending order. ([#3560](https://github.com/stashapp/stash/pull/3560))
+
+### 🐛 Bug fixes
+* Fixed captions not appearing on iOS devices. ([#3729](https://github.com/stashapp/stash/pull/3729))
+* Fixed folder selector appearing for name criterion. ([#3788](https://github.com/stashapp/stash/pull/3788))
+* Fixed generation of interactive heatmaps to match scene duration. ([#3758](https://github.com/stashapp/stash/pull/3758))
+* Fixed incorrect plugin hook being triggered during bulk performer update. ([#3754](https://github.com/stashapp/stash/pull/3754))
+* Fixed error when removing file over network on Windows. ([#3714](https://github.com/stashapp/stash/pull/3714))
+* Fixed scene cards being sized incorrectly on the front page. ([#3724](https://github.com/stashapp/stash/pull/3724))
+* Fixed hair colour not being populated during Batch Update Performers. ([#3718](https://github.com/stashapp/stash/pull/3718))
+* Fixed Create Missing checkbox not appearing in the Identify dialog. ([#3260](https://github.com/stashapp/stash/issues/3260))
+* Fixed override option not being honoured when generating scene covers. ([#3661](https://github.com/stashapp/stash/pull/3661))
+* Fixed error when creating a movie in the scrape scene dialog. ([#3633](https://github.com/stashapp/stash/pull/3633))
+* Fixed issues when scanning a renamed zip file. ([#3610](https://github.com/stashapp/stash/pull/3579))
+* Fixed incorrect Twitter/Instagram URLs sent to stash-box. ([#3579](https://github.com/stashapp/stash/pull/3579))
diff --git a/docs/changelog/v0220.md b/docs/changelog/v0220.md
new file mode 100644
index 00000000..86d2ecb5
--- /dev/null
+++ b/docs/changelog/v0220.md
@@ -0,0 +1,43 @@
+### ✨ New Features
+* Added Studio Tagger. ([#3510](https://github.com/stashapp/stash/pull/3510))
+* Added options to skip multiple results and single name performers during Identify. ([#3707](https://github.com/stashapp/stash/pull/3707))
+* Added folder move detection during scan. ([#3817](https://github.com/stashapp/stash/pull/3817))
+* Changed Scene to accept multiple URLs. ([#3852](https://github.com/stashapp/stash/pull/3852))
+* Added ability to choose from multiple images in the performer scrape dialog. ([#3965](https://github.com/stashapp/stash/pull/3965))
+* Added AirPlay and Chromecast support. ([#3907](https://github.com/stashapp/stash/pull/3907))
+* Added support for creating Movies from the Movie select dropdown. ([#3928](https://github.com/stashapp/stash/pull/3928))
+* Added Optimise Database task. ([#3929](https://github.com/stashapp/stash/pull/3929))
+* Added support for serving interactive CSVs directly to Handy. ([#3756](https://github.com/stashapp/stash/pull/3756))
+* Added video and audio codec filters for scene queries. ([#3843](https://github.com/stashapp/stash/pull/3843))
+
+### 🎨 Improvements
+* Significantly redesigned the Movie, Performer, Studio, and Tag detail pages. ([#3946](https://github.com/stashapp/stash/pull/3946))
+* Added age, gender, country and image to Performer stash-box results. ([#3964](https://github.com/stashapp/stash/pull/3964))
+* Refactored graphql client cache invalidation to improve performance when creating objects. ([#3912](https://github.com/stashapp/stash/pull/3912))
+* Added Gallery card to the Gallery tab on the Scene page. ([#3927](https://github.com/stashapp/stash/pull/3927))
+* Added logging when deleting files. ([#4004](https://github.com/stashapp/stash/pull/4004))
+* Added more stats to the stats page. ([#3812](https://github.com/stashapp/stash/pull/3812))
+* Added support for `-v/--version` command line flag. ([#3883](https://github.com/stashapp/stash/pull/3883))
+
+### 🐛 Bug fixes
+* **[0.22.1]** Fixed Batch Update Performers not working correctly. ([#4024](https://github.com/stashapp/stash/pull/4024))
+* **[0.22.1]** Fixed panic when creating Studios during Identify task. ([#4024](https://github.com/stashapp/stash/pull/4024))
+* **[0.22.1]** Added explicit option to store blobs in database at setup, and fixed default blobs path. ([#4038](https://github.com/stashapp/stash/pull/4038))
+* **[0.22.1]** Fixed dropdown appearing beneath other controls on the Performer and Tag pages. ([#4039](https://github.com/stashapp/stash/pull/4039))
+* **[0.22.1]** Fixed buttons moving around when setting marker time when creating a new marker. ([#4040](https://github.com/stashapp/stash/pull/4040))
+* Fixing sorting of performer tags. ([#4018](https://github.com/stashapp/stash/pull/4018))
+* Fixed scene URLs being cleared when merging scenes. ([#4005](https://github.com/stashapp/stash/pull/4005))
+* Fixed setting the Create Missing flag in the Identify dialog not working. ([#4008](https://github.com/stashapp/stash/pull/4008))
+* Fixed scene marker previews not being renamed when a file hash is changed. ([#3988](https://github.com/stashapp/stash/pull/3988))
+* Fixed parent/child tags not showing popover. ([#3968](https://github.com/stashapp/stash/pull/3968))
+* Fixed scrape not returning any results if only relationship fields were set. ([#3954](https://github.com/stashapp/stash/pull/3954))
+* Fixed rotating in iOS causing scene player to exit fullscreen. ([#3919](https://github.com/stashapp/stash/pull/3919))
+* Repositioned the tag popover to the right on drop-down tag select control. ([#3939](https://github.com/stashapp/stash/pull/3939))
+* Fixed on-screen controls not showing correctly on iPad in Safari. ([#3882](https://github.com/stashapp/stash/pull/3882))
+* Fixed marker tag exclude filtering. ([#3846](https://github.com/stashapp/stash/pull/3846))
+* Fixed error after deleting studio or tag. ([#3835](https://github.com/stashapp/stash/pull/3835))
+* Fixed scene queue show more button appending scenes incorrectly. ([#3851](https://github.com/stashapp/stash/pull/3851))
+* Fixed path sorting ordering numbers before special characters. ([#3829](https://github.com/stashapp/stash/pull/3829))
+* Fixed scene player not staying in full screen when loading a new scene. ([#3828](https://github.com/stashapp/stash/pull/3828))
+* Fixed badge counter value for sub-tags/studios. ([#3816](https://github.com/stashapp/stash/pull/3816))
+* Adjusted dimensions for resolution display and filtering. ([#3798](https://github.com/stashapp/stash/pull/3798))
diff --git a/docs/changelog/v0230.md b/docs/changelog/v0230.md
new file mode 100644
index 00000000..eefb15d3
--- /dev/null
+++ b/docs/changelog/v0230.md
@@ -0,0 +1,25 @@
+### ✨ New Features
+* Added hoverable control at the bottom edge of the scene preview to scrub through the scene. ([#4022](https://github.com/stashapp/stash/pull/4022))
+* Added support for multiple URLs for Images and Galleries. ([#4000](https://github.com/stashapp/stash/pull/4000)/[#4114](https://github.com/stashapp/stash/pull/4114))
+* Added option to mark scene as Organized when saving a scene in the Tagger view. ([#4031](https://github.com/stashapp/stash/pull/4031))
+* Added A/B looping support to the scene player. ([#3904](https://github.com/stashapp/stash/pull/3904))
+* Added new selection options to the Duplicate Checker. ([#4006](https://github.com/stashapp/stash/pull/4006))
+
+### 🎨 Improvements
+* Movies scraped from the scene scrape dialog can now create full movies. ([#4147](https://github.com/stashapp/stash/pull/4147))
+* Improved the lightbox behaviour when using a touchpad or mouse with a smooth wheel. ([#3894](https://github.com/stashapp/stash/pull/3894))
+* Refactored Performer select control to be more performant and to show relevant aliases. ([#4013](https://github.com/stashapp/stash/pull/4013))
+* Made x button on filter badges easier to click. ([#4029](https://github.com/stashapp/stash/pull/4029))
+* Details pages now show the first populated content tab when loaded. ([#4032](https://github.com/stashapp/stash/pull/4032))
+* Refactored the Saved Filter format. ([#4054](https://github.com/stashapp/stash/pull/4054))
+
+### 🐛 Bug fixes
+* **[0.23.1]** Fixed Performers not being set correctly from the Scene scrape dialog. ([#4199](https://github.com/stashapp/stash/pull/4199))
+* **[0.23.1]** Fixed Gallery URLs not being set correctly from the scrape dialog. ([#4187](https://github.com/stashapp/stash/pull/4187))
+* **[0.23.1]** Fixed default slideshow delay value. ([#4186](https://github.com/stashapp/stash/pull/4186))
+* Fixed data corruption that occurred when stash detected a folder had been moved. ([#4169](https://github.com/stashapp/stash/pull/4169))
+* Convert movie duration from seconds during scrape if provided as a number. ([#4144](https://github.com/stashapp/stash/pull/4144))
+* Fixed image clip videos not autoplaying when a page is first loaded. ([#4131](https://github.com/stashapp/stash/pull/4131))
+* Fixed display of cards on the front page on mobile devices. ([#4057](https://github.com/stashapp/stash/pull/4057))
+* Fixed nil pointer dereference when merging scenes. ([#4119](https://github.com/stashapp/stash/pull/4119))
+* Fixed nil pointer dereference when identifying scenes. ([#4171](https://github.com/stashapp/stash/pull/4171))
diff --git a/docs/changelog/v0240.md b/docs/changelog/v0240.md
new file mode 100644
index 00000000..3a3fe9e5
--- /dev/null
+++ b/docs/changelog/v0240.md
@@ -0,0 +1,52 @@
+### ✨ New Features
+* Added manager for installing, updating and uninstalling scrapers and plugins. ([#4242](https://github.com/stashapp/stash/pull/4242))
+* Added support for enabling and disabling plugins in the UI. ([#4141](https://github.com/stashapp/stash/pull/4141))
+* Added support for plugin settings. ([#4143](https://github.com/stashapp/stash/pull/4143))
+* Added support for plugin assets, external scripts and CSP overrides. ([#4260](https://github.com/stashapp/stash/pull/4260))
+* Added UI plugin API to better support UI-based plugins. ([#4256](https://github.com/stashapp/stash/pull/4256))
+* Added Studio Code and Photographer to Galleries. ([#4195](https://github.com/stashapp/stash/pull/4195))
+* Added Details, Studio Code and Photographer to Images. ([#4217](https://github.com/stashapp/stash/pull/4217))
+* Added scene framerate filter. ([#4161](https://github.com/stashapp/stash/pull/4161))
+* Added option to Duplicate Checker to select all files except the highest resolution. ([#4286](https://github.com/stashapp/stash/pull/4286))
+
+### 🎨 Improvements
+* **[0.24.2]** Hide Tags input in Tagger when Set Tags is disabled. ([#4440](https://github.com/stashapp/stash/pull/4440))
+* Show Performer image in Performer select list. ([#4227](https://github.com/stashapp/stash/pull/4227))
+* Match Performers by alias during scraping and tagging if no Performer is found with the exact name (only if a single performer is found with the alias). ([#4182](https://github.com/stashapp/stash/pull/4182))
+* Show Performer disambiguation and add stash-box links to Studio in tagger results. ([#4180](https://github.com/stashapp/stash/pull/4180))
+* Show endpoints with stash ids. ([#4216](https://github.com/stashapp/stash/pull/4216))
+* Load card thumbnails and similar images lazily when a component comes into view, instead of all at once. ([#4228](https://github.com/stashapp/stash/pull/4228))
+* Made the random sorting more random. ([#4246](https://github.com/stashapp/stash/pull/4246))
+* Added more VR projection modes. ([#3799](https://github.com/stashapp/stash/pull/3799))
+* Improved the filtering behaviour when selecting a folder. ([#4277](https://github.com/stashapp/stash/pull/4277))
+* Added support for setting plugins path from the UI. ([#4382](https://github.com/stashapp/stash/pull/4382))
+
+### 🐛 Bug fixes
+* **[0.24.3]** Fixed error when editing case of existing studio name. ([#4447](https://github.com/stashapp/stash/pull/4447))
+* **[0.24.3]** Fixed videos muting after auto-play fails. ([#4450](https://github.com/stashapp/stash/pull/4450))
+* **[0.24.2]** Fixed error when renaming marker files during scene merge operation ([#4446](https://github.com/stashapp/stash/pull/4446))
+* **[0.24.2]** Fixed error when creating/updating a Performer where an alias is the same as the Performer name. ([#4443](https://github.com/stashapp/stash/pull/4443))
+* **[0.24.2]** Errors during the tagger Scrape All operation now output to the scene card and no longer stop the operation. ([#4442](https://github.com/stashapp/stash/pull/4442))
+* **[0.24.2]** Fixed studio image sizing on details pages. ([#4441](https://github.com/stashapp/stash/pull/4441))
+* **[0.24.2]** Fixed URL not being overwritten when specified during Identify ([#4412](https://github.com/stashapp/stash/pull/4412))
+* **[0.24.2]** Fixed plugin settings to be sorted alphabetically, instead of being displayed in a random order. ([#4435](https://github.com/stashapp/stash/pull/4435))
+* **[0.24.2]** Fixed scene queue not respecting the Auto-start video setting. ([#4428](https://github.com/stashapp/stash/pull/4428))
+* **[0.24.2]** Fixed performers incorrectly being matched by alias during scraping. ([#4432](https://github.com/stashapp/stash/pull/4432))
+* **[0.24.2]** Fixed error when filtering on Scene interactive speed. ([#4414](https://github.com/stashapp/stash/pull/4414))
+* **[0.24.2]** Fixed plugin CSP not being enacted. ([#4424](https://github.com/stashapp/stash/pull/4424))
+* **[0.24.1]** Fixed external player button not working correctly. ([#4403](https://github.com/stashapp/stash/pull/4403))
+* **[0.24.1]** Fixed image thumbnail generation on arm devices. ([#4402](https://github.com/stashapp/stash/pull/4402))
+* **[0.24.1]** Reverted change to modal button order. ([#4400](https://github.com/stashapp/stash/pull/4400))
+* Fixed submitting to stash-box not working after switching to another scene using the queue. ([#4354](https://github.com/stashapp/stash/pull/4354))
+* Fixed UI crash when clearing a value from a URL or alias list. ([#4344](https://github.com/stashapp/stash/pull/4344))
+* Fixed panic when exporting galleries. ([#4311](https://github.com/stashapp/stash/pull/4311))
+* Fixed error when setting performer height with decimals. ([#4283](https://github.com/stashapp/stash/pull/4283))
+* Fixed Performer stash ids being overwritten instead of merged when saving a Performer in the Performer tagger. ([#4215](https://github.com/stashapp/stash/pull/4215))
+* Fixed organized being set to false if `Mark as Organized on save` is false when saving a scene in the tagger. ([#4213](https://github.com/stashapp/stash/pull/4213))
+* Fixed URLs not populating correctly when scraping galleries. ([#4206](https://github.com/stashapp/stash/pull/4206))
+* Fixed not being able to click next/previous scene if the applicable scenes had not been loaded by the queue. ([#4325](https://github.com/stashapp/stash/pull/4325))
+* Fixed confirmation dialog not appearing on some screens when using the delete keyboard shortcut. ([#4387](https://github.com/stashapp/stash/pull/4387))
+* Fixed desktop notifications not appearing on macos. ([#4153](https://github.com/stashapp/stash/pull/4153))
+* Fixed video sometimes pausing when clicking on the scene scrubber. ([#4295](https://github.com/stashapp/stash/pull/4295))
+* Fixed file paths not being shown when deleting image clips. ([#4323](https://github.com/stashapp/stash/pull/4323))
+* Fixed image o-counts not being included in stats page. ([#4386](https://github.com/stashapp/stash/pull/4323))
\ No newline at end of file
diff --git a/docs/changelog/v0250.md b/docs/changelog/v0250.md
new file mode 100644
index 00000000..c84b0c3d
--- /dev/null
+++ b/docs/changelog/v0250.md
@@ -0,0 +1,68 @@
+!!! info
+ A number of settings and tasks are now only available when `Advanced Mode` is set to true in the settings, including the `Auto Tag` and `Identify` tasks.
+
+### ✨ New Features
+* Added Scene play and o-counter history tracking, view and editing. ([#4532](https://github.com/stashapp/stash/pull/4532))
+* Added Advanced settings flag. ([#4378](https://github.com/stashapp/stash/pull/4378))
+* Added support for setting galleries in Image edit panel and Bulk Edit Image dialog. ([#4573](https://github.com/stashapp/stash/pull/4573)/[#4608](https://github.com/stashapp/stash/pull/4608))
+* Added option to generate image thumbnails during generate. ([#4602](https://github.com/stashapp/stash/pull/4602))
+* Added Clean Generated Files task. ([#4607](https://github.com/stashapp/stash/pull/4607))
+* Added more options to Performer gender filter. ([#4419](https://github.com/stashapp/stash/pull/4419))
+* Added image orientation filtering. ([#4404](https://github.com/stashapp/stash/pull/4404))
+* Added filtering and sorting of Studios on subsidiary Studio count. ([#4479](https://github.com/stashapp/stash/pull/4479))
+* Added image performer age filter. ([#4601](https://github.com/stashapp/stash/pull/4601))
+
+### 🎨 Improvements
+* Overhauled the list view for scenes, galleries and performers. ([#4368](https://github.com/stashapp/stash/pull/4368))
+* Made grid card fit cards properly within their containers. ([#4514](https://github.com/stashapp/stash/pull/4514))
+* Improved the presentation of the toast notifications. ([#4584](https://github.com/stashapp/stash/pull/4584))
+* Improved Tag, Studio, Gallery and Movie select controls. ([#4478](https://github.com/stashapp/stash/pull/4478)/[#4493](https://github.com/stashapp/stash/pull/4493)/[#4535](https://github.com/stashapp/stash/pull/4535)/[#4563](https://github.com/stashapp/stash/pull/4563))
+* Improve sorting of results when entering text in select fields. ([#4528](https://github.com/stashapp/stash/pull/4528))
+* Add disambiguation to performer link and performer select values. ([#4541](https://github.com/stashapp/stash/pull/4541))
+* Show upgradable packages only when checking for updates in the package managers. ([#4599](https://github.com/stashapp/stash/pull/4599))
+* Include primary tag name in Scene Marker search and sort. ([#4606](https://github.com/stashapp/stash/pull/4606))
+* Improved presentation of scene queue. ([#4448](https://github.com/stashapp/stash/pull/4448))
+* Improved zip file move detection. ([#4374](https://github.com/stashapp/stash/pull/4374))
+* Saving images will now name them based on the original filename. ([#4616](https://github.com/stashapp/stash/pull/4616))
+* Improved scene tagger matching prioritisation. ([#4618](https://github.com/stashapp/stash/pull/4618))
+* Added support for disabling mobile media-viewer's fullscreen auto-rotate. ([#4416](https://github.com/stashapp/stash/pull/4416))
+* Defer loading edit panel data until needed. ([#4564](https://github.com/stashapp/stash/pull/4564))
+* Performer stash-box draft now includes the Disambiguation field. ([#4122](https://github.com/stashapp/stash/pull/4122))
+
+### 🐛 Bug fixes
+* **[0.25.1]** Fixed captions with embedded timestamps rendering incorrectly. ([#4682](https://github.com/stashapp/stash/pull/4682))
+* **[0.25.1]** Fixed buffering time included in scene play time. ([#4670](https://github.com/stashapp/stash/pull/4670))
+* **[0.25.1]** Fixed medium fingerprint match colour. ([#4662](https://github.com/stashapp/stash/pull/4662))
+* **[0.25.1]** Fixed image clip webm files not being cleaned by Clean Generate task. ([#4657](https://github.com/stashapp/stash/pull/4657))
+* **[0.25.1]** Fixed ffmpeg error when transcoding files where max transcode size is set. ([#4660](https://github.com/stashapp/stash/pull/4660))
+* Fixed invalid share causing error during cleaning. ([#4570](https://github.com/stashapp/stash/pull/4570))
+* Fixed stash ids being removed when tagging Studio using the Studio Tagger. ([#4572](https://github.com/stashapp/stash/pull/4572))
+* Fixed Plugin manager failing to get any updates if any installed sources are not found. ([#4591](https://github.com/stashapp/stash/pull/4591))
+* Fixed `.forcegallery` file not being honoured when re-scanning after adding the file. ([#4627](https://github.com/stashapp/stash/pull/4627))
+* Fixed Gallery Image filtering. ([#4535](https://github.com/stashapp/stash/pull/4535))
+* Fixed Studio overlay not being shown on Image cards, and Studio text not being shown on Gallery cards. ([#4540](https://github.com/stashapp/stash/pull/4540))
+* Wrap grid card popovers. ([#4539](https://github.com/stashapp/stash/pull/4539))
+* Fix merge scene not deleting generated files. ([#4567](https://github.com/stashapp/stash/pull/4567))
+* Fixed auto tag from object not honouring the ignore autotag flag. ([#4610](https://github.com/stashapp/stash/pull/4610))
+* Fixed moved files causing re-generation of phashes. ([#4598](https://github.com/stashapp/stash/pull/4598))
+* Fixed Movie scene sorting in Movie view. ([#4588](https://github.com/stashapp/stash/pull/4588))
+* Fixed `baseURL` not being applied to some links. ([#4501](https://github.com/stashapp/stash/pull/4501))
+* Fixed country selector in bulk performer edit dialog. ([#4565](https://github.com/stashapp/stash/pull/4565))
+* Fixed image clips not upscaling in lightbox. ([#4569](https://github.com/stashapp/stash/pull/4569))
+* Fixed `bmp` files being treated as video files in the lightbox. ([#4653](https://github.com/stashapp/stash/pull/4653))
+* Fixed performer penis length being truncated to integer. ([#4630](https://github.com/stashapp/stash/pull/4630))
+* Fixed heatmap generating repeated segments where there is no action. ([#4557](https://github.com/stashapp/stash/pull/4557))
+* Fixed media decode error not switching to next streaming format. ([#4506](https://github.com/stashapp/stash/pull/4506))
+* Fixed image scraping not using proxy. ([#4637](https://github.com/stashapp/stash/pull/4637))
+* Fixed broken favicon after logging in using Firefox. ([#4498](https://github.com/stashapp/stash/pull/4498))
+* Moved tag hover popover to the right. ([#4593](https://github.com/stashapp/stash/pull/4593))
+* Fixed weird 404 behaviour in plugin assets handler. ([#4597](https://github.com/stashapp/stash/pull/4597))
+
+### Plugin API changes
+* Added `Mousetrap` and `MousetrapPause` to `PluginApi.libraries`. ([#4489](https://github.com/stashapp/stash/pull/4489))
+* Added `useToast` to `PluginApi.hooks`. ([#4546](https://github.com/stashapp/stash/pull/4546))
+* Exposed Studio, Performer, Tag and Gallery selects, and date, country and folder inputs in `PluginApi.components`. ([#4546](https://github.com/stashapp/stash/pull/4546))
+* Made `task_name` parameter optional, added an optional `description` parameter and deprecated `args` for a generic map parameter `args_map` in `runPluginTask`. ([#4603](https://github.com/stashapp/stash/pull/4603))
+* Added `runPluginOperation` to run synchronous plugin operations with a return value, without using the task manager. ([#4603](https://github.com/stashapp/stash/pull/4603))
+* Added `PluginApi.Event.addEventListener` and `stash:location` event dispatching.
+* Relaxed plugin cyclic loop detection to allow up to ten loops. ([#4625](https://github.com/stashapp/stash/pull/4625))
\ No newline at end of file
diff --git a/docs/changelog/v0260.md b/docs/changelog/v0260.md
new file mode 100644
index 00000000..dd19da22
--- /dev/null
+++ b/docs/changelog/v0260.md
@@ -0,0 +1,48 @@
+!!! info
+ The `Enable Scene Play History` setting has been set to true for existing systems. This setting enables play counts and resuming scenes from where they were previously played. If you do not want this enabled, please disable it explicitly in `Settings -> Interface -> Scene Player -> Enable Scene Play History`.
+
+### ✨ New Features
+* Added support for favorite Tags and Studios. ([#4728](https://github.com/stashapp/stash/pull/4728), [#4675](https://github.com/stashapp/stash/pull/4675))
+* Added filtering of scenes by galleries, bitrate and last played time. ([#4632](https://github.com/stashapp/stash/pull/4632), [#4713](https://github.com/stashapp/stash/pull/4713), [#4829](https://github.com/stashapp/stash/pull/4829))
+* Added support for sorting Performers by Last O At, Last Played At, and Play Count. ([#4649](https://github.com/stashapp/stash/pull/4649))
+* Added filtering of Performers by Play Count. ([#4649](https://github.com/stashapp/stash/pull/4649))
+* Added support for configuring the DLNA port. ([#4836](https://github.com/stashapp/stash/pull/4836))
+* Add support for filtering galleries by related scenes. ([#4840](https://github.com/stashapp/stash/pull/4840))
+* FFMpeg and FFProbe paths can now be set in `Settings -> System`, and can also be downloaded from this screen. ([#4688](https://github.com/stashapp/stash/pull/4688))
+
+### 🎨 Improvements
+* Scan, Generate and Auto Tag options are now saved as they are changed. ([#4591](https://github.com/stashapp/stash/pull/4591))
+* Made migration an asynchronous task. No more time outs during the migration process. ([#4666](https://github.com/stashapp/stash/pull/4666))
+* FFMpeg is now downloaded using a task rather than automatically during setup. ([#4688](https://github.com/stashapp/stash/pull/4688))
+* Moved the details toolbar in Scene, Image and Gallery pages to above the tabs, moved rating control to the toolbar, and added other details. ([#4714](https://github.com/stashapp/stash/pull/4714))
+* Improved Scene, Movie and Gallery select controls. ([#4832](https://github.com/stashapp/stash/pull/4832), [#4851](https://github.com/stashapp/stash/pull/4851))
+* When enabled, full hardware transcoding is used where possible. ([#4765](https://github.com/stashapp/stash/pull/4765))
+* Made directors and photographers clickable links in detail view ([#4621](https://github.com/stashapp/stash/pull/4621))
+* Redundant filter pills are no longer shown on filter sub-views. ([#4705](https://github.com/stashapp/stash/pull/4705))
+* Enforce whitelist for sort values (CVE-2024-32231). ([#4865](https://github.com/stashapp/stash/pull/4865))
+* Changed umask when creating config file to exclude user write (CVE-2024-32233) ([#4866](https://github.com/stashapp/stash/pull/4866))
+
+### 🐛 Bug fixes
+* **[0.26.2]** Fixed issue where performer could not be created without disambiguation if a performer with the same name and populated disambiguation exists. ([#5019](https://github.com/stashapp/stash/pull/5019))
+* **[0.26.2]** Fix resize loop in grid views. ([#5004](https://github.com/stashapp/stash/pull/5004))
+* **[0.26.2]** Fix query field values duplicating in tagger view when scene list is updated. ([#5000](https://github.com/stashapp/stash/pull/5000))
+* **[0.26.2]** Fix identify clearing parent studio when merging studio field. ([#4993](https://github.com/stashapp/stash/pull/4993))
+* **[0.26.2]** Fix manually selected studio not being applied during scrape. ([#4953](https://github.com/stashapp/stash/pull/4953))
+* **[0.26.1]** Fixed identify task defaults not displaying correctly. ([#4931](https://github.com/stashapp/stash/pull/4931))
+* **[0.26.1]** Fixed issue where full hardware transcoding did not work where a filter was not required. ([#4934](https://github.com/stashapp/stash/pull/4934))
+* **[0.26.1]** Fixed new performer tags not displaying correctly in the performer scrape dialog. ([#4943](https://github.com/stashapp/stash/pull/4943))
+* **[0.26.1]** Added missing `console` object in javascript runtime environment. ([#4944](https://github.com/stashapp/stash/pull/4944))
+* Fix selected tagger search result being lost when creating objects. ([#4715](https://github.com/stashapp/stash/pull/4715))
+* Fixed error when adding performer with duplicate aliases using the performer tagger. ([#4801](https://github.com/stashapp/stash/pull/4801))
+* Fixed interactive speed being lost when file is moved. ([#4799](https://github.com/stashapp/stash/pull/4799))
+* Fixed missing studio selector in movie scrape dialog. ([#4692](https://github.com/stashapp/stash/pull/4692))
+* Fixed values being reset when changing mode in bulk edit dialog. ([#4854](https://github.com/stashapp/stash/pull/4854))
+* Fixed python not being resolved correctly if not in path. ([#4864](https://github.com/stashapp/stash/pull/4864))
+* Fixed scraped tag exclusions not applying to galleries and performers ([#4872](https://github.com/stashapp/stash/pull/4872))
+* Fixed UI not loading on Safari 12. ([#4874](https://github.com/stashapp/stash/pull/4874))
+* Include director field when adding movies from the scene scrape dialog. ([#4757](https://github.com/stashapp/stash/pull/4757))
+* Fixed detail items not wrapping correctly. ([#4730](https://github.com/stashapp/stash/pull/4730))
+* Fixed duplicate scene checker selection logic. ([#4800](https://github.com/stashapp/stash/pull/4800))
+* Fixed video streams being reencoded unnecessarily. ([#4783](https://github.com/stashapp/stash/pull/4783))
+* Improved support for Samsung SmartTV for built-in DLNA server ([#4784](https://github.com/stashapp/stash/pull/4784))
+* Fixed incorrect status code for `ErrUnauthorized` errors. ([#4842](https://github.com/stashapp/stash/pull/4842))
\ No newline at end of file
diff --git a/docs/changelog/v0270.md b/docs/changelog/v0270.md
new file mode 100644
index 00000000..3491641f
--- /dev/null
+++ b/docs/changelog/v0270.md
@@ -0,0 +1,79 @@
+!!! info
+ The Movie concept has been renamed to Group.
+
+!!! info
+ Tagger settings have been reset, but are now persisted between browser sessions. `Show male performers` and `Set Tags` are now defaulted to true. Please verify your settings before using the Tagger.
+
+### ✨ New Features
+* Movies have been renamed to `Groups` and now may contain orderable sub-groups with descriptions. ([#5105](https://github.com/stashapp/stash/pull/5105))
+* Added support for multiple URLs for Performers. ([#4958](https://github.com/stashapp/stash/pull/4958))
+* Added ability to set tags on Studios. ([#4858](https://github.com/stashapp/stash/pull/4858))
+* Added support for multiple URLs for Groups. ([#4900](https://github.com/stashapp/stash/pull/4900))
+* Added ability to set tags on Groups. ([#4969](https://github.com/stashapp/stash/pull/4969))
+* Added ability to set a specific image as a Gallery Cover. ([#5182](https://github.com/stashapp/stash/pull/5182))
+* Added support for setting default filter for all views. ([#4962](https://github.com/stashapp/stash/pull/4962))
+* Added preview scrubber to Gallery cards. ([#5133](https://github.com/stashapp/stash/pull/5133))
+* Added support for bulk-editing Tags. ([#4925](https://github.com/stashapp/stash/pull/4925))
+* Added filter to Scrapers menu. ([#5041](https://github.com/stashapp/stash/pull/5041))
+* Added ability to set the location of ssl certificate files. ([#4910](https://github.com/stashapp/stash/pull/4910))
+* Added option to rescan all files in the Scan task. ([#5254](https://github.com/stashapp/stash/pull/5254))
+
+### 🎨 Improvements
+* **[0.27.2]** Scene player now shows the starting position when resume time is set. ([#5379](https://github.com/stashapp/stash/pull/5379))
+* **[0.27.1]** Live transcode requests are now debounced to spawn fewer `ffmpeg` instances while scrubbing. ([#5340](https://github.com/stashapp/stash/pull/5340))
+* **[0.27.1]** Blobs location may now be set using environment variable `STASH_BLOBS`. ([#5345](https://github.com/stashapp/stash/pull/5345))
+* Added button to view sub-studio/sub-tag content on Studio/Tag details pages. ([#5080](https://github.com/stashapp/stash/pull/5080))
+* Made tagger settings persistent. ([#5165](https://github.com/stashapp/stash/pull/5165))
+* Added birthdate and age to Performer select. ([#5076](https://github.com/stashapp/stash/pull/5076))
+* Made pagination control more compact. ([#4882](https://github.com/stashapp/stash/pull/4882))
+* Added filter and count badge to Scraper lists in the `Metadata Providers` page, and improved presentation. ([#5040](https://github.com/stashapp/stash/pull/5040))
+* Clicking `Rescan` on the details pages will now properly recalculate file details. ([#5043](https://github.com/stashapp/stash/pull/5043))
+* Added performer sorting options for `career length`, `measurements` and `weight`. ([#5129](https://github.com/stashapp/stash/pull/5129))
+* Added `path` column option to scene and gallery list tables. ([#5005](https://github.com/stashapp/stash/pull/5005))
+* Moved `Reload scrapers` option to top of Scrapers menus. ([#5142](https://github.com/stashapp/stash/pull/5142))
+* Added `scene` filter criterion for Scene Marker queries. ([#5097](https://github.com/stashapp/stash/pull/5097))
+* Scene Player now allows interacting with the controls before playing video, and errors no longer prevent interacting with the Scene Player. ([#5145](https://github.com/stashapp/stash/pull/5145))
+
+### 🐛 Bug fixes
+* **[0.27.2]** Fixed items being selected twice when selecting items in the Grid list. ([#5377](https://github.com/stashapp/stash/pull/5377))
+* **[0.27.2]** Fixed 62 migration error for some users. ([#5363](https://github.com/stashapp/stash/pull/5363))
+* **[0.27.2]** Fixed scenes incorrectly autoplaying on queue selection. ([#5379](https://github.com/stashapp/stash/pull/5379))
+* **[0.27.2]** Videos no longer begin playing when seeking before video has started. ([#5379](https://github.com/stashapp/stash/pull/5379))
+* **[0.27.2]** Videos will now resume from the correct time when switching sources due to error. ([#5379](https://github.com/stashapp/stash/pull/5379))
+* **[0.27.1]** Fixed UI infinite loop when sorting by random without a seed in the URL. ([#5319](https://github.com/stashapp/stash/pull/5319))
+* **[0.27.1]** Fixed dropdowns not displaying correctly in the merge dialogs. ([#5299](https://github.com/stashapp/stash/pull/5299))
+* **[0.27.1]** For single URLs, link icon now shows the dropdown menu instead of navigating to the URL. ([#5310](https://github.com/stashapp/stash/pull/5310))
+* **[0.27.1]** Fixed redirection when page > total pages to the last page instead of the first. ([#5321](https://github.com/stashapp/stash/pull/5321))
+* **[0.27.1]** Fixed display of rating criterion when using decimal rating system. ([#5334](https://github.com/stashapp/stash/pull/5334))
+* **[0.27.1]** Fixed parent/child Tags not showing in alphabetical order. ([#5320](https://github.com/stashapp/stash/pull/5320))
+* **[0.27.1]** Fixed performance issue when viewing studios where system has many images with no studios. ([#5335](https://github.com/stashapp/stash/pull/5335))
+* **[0.27.1]** Clicking on the video player timeline before video is started now plays the video from that point instead of playing from the beginning. ([#5340](https://github.com/stashapp/stash/pull/5340))
+* **[0.27.1]** Fixed UI crash when front page has filters using legacy `movies` scene filter. ([#5348](https://github.com/stashapp/stash/pull/5348))
+* **[0.27.1]** Restored legacy behaviour where selection is persisted when paging or changing filter. ([#5349](https://github.com/stashapp/stash/pull/5349))
+* **[0.27.1]** Fixed UI crash when navigating to image without files. ([#5325](https://github.com/stashapp/stash/pull/5325))
+* **[0.27.1]** Fixed panic when deleting image without files. ([#5328](https://github.com/stashapp/stash/pull/5328))
+* **[0.27.1]** Fixed matched performer and studio links not including base URL in Tagger. ([#5337](https://github.com/stashapp/stash/pull/5337))
+* Fixed videos and images having incorrect dimensions when the orientation flag is set to a non-default value during scan. ([#5188](https://github.com/stashapp/stash/pull/5188), [#5189](https://github.com/stashapp/stash/pull/5189))
+* Fixed mp4 videos being incorrectly transcoded when the file has opus audio codec. ([#5030](https://github.com/stashapp/stash/pull/5030))
+* Fixed o-history being imported as view-history when importing from JSON. ([#5127](https://github.com/stashapp/stash/pull/5127))
+* Deleting a zip-based or folder-based Gallery and deleting the file/folder now removes files from the existing image if the image has multiple files, instead of removing the image. ([#5213](https://github.com/stashapp/stash/pull/5213))
+* Fixed Intel Quicksync hardware encoding support. ([#5069](https://github.com/stashapp/stash/pull/5069))
+* Fixed hardware transcoding not working correctly on macOS devices. ([#4945](https://github.com/stashapp/stash/pull/4945))
+* Fixed ffmpeg version detection for `n`- prefixed version numbers. ([#5102](https://github.com/stashapp/stash/pull/5102))
+* Anonymise now truncates o- and view history data. ([#5166](https://github.com/stashapp/stash/pull/5166))
+* Fixed issue where using mouse wheel on numeric input fields would scroll the window in addition to changing the value. ([#5199](https://github.com/stashapp/stash/pull/5199))
+* Fixed issue where some o-dates could not be deleted. ([#4971](https://github.com/stashapp/stash/pull/4971))
+* Fixed handling of symlink zip files. ([#5249](https://github.com/stashapp/stash/pull/5249))
+* Fixed default database backup directory being set to the config file directory instead of the database directory. ([#5250](https://github.com/stashapp/stash/pull/5250))
+* Added API key to DASH and HLS manifests. ([#5061](https://github.com/stashapp/stash/pull/5061))
+* Query field no longer focused when selecting items in the filter list on touch devices. ([#5204](https://github.com/stashapp/stash/pull/5204))
+* Fixed weird scrolling behaviour on Gallery detail page on smaller viewports ([#5205](https://github.com/stashapp/stash/pull/5205))
+* Performer popover links now correctly link to the applicable scenes/image/gallery query page instead of always going to scenes. ([#5195](https://github.com/stashapp/stash/pull/5195))
+* Fixed scene player source selector appearing behind the player controls. ([#5229](https://github.com/stashapp/stash/pull/5229))
+* Fixed red/green/blue slider values in the Scene Filter panel. ([#5221](https://github.com/stashapp/stash/pull/5221))
+* Play button no longer appears on file-less Scenes. ([#5141](https://github.com/stashapp/stash/pull/5141))
+* Fixed transgender icon colouring. ([#5090](https://github.com/stashapp/stash/pull/5090))
+* Refreshed built in freeones scraper. ([#5171](https://github.com/stashapp/stash/pull/5171))
+
+### Plugin API changes
+* `PluginAPI.patch.instead` now allows for multiple plugins to hook into a single function. ([#5125](https://github.com/stashapp/stash/pull/5125))
\ No newline at end of file
diff --git a/docs/changelog/v030.md b/docs/changelog/v030.md
new file mode 100644
index 00000000..60b04427
--- /dev/null
+++ b/docs/changelog/v030.md
@@ -0,0 +1,48 @@
+!!! info
+ After upgrading, the next scan will populate all scenes with oshash hashes. MD5 calculation can be disabled after populating the oshash for all scenes. See \`Hashing Algorithms\` in the \`Configuration\` section of the manual for details.
+
+### ✨ New Features
+* Show and allow creation of unknown performers/tags/studios/movies in the scraper dialog.
+* Add support for scraping movie details.
+* Add support for JSON scrapers.
+* Add support for plugin tasks.
+* Add oshash algorithm for hashing scene video files. Enabled by default on new systems.
+* Support (re-)generation of generated content for specific scenes.
+* Add tag thumbnails, tags grid view and tag page.
+* Add post-scrape dialog.
+* Add various keyboard shortcuts (see manual).
+* Support deleting multiple scenes.
+* Add in-app help manual.
+* Add support for custom served folders.
+* Add support for parent/child studios.
+
+### 🎨 Improvements
+* Support cbz galleries.
+* Improve sprite generation performance.
+* Make preview generation more fault-tolerant.
+* Allow clearing of images and querying on missing images.
+* Allow free-editing of scene movie number.
+* Allow adding performers and studios from selectors.
+* Add support for chrome dp in xpath scrapers.
+* Allow customisation of preview video generation.
+* Add support for live transcoding in Safari.
+* Add mapped and fixed post-processing scraping options.
+* Add random sorting for performers.
+* Search for files which have low or upper case supported filename extensions.
+* Add dialog when pasting movie images.
+* Allow click and click-drag selection after selecting scene.
+* Added multi-scene edit dialog.
+* Moved images to separate tables, increasing performance.
+* Add gallery grid view.
+* Add is-missing scene filter for gallery query.
+* Don't import galleries with no images, and delete galleries with no images during clean.
+* Show pagination at top as well as bottom of the page.
+* Add split xpath post-processing action.
+* Improved the layout of the scene page.
+* Show rating as stars in scene page.
+* Add reload scrapers button.
+
+### 🐛 Bug fixes
+* Fix directories with video name extensions being detected as files to be scanned.
+* Fix issues moving generated files between file systems.
+* Fix formatted dates using incorrect timezone.
diff --git a/docs/changelog/v040.md b/docs/changelog/v040.md
new file mode 100644
index 00000000..eabfce62
--- /dev/null
+++ b/docs/changelog/v040.md
@@ -0,0 +1,41 @@
+!!! info
+ After upgrading, please [verify your stash library settings](/settings?tab=configuration) and perform a [scan](/settings?tab=tasks) to populate gallery images and the file modification times in the database.
+
+### ✨ New Features
+* Add selective scan.
+* Add selective export of all objects.
+* Add stash-box tagger to scenes page.
+* Add filters tab in scene page.
+* Add selectable streaming quality profiles in the scene player.
+* Add gallery metadata scraping.
+* Add scrapers list setting page.
+* Add support for individual images and manual creation of galleries.
+* Add various fields to galleries.
+* Add partial import from zip file.
+
+### 🎨 Improvements
+* Add equals/not equals string criteria.
+* Increase page size limit to 1000 and add new page size options.
+* Add support for query URL parameter regex replacement when scraping by query URL.
+* Include empty fields in isMissing filter
+* Show static image on scene wall if preview video is missing.
+* Add path filter to scene and gallery query.
+* Add button to hide left panel on scene page.
+* Add link to parent studio in studio page.
+* Add missing scenes movie filter.
+* Add gallery icon to scene cards.
+* Add country query link to performer flag.
+* Improved gallery layout.
+* Add hover delay before scene preview is played.
+* Re-show preview thumbnail when mousing away from scene card.
+
+### 🐛 Bug fixes
+* Changed startup behaviour to only set libraries from `STASH_STASH` environment variable if not already set.
+* Don't set default studio image during studio creation.
+* Update Freeones scraper for website update.
+* Fix invalid date tag preventing video file from being scanned.
+* Fix error when creating movie from scene scrape dialog.
+* Fix incorrect date timezone.
+* Fix search filters not persisting for studios, markers and galleries.
+* Fix pending thumbnail on wall items on mobile platforms.
+* Fix downloading and permissions for ffmpeg/ffprobe.
diff --git a/docs/changelog/v050.md b/docs/changelog/v050.md
new file mode 100644
index 00000000..90b9f8b7
--- /dev/null
+++ b/docs/changelog/v050.md
@@ -0,0 +1,48 @@
+!!! info
+ After upgrading, all scene file sizes will be 0B until a new [scan](/settings?tab=tasks) is run.
+
+### ✨ New Features
+* Add support for multiple galleries per scene, and vice-versa.
+* Add backup database functionality to Settings/Tasks.
+* Add gallery wall view.
+* Add organized flag for scenes, galleries and images.
+* Allow configuration of visible navbar items.
+
+### 🎨 Improvements
+* Added Donate button to top navbar.
+* Add directory selection to auto-tag task.
+* Add string matches/not matches regex filter criteria.
+* Added configuration option for import file size limit and increased default to 1GB.
+* Add dry-run option for Clean task.
+* Refresh UI when changing custom CSS options.
+* Add batch deleting of performers, tags, studios, and movies.
+* Reset cache after scan/clean to ensure scenes are updated.
+* Add more video/image resolution tags.
+* Add option to strip file extension from scene title when populating from scanning task.
+* Pagination support and general improvements for image lightbox.
+* Add mouse click support for CDP scrapers.
+* Add gallery tabs to performer and studio pages.
+* Add gallery scrapers to scraper page.
+* Add support for setting cookies in scrapers.
+* Truncate long text and show on hover.
+* Show scene studio as text where image is missing.
+* Use natural sort for titles and movie names.
+* Support optional preview and sprite generation during scanning.
+* Support configurable number of threads for scanning and generation.
+
+### 🐛 Bug fixes
+* Fix error when unsetting image studio.
+* Fix input fields being wiped when an error occurs creating a performer.
+* Fix edit data being lost when clicking the O-Counter, Organized or Favorite buttons.
+* Exclude media in `generated` directory from the library.
+* Prevent cover image from being incorrectly regenerated when a scene file's hash changes.
+* Fix version check sometimes giving incorrect results.
+* Fix stash potentially deleting `downloads` directory when first run.
+* Fix sprite generation when generated path has special characters.
+* Prevent studio from being set as its own parent
+* Fixed performer scraper select overlapping search results
+* Fix tag/studio images not being changed after update.
+* Fixed resolution tags and querying for portrait videos and images.
+* Corrected file sizes on 32bit platforms
+* Fixed login redirect to remember the current page.
+* Fixed scene tagger config saving
diff --git a/docs/changelog/v060.md b/docs/changelog/v060.md
new file mode 100644
index 00000000..d7f4278d
--- /dev/null
+++ b/docs/changelog/v060.md
@@ -0,0 +1,31 @@
+### ✨ New Features
+* Added Performer tags.
+
+### 🎨 Improvements
+* Improve performer scraper search modal.
+* Add galleries tab to Tag details page.
+* Allow scene/performer/studio image upload via URL.
+* Add button to hide unmatched scenes in Tagger view.
+* Hide create option in dropdowns when searching in filters.
+* Add scrape gallery from fragment to UI
+* Improved performer details and edit UI pages.
+* Resolve python executable to `python3` or `python` for python script scrapers.
+* Add `url` field to `URLReplace`, and make `queryURLReplace` available when scraping by URL.
+* Make logging format consistent across platforms and include full timestamp.
+* Remember gallery images view mode.
+* Add option to skip checking of insecure SSL certificates when scraping.
+* Auto-play video previews on mobile devices.
+* Replace hover menu with dropdown menu for O-Counter.
+* Support random strings for scraper cookie values.
+* Added Rescan button to scene, image, gallery details overflow button.
+
+### 🐛 Bug fixes
+* Fix SQL error when filtering nullable string fields with regex.
+* Fix incorrect folders being excluded during scanning.
+* Filter out streaming resolution options that are over the maximum streaming resolution.
+* Fix `cover.jpg` not being detected as cover image when in sub-directory.
+* Fix scan re-associating galleries to the same scene.
+* Fix SQL error when filtering galleries excluding performers or tags.
+* Fix version checking for armv7 and arm64.
+* Change "Is NULL" filter to include empty string values.
+* Prevent scene card previews playing in full-screen on iOS devices.
diff --git a/docs/changelog/v070.md b/docs/changelog/v070.md
new file mode 100644
index 00000000..915f22be
--- /dev/null
+++ b/docs/changelog/v070.md
@@ -0,0 +1,47 @@
+### ✨ New Features
+* Added stash-box performer tagger.
+* Auto-tagger now tags images and galleries.
+* Added rating field to performers and studios.
+* Support serving UI from specific directory location.
+* Added details, death date, hair color, and weight to Performers.
+* Added `lbToKg` post-process action for performer scrapers.
+* Added details to Studios.
+* Added [perceptual dupe checker](/sceneDuplicateChecker).
+* Add various `count` filter criteria and sort options.
+* Add URL filter criteria for scenes, galleries, movies, performers and studios.
+* Add HTTP endpoint for health checking at `/healthz`.
+* Add random sorting option for galleries, studios, movies and tags.
+* Support access to system without logging in via API key.
+* Added scene queue.
+
+### 🎨 Improvements
+* Improve sprite generation performance when using network storage.
+* Remove duplicate values when scraping lists of elements.
+* Improved performance of the auto-tagger.
+* Clean generation artifacts after generating each scene.
+* Log message at startup when cleaning the `tmp` and `downloads` generated folders takes more than one second.
+* Sort movie scenes by scene number by default.
+* Support http request headers in scrapers.
+* Sort performers by gender in scene/image/gallery cards and details.
+* Add popover buttons for scenes/images/galleries on performer/studio/tag cards.
+* Add slideshow to image wall view.
+* Support API key via URL query parameter, and added API key to stream link in Scene File Info.
+* Revamped setup wizard and migration UI.
+* Scroll to top when changing page number.
+* Support `today` and `yesterday` for `parseDate` in scrapers.
+* Disable sounds on scene/marker wall previews by default.
+* Improve Movie UI.
+* Change performer text query to search by name and alias only.
+
+### 🐛 Bug fixes
+* Fix image/gallery title not being set during scan.
+* Reverted video previews always playing on small devices.
+* Fix performer/studio being cleared when skipped in scene tagger.
+* Fixed error when auto-tagging for performers/studios/tags with regex characters in the name.
+* Fix scraped performer image not updating after clearing the current image when creating a new performer.
+* Fix error preventing adding a new library path when an existing library path is missing.
+* Fix whitespace in query string returning all objects.
+* Fix hang on Login page when not connected to internet.
+* Fix `Clear Image` button not updating image preview.
+* Fix processing some webp files.
+* Fix incorrect performer age calculation in UI.
diff --git a/docs/changelog/v080.md b/docs/changelog/v080.md
new file mode 100644
index 00000000..5ec68226
--- /dev/null
+++ b/docs/changelog/v080.md
@@ -0,0 +1,38 @@
+### ✨ New Features
+* Added filter criteria for name, details and hash related fields. ([#1505](https://github.com/stashapp/stash/pull/1505))
+* Added button to open scene in external player on handheld devices. ([#679](https://github.com/stashapp/stash/pull/679))
+* Added support for saved and default filters. ([#1474](https://github.com/stashapp/stash/pull/1474))
+* Added merge tags functionality. ([#1481](https://github.com/stashapp/stash/pull/1481))
+* Added support for triggering plugin tasks during operations. ([#1452](https://github.com/stashapp/stash/pull/1452))
+* Support Studio filter including child studios. ([#1397](https://github.com/stashapp/stash/pull/1397))
+* Added support for tag aliases. ([#1412](https://github.com/stashapp/stash/pull/1412))
+* Support embedded Javascript plugins. ([#1393](https://github.com/stashapp/stash/pull/1393))
+* Revamped job management: tasks can now be queued. ([#1379](https://github.com/stashapp/stash/pull/1379))
+* Added Handy/Funscript support. ([#1377](https://github.com/stashapp/stash/pull/1377))
+* Added Performers tab to Studio page. ([#1405](https://github.com/stashapp/stash/pull/1405))
+* Added [DLNA server](/settings?tab=dlna). ([#1364](https://github.com/stashapp/stash/pull/1364))
+
+### 🎨 Improvements
+* Allow navigation to previous/next image in carousel by clicking left/right side of image. ([#1516](https://github.com/stashapp/stash/pull/1516))
+* Include `Host` in input to plugins. ([#1514](https://github.com/stashapp/stash/pull/1514))
+* Added internationalisation for all UI pages and added zh-TW language option. ([#1471](https://github.com/stashapp/stash/pull/1471))
+* Add option to disable audio for generated previews. ([#1454](https://github.com/stashapp/stash/pull/1454))
+* Prompt when leaving scene edit page with unsaved changes. ([#1429](https://github.com/stashapp/stash/pull/1429))
+* Make multi-set mode buttons more obvious in multi-edit dialog. ([#1435](https://github.com/stashapp/stash/pull/1435))
+* Filter modifiers and sort by options are now sorted alphabetically. ([#1406](https://github.com/stashapp/stash/pull/1406))
+* Add `CreatedAt` and `UpdatedAt` (and `FileModTime` where applicable) to API objects. ([#1421](https://github.com/stashapp/stash/pull/1421))
+* Add Studios Performer filter criterion. ([#1405](https://github.com/stashapp/stash/pull/1405))
+* Add `subtractDays` post-process scraper action. ([#1399](https://github.com/stashapp/stash/pull/1399))
+* Skip scanning directories if path matches image and video exclude patterns. ([#1382](https://github.com/stashapp/stash/pull/1382))
+* Add button to remove studio stash ID. ([#1378](https://github.com/stashapp/stash/pull/1378))
+
+### 🐛 Bug fixes
+* Fix scene query not being cached correctly when navigating using back. ([#1533](https://github.com/stashapp/stash/pull/1533))
+* Fix query with multiple table joins causing invalid query SQL. ([#1510](https://github.com/stashapp/stash/pull/1510))
+* Fix file move detection when case of filename is changed on case-insensitive file systems. ([#1426](https://github.com/stashapp/stash/issues/1426))
+* Fix auto-tagger not tagging scenes with no whitespace in name. ([#1488](https://github.com/stashapp/stash/pull/1488))
+* Fix click/drag to select scenes. ([#1476](https://github.com/stashapp/stash/pull/1476))
+* Fix clearing Performer and Movie ratings not working. ([#1429](https://github.com/stashapp/stash/pull/1429))
+* Fix scraper date parser failing when parsing time. ([#1431](https://github.com/stashapp/stash/pull/1431))
+* Fix quotes in filter labels causing UI errors. ([#1425](https://github.com/stashapp/stash/pull/1425))
+* Fix post-processing not running when scraping by performer fragment. ([#1387](https://github.com/stashapp/stash/pull/1387))
diff --git a/docs/changelog/v090.md b/docs/changelog/v090.md
new file mode 100644
index 00000000..49be1d20
--- /dev/null
+++ b/docs/changelog/v090.md
@@ -0,0 +1,45 @@
+### ✨ New Features
+* Support setting a fixed funscript offset/delay. ([#1573](https://github.com/stashapp/stash/pull/1573))
+* Added sort by options for image and gallery count for performers. ([#1671](https://github.com/stashapp/stash/pull/1671))
+* Added sort by options for date, duration and rating for movies. ([#1663](https://github.com/stashapp/stash/pull/1663))
+* Allow saving query page zoom level in saved and default filters. ([#1636](https://github.com/stashapp/stash/pull/1636))
+* Support custom page sizes in the query page size dropdown. ([#1636](https://github.com/stashapp/stash/pull/1636))
+* Added between/not between modifiers for number criteria. ([#1559](https://github.com/stashapp/stash/pull/1559))
+* Support excluding tag patterns when scraping. ([#1617](https://github.com/stashapp/stash/pull/1617))
+* Support setting a custom directory for default performer images. ([#1489](https://github.com/stashapp/stash/pull/1489))
+* Added filtering and sorting on scene marker count for tags. ([#1603](https://github.com/stashapp/stash/pull/1603))
+* Support excluding fields and editing tags when saving from scene tagger view. ([#1605](https://github.com/stashapp/stash/pull/1605))
+* Added not equals/greater than/less than modifiers for resolution criteria. ([#1568](https://github.com/stashapp/stash/pull/1568))
+
+### 🎨 Improvements
+* Added support for loading TLS/SSL configuration files from the configuration directory. ([#1678](https://github.com/stashapp/stash/pull/1678))
+* Added total scenes duration to Stats page. ([#1626](https://github.com/stashapp/stash/pull/1626))
+* Move Play Selected Scenes, and Add/Remove Gallery Image buttons to button toolbar. ([#1673](https://github.com/stashapp/stash/pull/1673))
+* Added image and gallery counts to tag list view. ([#1672](https://github.com/stashapp/stash/pull/1672))
+* Prompt when leaving gallery and image edit pages with unsaved changes. ([#1654](https://github.com/stashapp/stash/pull/1654), [#1669](https://github.com/stashapp/stash/pull/1669))
+* Show largest duplicates first in scene duplicate checker. ([#1639](https://github.com/stashapp/stash/pull/1639))
+* Added checkboxes to scene list view. ([#1642](https://github.com/stashapp/stash/pull/1642))
+* Added keyboard shortcuts for scene queue navigation. ([#1635](https://github.com/stashapp/stash/pull/1635))
+* Made performer scrape menu scrollable. ([#1634](https://github.com/stashapp/stash/pull/1634))
+* Improve Studio UI. ([#1629](https://github.com/stashapp/stash/pull/1629))
+* Improve link styling and ensure links open in a new tab. ([#1622](https://github.com/stashapp/stash/pull/1622))
+* Added zh-CN language option. ([#1620](https://github.com/stashapp/stash/pull/1620))
+* Moved scraping settings into the Scraping settings page. ([#1548](https://github.com/stashapp/stash/pull/1548))
+* Show current scene details in tagger view. ([#1605](https://github.com/stashapp/stash/pull/1605))
+* Removed stripes and added background colour to default performer images (old images can be downloaded from the PR link). ([#1609](https://github.com/stashapp/stash/pull/1609))
+* Added pt-BR language option. ([#1587](https://github.com/stashapp/stash/pull/1587))
+* Added de-DE language option. ([#1578](https://github.com/stashapp/stash/pull/1578))
+
+### 🐛 Bug fixes
+* Fix SQL error when filtering for Performers missing stash IDs. ([#1681](https://github.com/stashapp/stash/pull/1681))
+* Fix Play Selected scene UI error when one scene is selected. ([#1674](https://github.com/stashapp/stash/pull/1674))
+* Fix race condition panic when reading and writing config concurrently. ([#1645](https://github.com/stashapp/stash/issues/1343))
+* Fix performance issue on Studios page getting studio image count. ([#1643](https://github.com/stashapp/stash/pull/1643))
+* Regenerate scene phash if overwrite flag is set. ([#1633](https://github.com/stashapp/stash/pull/1633))
+* Create .stash directory in $HOME only if required. ([#1623](https://github.com/stashapp/stash/pull/1623))
+* Include stash id when scraping performer from stash-box. ([#1608](https://github.com/stashapp/stash/pull/1608))
+* Fix infinity framerate values causing resolver error. ([#1607](https://github.com/stashapp/stash/pull/1607))
+* Fix unsetting performer gender not working correctly. ([#1606](https://github.com/stashapp/stash/pull/1606))
+* Fix is missing date scene criterion causing invalid SQL. ([#1577](https://github.com/stashapp/stash/pull/1577))
+* Fix rendering of carousel images on Apple devices. ([#1562](https://github.com/stashapp/stash/pull/1562))
+* Show New and Delete buttons in mobile view. ([#1539](https://github.com/stashapp/stash/pull/1539))
\ No newline at end of file
diff --git a/code-of-conduct.md b/docs/code-of-conduct.md
similarity index 97%
rename from code-of-conduct.md
rename to docs/code-of-conduct.md
index 99a0cba7..47f30868 100644
--- a/code-of-conduct.md
+++ b/docs/code-of-conduct.md
@@ -1,7 +1,6 @@
---
-layout: clean
-title: Code of Conduct
-nav_order: 11
+hide:
+ - navigation
---
## Our Pledge
@@ -49,13 +48,13 @@ All community leaders are obligated to respect the privacy and security of the r
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
-### 1. Warning
+### Warning
**Offense**: First time offence.
**Consequence**: A public or private written warning depending on the space where offense happened.
-### 2. Temporary or Permanent Ban
+### Temporary or Permanent Ban
**Offense**: Second time offense.
diff --git a/docs/faq/galleries.md b/docs/faq/galleries.md
new file mode 100644
index 00000000..498ccb5c
--- /dev/null
+++ b/docs/faq/galleries.md
@@ -0,0 +1,4 @@
+---
+title: Galleries
+icon: fontawesome/solid/images
+---
diff --git a/docs/faq/groups.md b/docs/faq/groups.md
new file mode 100644
index 00000000..0f132a4f
--- /dev/null
+++ b/docs/faq/groups.md
@@ -0,0 +1,4 @@
+---
+title: Groups
+icon: fontawesome/solid/film
+---
diff --git a/docs/faq/images.md b/docs/faq/images.md
new file mode 100644
index 00000000..edd22c96
--- /dev/null
+++ b/docs/faq/images.md
@@ -0,0 +1,8 @@
+---
+title: Images
+icon: fontawesome/solid/image
+---
+
+## WebP images are not working in Safari
+
+Performer images uploaded in WebP format will not display on versions of Safari prior to version 13 or on anything earlier than MacOS Big Sur. This is a [limitation of Safari](https://caniuse.com/webp){:target="_blank"}. As a workaround, ensure you are uploading performer images in .jpg or .png format.
\ No newline at end of file
diff --git a/docs/faq/index.md b/docs/faq/index.md
new file mode 100644
index 00000000..f717ab0b
--- /dev/null
+++ b/docs/faq/index.md
@@ -0,0 +1,15 @@
+---
+title: Frequently asked questions
+hide:
+ - toc
+---
+
+FAQ section is split into multiple categories for easier browsing, but if you have specific issue or question try using search. You can access search from the header or you can use keyboard shortcuts ++f++ , ++s++ , ++slash++ to access it from any page.
+
+## Community support
+
+If you can't find an answer to your question here, you can always ask for help from the community.
+
+- Join our [Matrix space](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}
+- Join our [Discord server](https://discord.gg/2TsNFKt){:target="_blank"}
+- Start a [discussion on GitHub](https://github.com/stashapp/stash/discussions){:target="_blank"}
\ No newline at end of file
diff --git a/docs/faq/markers.md b/docs/faq/markers.md
new file mode 100644
index 00000000..62fd3930
--- /dev/null
+++ b/docs/faq/markers.md
@@ -0,0 +1,4 @@
+---
+title: Markers
+icon: fontawesome/solid/location-dot
+---
diff --git a/docs/faq/performers.md b/docs/faq/performers.md
new file mode 100644
index 00000000..b3125224
--- /dev/null
+++ b/docs/faq/performers.md
@@ -0,0 +1,30 @@
+---
+title: Performers
+icon: fontawesome/solid/user
+---
+
+## How can I add performers in bulk?
+
+!!! info
+ You will need to have a stash-box attached as a source.
+
+1. Go to :fontawesome-solid-user: **Performers** page and select :fontawesome-solid-tags: **Tagger**.
+1. Click **Batch Add Performers**.
+1. Add your list of performers.
+1. Click **Add New Performers**.
+
+??? "Limitations"
+ - Performer name has to be an exactly the same as on stash-box instance set in your source.
+ - Aliases will not be matched.
+
+## Can I bulk update all my performers?
+
+!!! info
+ You will need to have a stash-box attached as a source.
+
+1. Go to :fontawesome-solid-user: **Performers** page and select :fontawesome-solid-tags: **Tagger** view.
+1. Click **Show Configuration** to set the source you want to use and fields to exclude.
+1. Click **Batch Update Performers**.
+1. Select your preferences.
+1. You can see how may performers will be processed, with your selected preferences.
+1. Click **Update Performers**.
\ No newline at end of file
diff --git a/docs/faq/scenes.md b/docs/faq/scenes.md
new file mode 100644
index 00000000..115fcf1b
--- /dev/null
+++ b/docs/faq/scenes.md
@@ -0,0 +1,13 @@
+---
+title: Scenes
+icon: fontawesome/solid/circle-play
+---
+
+## How does Stash keep track of scenes?
+
+Stash tracks video files 2 ways:
+
+1. oshash - fast hash created using partial file and filesize.
+1. Filepath - exact library location where your file is stored.
+
+Stash can still find the file even if one of them changes, all you need to do is run a scan task to trigger it. If both gets changed at the same time, Stash will create a new scene.
\ No newline at end of file
diff --git a/docs/faq/settings.md b/docs/faq/settings.md
new file mode 100644
index 00000000..0aa4b8b4
--- /dev/null
+++ b/docs/faq/settings.md
@@ -0,0 +1,18 @@
+---
+title: Settings
+icon: fontawesome/solid/gear
+---
+
+## How can I move my library from one location to another?
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Library**.
+1. Under Library heading find the old library path. Click :fontawesome-solid-ellipsis-vertical: > **Delete**.
+1. Now add your new library path. Click on **Add Directory**.
+1. Select the directory you want to add and click **Confirm**.
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Under Library heading click **Scan** to start the task.
+
+This will update all the paths for the existing objects without having to re-generate supported files.
+
+!!! danger
+ Do not run a Clean task in between these steps, or you will lose the metadata from the affected objects. Your files will not be affected.
\ No newline at end of file
diff --git a/docs/faq/setup.md b/docs/faq/setup.md
new file mode 100644
index 00000000..50aa6cfe
--- /dev/null
+++ b/docs/faq/setup.md
@@ -0,0 +1,99 @@
+---
+title: Setup
+icon: fontawesome/solid/desktop
+---
+
+## How do I recover a forgotten username or password?
+
+Stash saves login credentials in the `config.yml` file. You must reset both login and password if you have forgotten your password by doing the following:
+
+- Close your Stash process;
+- Open the `config.yml` file found in your Stash directory with a text editor;
+- Delete the `login` and `password` lines from the file and save;
+- Stash authentication should now be reset with no authentication credentials.
+
+## How can I connect to my server from elsewhere within my network?
+
+Find the local IP address of your Stash Server (guides for [Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9){:target="_blank"}, [MacOS](https://support.apple.com/guide/mac-help/find-your-computers-name-and-network-address-mchlp1177/11.0/mac/11.0){:target="_blank"}, [Linux](https://wiki.archlinux.org/title/Network_configuration#IP_addresses){:target="_blank"}). Then, on another device on your local network, open a browser to `http://SERVER.IP.ADDRESS.HERE:9999`.
+
+See [this article](../networking/public-exposure-tripwire.md/#alternative-and-safe-methods-to-access-your-stash) for ideas on accessing your stash from outside your network.
+
+## How do I serve Stash over SSL/TLS (HTTPS)?
+
+This is typically accomplished by putting Stash behind a reverse proxy, such as Nginx or Caddy. Stash can also serve SSL directly.
+To use the built-in SSL:
+
+1. First you must generate a SSL certificate and key combo.
+
+ === "Example using OpenSSL"
+
+ ```
+ openssl req -x509 -newkey rsa:4096 -sha256 -days 7300 -nodes -keyout stash.key -out stash.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:stash.server,IP:127.0.0.1) -subj /CN=stash.server
+ ```
+
+ This command would need customizing for your environment. [This link](https://stackoverflow.com/questions/10175812/how-to-create-a-self-signed-certificate-with-openssl){:target="_blank"} might be useful.
+
+1. Once you have a certificate and key file name them `stash.crt` and `stash.key` and place them in the same directory as the `config.yml` file, or the `~/.stash` directory. Stash detects these and starts up using HTTPS rather than HTTP.
+
+## How do I serve Stash in a Subpath?
+
+The basepath defaults to `/`. When running stash via a reverse proxy in a subpath, the basepath can be changed by having the reverse proxy pass `X-Forwarded-Prefix` (and optionally `X-Forwarded-Port`) headers. When detects these headers, it alters the basepath URL of the UI.
+
+## Error: config initialization error: missing the following mandatory settings: generated
+
+1. Find your `config.yml` file. Usually located at `%userprofile%/.stash` or `$HOME/.stash`.
+2. Open it and find `generated:` line.
+3. Replace with or add `generated: absolute_path_to_your_generated_folder`.
+4. Save and try to start Stash.
+
+## Stash is showing a "FFMPEG Not Found" error
+
+If Stash is unable to find or download FFMPEG, then download and install it yourself.
+
+The `ffmpeg.exe` and `ffprobe.exe` files should be placed in `C:\Users\YourUsername\.stash` on Windows.
+The `ffmpeg` and `ffprobe` files should be placed in `~/.stash` on macOS / Linux.
+
+## I'm getting "Migration failed"
+
+It can mean that you database got corrupted. You can verify that by running a few SQL statements. The easiest way to do so is to install a simple program called [DB Browser for SQLite](https://sqlitebrowser.org){:target="_blank"}. Start the program and in the menu select `File` > `Open Database...` and select your Stash .sqlite database file. Then navigate to the `Execute SQL` tab and run:
+- `PRAGMA integrity_check;` - it should return `ok`.
+- `PRAGMA foreign_key_check;` - it should return nothing.
+
+If you get something different it means there is an issue with your database. It's still possible that it can be recovered. You can ask for more help in one of the [support channels](#support).
+Another option would be to try using an older backup if you have one.
+
+## My Python installation is not detected
+
+- Make sure your Python version is added to environment variable PATH. This is a common issue with Python installed from Microsoft Store on Windows.
+
+ ??? tip "How to add Python to PATH"
+ A handy guide how you set a PATH on diferent operating systems: [https://realpython.com/add-python-to-path/](https://realpython.com/add-python-to-path/){target="_blank"}.
+
+- If you use multiple versions or have non standard configuration you can specify which version to use in :fontawesome-solid-gear: **Settings** > **System** and under Applications Paths header set **Python Executable Path**.
+
+## How do I run multiple instances of Stash?
+
+Running multiple instances of Stash can be done by specifying both the `-c` switch to denote an alternate `config.yml` filepath, and the `--p` switch to denote a unique port number.
+
+Step-by-step Linux guide to running mutiple instances of Stash:
+
+1. Create a new directory for the alternate Stash configuration, referred to here as `NEW_DIRECTORY_LOCATION`.
+1. Choose a unique port number that does not conflict with other local Stash instances, referred to here as `NEW_PORT_NUMBER`.
+1. Initiate Stash to assume a fresh installation by running `./stash-linux --port NEW_PORT_NUMBER -c NEW_DIRECTORY_LOCATION/config.yml`.
+1. Complete the Stash Setup Wizard.
+1. Using a text editor, manually update `config.yml` to use `NEW_PORT_NUMBER`. Find the line `port: 9999` and replace with `port: NEW_PORT_NUMBER`.
+1. This instance of Stash can now be accessed by running `./stash-linux -c NEW_DIRECTORY_LOCATION/config.yml`
+
+## Protecting against accidental exposure to the internet
+
+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.
+
+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`.
+
+### Alternative and safe methods to access your Stash
+
+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.
+
+### Using an external authentication provider
+
+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.
\ No newline at end of file
diff --git a/docs/faq/studios.md b/docs/faq/studios.md
new file mode 100644
index 00000000..f5ee686e
--- /dev/null
+++ b/docs/faq/studios.md
@@ -0,0 +1,31 @@
+---
+title: Studios
+icon: fontawesome/solid/video
+---
+
+## How can I add studios in bulk?
+
+!!! info
+ You will need to have a stash-box attached as a source.
+
+1. Go to :fontawesome-solid-video: **Studios** page and select :fontawesome-solid-tags: **Tagger** view.
+1. Click **Batch Add Studios**.
+1. Add your list of studios.
+ 1. You can enable **Create missing or tag existing parent studios** if you want to mirror the hierarchy from the stash-box instance.
+1. Click **Add New Studios**.
+
+??? "Limitations"
+ - Studio name has to be an exactly the same as on stash-box instance set in your source.
+
+## Can I bulk update all my studios?
+
+!!! info
+ You will need to have a stash-box attached as a source.
+
+1. Go to :fontawesome-solid-video: **Studios** page and select :fontawesome-solid-tags: **Tagger** view.
+1. Click **Show Configuration** to set the source you want to use and fields to exclude.
+1. Click **Batch Update Studios**.
+1. Select your preferences.
+ 1. You can enable **Create missing or tag existing parent studios** if you want to mirror the hierarchy from the stash-box instance.
+1. You can see how may studios will be processed, with your selected preferences.
+1. Click **Update Studios**.
\ No newline at end of file
diff --git a/docs/faq/tags.md b/docs/faq/tags.md
new file mode 100644
index 00000000..a5668216
--- /dev/null
+++ b/docs/faq/tags.md
@@ -0,0 +1,4 @@
+---
+title: Tags
+icon: fontawesome/solid/tag
+---
diff --git a/docs/getting-started/first-steps.md b/docs/getting-started/first-steps.md
new file mode 100644
index 00000000..618ff817
--- /dev/null
+++ b/docs/getting-started/first-steps.md
@@ -0,0 +1,24 @@
+---
+title: First steps
+---
+
+## Setting up content libraries
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Library** and click **Add Directory**.
+1. To change the drive letter/volume, just type it in the field.
+1. Select the folder containing the content you want to add. It will select the folder and all sub-folders.
+1. Click **Confirm**.
+
+## Configuring scan options
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Select options you want based on your preferences, but keep in mind that every option increases time the scan will take.
+1. You can stop and re-scan it will ignore the files that are already scanned and just scan new or missing files.
+
+## Initiating scan
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Click **Scan** to start scanning for the content from your setup libraries or **Selective Scan...** if you want to scan a specific location.
+
+!!! info
+ 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.
\ No newline at end of file
diff --git a/advanced-tutorials/advanced-configuration-options.md b/docs/guides/advanced-configuration-options.md
similarity index 84%
rename from advanced-tutorials/advanced-configuration-options.md
rename to docs/guides/advanced-configuration-options.md
index dcf86c0c..ea2cded1 100644
--- a/advanced-tutorials/advanced-configuration-options.md
+++ b/docs/guides/advanced-configuration-options.md
@@ -1,21 +1,18 @@
---
-layout: clean
-title: Advanced Configuration Options
-nav_order: 1
-parent: Advanced Tutorials
-
+title: Advanced configuration options
+hide:
+ - toc
---
Some configuration options can not be edited through the UI and should only be used if needed.
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.
-As an example the `port` option can be changed from the default `9999` to `1234` by one of the below methods
-
-* adding `port: 1234` to the config.yml file
-* setting the ENV variable **STASH_PORT** to **1234** eg `STASH_PORT=1234 ./stash`
-* using the flag **--port** when running stash `./stash --port 1234`
+As an example the `port` option can be changed from the default `9999` to `1234` by one of the below methods:
+- adding `port: 1234` to the config.yml file
+- setting the ENV variable **STASH_PORT** to **1234** eg `STASH_PORT=1234 ./stash`
+- using the flag **--port** when running stash `./stash --port 1234`
Configuration Option | YML | ENV | FLAG | Description | Comments
---------------------|:---:|:---:|:----:|-------------|:-------------:
diff --git a/docs/guides/backup-and-restore-database.md b/docs/guides/backup-and-restore-database.md
new file mode 100644
index 00000000..14a81637
--- /dev/null
+++ b/docs/guides/backup-and-restore-database.md
@@ -0,0 +1,47 @@
+---
+title: Backup and restore database
+---
+
+## Backup
+
+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.
+
+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.
+
+The **Backup** or **Download Backup** tasks are the proper way to create a backup file.
+
+1. Go to :fontawesome-solid-gear: **Settings** > **System**.
+1. Under Application Paths heading scroll down to **Backup Directory Path**.
+1. Set directory to store your backups.
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Under Backup heading you will find 2 tasks.
+1. Select either **Backup** or **Download Backup** task.
+
+## Restore
+
+Assuming you have properly created a backup file you can use it to restore your database if needed.
+
+!!! info
+ The restore procedure uses the default `stash-go.sqlite` filename, if you changed that when configuring Stash adjust accordingly.
+
+The following steps are recommended when restoring a database file:
+
+1. Go to :fontawesome-solid-gear: **Settings** > **System**, scroll down to Database heading and check your **Database Path** location.
+1. Create a backup of the current database. (optional)
+1. Stop Stash.
+1. In your file browser, go to the location of your database path.
+1. Move or delete the `stash-go.sqlite` database file (along with the `-shm` `-wal` `.journal` files if present).
+1. Copy the backup file that you want to restore to `stash-go.sqlite`.
+1. Make sure that you now have a `stash-go.sqlite` file and that no `-shm` `-wal` `.journal` files are present.
+1. Start Stash.
+
+You should now have Stash running with a working and restored database.
+
+## Advanced troubleshooting
+
+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.
+For cases like this it is better to ask for [support](/#support).
+
+
+
+
diff --git a/advanced-tutorials/importing-via-csv-using-gql-iterate.md b/docs/guides/importing-via-csv-using-gql-iterate.md
similarity index 52%
rename from advanced-tutorials/importing-via-csv-using-gql-iterate.md
rename to docs/guides/importing-via-csv-using-gql-iterate.md
index 8523b16b..0747890c 100644
--- a/advanced-tutorials/importing-via-csv-using-gql-iterate.md
+++ b/docs/guides/importing-via-csv-using-gql-iterate.md
@@ -1,104 +1,90 @@
---
-layout: clean
-title: Importing via CSV Using gql-iterate
-nav_order: 2
-parent: Advanced Tutorials
-
+title: Bulk importing via CSV using gql-iterate
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
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.
-# Step 1: Install gql-iterate
+## Step 1: Install gql-iterate
[gql-iterate repository](https://github.com/efstajas/gql-iterate){:target="_blank"}
-`npm install @efstajas/gql-iterate -g`
-
-or
-
-`yarn add @efstajas/gql-iterate -g`
+`npm install @efstajas/gql-iterate -g` or `yarn add @efstajas/gql-iterate -g`
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.
`import { createRequire } from 'module'; const require = createRequire(import.meta.url);`
-# Step 2: Prepare your gql.file if needed
+## Step 2: Prepare your gql.file if needed
See below for example versions of performers.gql and tags.gql samples that should work for you.
Others can be figured out (with minor changes needeed) from stash/graphql/documents/mutations
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.
-## tags.gql
-
- mutation TagCreate(
- $name: String!,
- $image: String) {
- tagCreate(input: {
- name: $name,
- image: $image
- }) {
- id
- }
- }
-
-## performers.gql
-
- mutation PerformerCreate(
- $name: String!,
- $url: String,
- $gender: GenderEnum,
- $birthdate: String,
- $ethnicity: String,
- $country: String,
- $eye_color: String,
- $height: String,
- $measurements: String,
- $fake_tits: String,
- $career_length: String,
- $tattoos: String,
- $piercings: String,
- $aliases: String,
- $twitter: String,
- $instagram: String,
- $favorite: Boolean,
- $image: String) {
- performerCreate(input: {
- name: $name,
- url: $url,
- gender: $gender,
- birthdate: $birthdate,
- ethnicity: $ethnicity,
- country: $country,
- eye_color: $eye_color,
- height: $height,
- measurements: $measurements,
- fake_tits: $fake_tits,
- career_length: $career_length,
- tattoos: $tattoos,
- piercings: $piercings,
- aliases: $aliases,
- twitter: $twitter,
- instagram: $instagram,
- favorite: $favorite,
- image: $image }
- )
- { id }
- }
-
+=== "tags.gql"
+
+ ```graphql
+ mutation TagCreate(
+ $name: String!,
+ $image: String) {
+ tagCreate(input: {
+ name: $name,
+ image: $image
+ }) {
+ id
+ }
+ }
+ ```
+
+=== "performers.gql"
+
+ ```graphql
+ mutation PerformerCreate(
+ $name: String!,
+ $url: String,
+ $gender: GenderEnum,
+ $birthdate: String,
+ $ethnicity: String,
+ $country: String,
+ $eye_color: String,
+ $height: String,
+ $measurements: String,
+ $fake_tits: String,
+ $career_length: String,
+ $tattoos: String,
+ $piercings: String,
+ $aliases: String,
+ $twitter: String,
+ $instagram: String,
+ $favorite: Boolean,
+ $image: String) {
+ performerCreate(input: {
+ name: $name,
+ url: $url,
+ gender: $gender,
+ birthdate: $birthdate,
+ ethnicity: $ethnicity,
+ country: $country,
+ eye_color: $eye_color,
+ height: $height,
+ measurements: $measurements,
+ fake_tits: $fake_tits,
+ career_length: $career_length,
+ tattoos: $tattoos,
+ piercings: $piercings,
+ aliases: $aliases,
+ twitter: $twitter,
+ instagram: $instagram,
+ favorite: $favorite,
+ image: $image }
+ )
+ { id }
+ }
+ ```
If you have a suggested change, please add it below.
-# Step 3: Prepare your textfile or spreadsheet into a CSV
+## Step 3: Prepare your textfile or spreadsheet into a CSV
let's say you have a textfile with these performers (just names and eyecolors for a simple example)
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.
@@ -122,12 +108,12 @@ For tags, you only need the tag title, and if desired, a url to a image
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.
-# Step 4
+## Step 4
-{: .note }
-Must use numerical IP instead of localhost.
+!!! note
+ Must use numerical IP instead of localhost.
- Run this CLI command (assumes your files are in current directory and location for gql-interate is in your path)
+Run this CLI command (assumes your files are in current directory and location for gql-interate is in your path)
`gql-iterate --host http://_yourserverIP:portgoeshere_/graphql --input ./performerdata.csv --query ./performers.gql`
diff --git a/docs/guides/index.md b/docs/guides/index.md
new file mode 100644
index 00000000..370aa8d1
--- /dev/null
+++ b/docs/guides/index.md
@@ -0,0 +1,9 @@
+---
+title: Guides
+hide:
+ - toc
+---
+
+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"}.
+
+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!
\ No newline at end of file
diff --git a/advanced-tutorials/manually-editing-the-stash-sqlite3-database.md b/docs/guides/manually-editing-the-stash-sqlite3-database.md
similarity index 52%
rename from advanced-tutorials/manually-editing-the-stash-sqlite3-database.md
rename to docs/guides/manually-editing-the-stash-sqlite3-database.md
index b9babca9..8eef91eb 100644
--- a/advanced-tutorials/manually-editing-the-stash-sqlite3-database.md
+++ b/docs/guides/manually-editing-the-stash-sqlite3-database.md
@@ -1,21 +1,8 @@
---
-layout: clean
-title: Manually Editing the Stash Sqlite3 Database
-nav_order: 3
-parent: Advanced Tutorials
-
+title: Manually editing the Stash sqlite3 database
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Location
+## Location
The Stash Sqlite3 database file is located at `~/.stash/stash-go.sqlite`.
@@ -23,14 +10,16 @@ Before making changes to the Stash sqlite3 database - **please make a backup fir
You can use the `sqlite3` client to directly edit this file.
-# Opening the database file
+## Opening the database file
```
cd ~/.stash
sqlite3 stash-go.sqlite
```
-# Deleting all tags
+## Examples
+
+### Deleting all tags
If you need to delete all tags, you can use the following commands:
@@ -39,4 +28,5 @@ sqlite> DELETE FROM scenes_tags;
sqlite> DELETE FROM tags;
```
-Please note that this will not work if you have Scene marker tags (TODO: What to do then?)
+!!! note
+ This will not work if you have Scene marker tags.
\ No newline at end of file
diff --git a/networking/reverse-proxy.md b/docs/guides/reverse-proxy.md
similarity index 92%
rename from networking/reverse-proxy.md
rename to docs/guides/reverse-proxy.md
index d62d096b..c2ff0724 100644
--- a/networking/reverse-proxy.md
+++ b/docs/guides/reverse-proxy.md
@@ -1,25 +1,13 @@
---
-layout: clean
-title: Reverse Proxy
-nav_order: 2
-parent: Networking
-
+title: Reverse proxy
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
The use of a reverse proxy for Stash is possible.
-# General
+## General
Generally, the following headers will need to be set (check your proxy's documentation for how to configure).
+
- Host (http host)
- X-Real-IP
- X-Forwarded-For
@@ -27,20 +15,20 @@ Generally, the following headers will need to be set (check your proxy's documen
See [issue 134](https://github.com/stashapp/stash/pull/134){:target="_blank"} for more information.
-# Using a URL prefix
+## Using a URL prefix
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`.
-# Setting External URL
+## Setting External URL
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.
```
external_host: http://example.domain.com
```
-# Server Configuration Examples
+## Server Configuration Examples
-## Nginx
+### Nginx
```bash
location / {
@@ -57,7 +45,7 @@ location / {
}
```
-## Nginx + Docker (Linuxserver Letsencrypt)
+### Nginx + Docker (Linuxserver Letsencrypt)
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:
```bash
@@ -99,7 +87,7 @@ server {
}
```
-## Nginx with prefix
+### Nginx with prefix
An example for `nginx` using the prefix `/stash`:
@@ -121,7 +109,7 @@ location /stash/ {
}
```
-## Nginx with external_host
+### Nginx with external_host
Another example for `nginx`:
@@ -152,7 +140,7 @@ server {
}
```
-## Apache
+### Apache
```
# if using apache < 2.4.47, remove upgrade=websocket
@@ -178,7 +166,7 @@ SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/cert.key
```
-### Prerequisites
+#### Prerequisites
```
sudo a2enmod proxy
@@ -193,7 +181,7 @@ sudo a2enmod headers
sudo a2enmod ssl
```
-## Caddy v2
+### Caddy v2
```
stash.example.com {
@@ -207,13 +195,13 @@ stash.example.com {
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.
-# Troubleshooting
+## Troubleshooting
-## 504 Errors
+### 504 Errors
- 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)
-## 422 Errors
+### 422 Errors
- 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.
@@ -227,4 +215,4 @@ proxy_set_header Connection "upgrade";
Cloudflare Tunnels are not recommended since they throttle non-HTML traffic (which video falls under).
-See [Cloudflare blog post](https://blog.cloudflare.com/updated-tos/){:target="_blank"} for more details.
+See [Cloudflare blog post](https://blog.cloudflare.com/updated-tos/){:target="_blank"} for more details.
\ No newline at end of file
diff --git a/docs/guides/run-cdp-on-truenas-scale.md b/docs/guides/run-cdp-on-truenas-scale.md
new file mode 100644
index 00000000..7935a72b
--- /dev/null
+++ b/docs/guides/run-cdp-on-truenas-scale.md
@@ -0,0 +1,45 @@
+---
+title: Run CDP on TrueNAS Scale
+hide:
+ - toc
+---
+
+!!! info
+ Written by [WiiGe](https://github.com/WiiGe){:target="_blank"}. Originally posted on stashapp/stash discussions[^1].
+
+A way to use CDP scraper on TrueNAS Scale and install chromedp/headless-shell on TrueNAS Scale.
+
+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"}.
+
+This can be done by custom-app.
+
+![image](../assets/guides/run-cdp-on-truenas-scale/1.png){ width=300 align=center }
+
+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.
+
+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.
+
+![image](../assets/guides/run-cdp-on-truenas-scale/2.png){ width=300 align=center }
+
+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.
+
+![image](../assets/guides/run-cdp-on-truenas-scale/3.png){ width=200 align=center }
+
+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`.
+
+`--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).
+
+The Networking section and the final Extra Args page should be like this:
+
+![image](../assets/guides/run-cdp-on-truenas-scale/4.png){ width=200 align=center }
+![image](../assets/guides/run-cdp-on-truenas-scale/5.png){ width=200 align=center }
+
+and click Install button then your headless-shell will be good to go.
+
+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.
+
+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.
+
+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.
+
+[^1]: [https://github.com/stashapp/stash/discussions/4719](https://github.com/stashapp/stash/discussions/4719){target=_blank}
\ No newline at end of file
diff --git a/docs/guides/scraping-metadata-behind-login.md b/docs/guides/scraping-metadata-behind-login.md
new file mode 100644
index 00000000..7330ffcb
--- /dev/null
+++ b/docs/guides/scraping-metadata-behind-login.md
@@ -0,0 +1,19 @@
+---
+title: Scraping metadata behind login
+hide:
+ - toc
+---
+
+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.
+
+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.
+
+1. Prepare your scraper's .yml file and make sure it's valid and working. Your scraper should have the following setting inside:
+```yaml
+driver:
+ useCDP: true
+```
+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.
+3. In Stash, make sure that the **Settings** > **Metadata Providers** > **Scraping** > **Chrome CDP Path** is set to `http://localhost:9222/json/version`.
+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.
+5. Paste the webpage's URL in your Stash scene and start scraping. It should get the information correctly.
\ No newline at end of file
diff --git a/docs/guides/scraping-scenes-via-stash-box.md b/docs/guides/scraping-scenes-via-stash-box.md
new file mode 100644
index 00000000..e862b313
--- /dev/null
+++ b/docs/guides/scraping-scenes-via-stash-box.md
@@ -0,0 +1,94 @@
+---
+title: Scraping scenes via stash-box
+---
+
+## What is stash-box?
+
+[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.
+
+Stash has several ways to scrape from stash-box instances. From automatic to manual. Each has its own advantages and disadvantages.
+
+- [Tagger](/guides/scraping-scenes-via-stash-box/#tagger) (recommended) - partially automatic, great accuracy
+- [Identify](/guides/scraping-scenes-via-stash-box/#identify) - fully automatic, mediocre accuracy
+- [Scrape with...](/guides/scraping-scenes-via-stash-box/#scrape-with) - fully manual, great accuracy
+
+## Prerequisites
+
+### Enable perceptual hashes (pHash)
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Under Library heading you will find configuration options for Scan task and Generate task.
+1. Enable **Generate perceptual hashes** under Scan heading.
+1. Enable **Perceptual hashes** under Generate heading.
+
+Scan task and its options are applied when the content is being added to the database the first time.
+
+Generate task and its options are applied when you want to generate additional things for content that is already in your database.
+
+### Configure stash-box endpoint
+
+!!! info "Known stash-box instances"
+ A list of public stash-box instances is available [here](/metadata-sources/stash-box-instances).
+
+1. Go to :fontawesome-solid-gear: **Settings** > **Metadata Providers**.
+1. Under Stash-box Endpoints heading click **Add** and include the details of the stash-box instance you want to add.
+1. Click **Test Credentials** to make sure everything is correct.
+
+## Tagger
+
+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**.
+
+1. Go to :fontawesome-solid-tags: **Tagger**, which accessible from the toolbar.
+1. Under **Source** select a stash-box instance you want to use.
+1. Opposite the **Source** click on the :fontawesome-solid-gear: to open configuration.
+ 1. You can enable **Show male performers** if you want them to be scraped for you locally.
+ 1. You can disable **Set scene cover image** if you prefer to keep your existing cover.
+ 1. You can enable **Set tags** if you want to be shown all the crowdsourced tags the scene has on the stash-box instance.
+ 1. You can enable **Mark as Organized on save** which will apply :fontawesome-solid-box: Organized flag.
+
+ ??? info "Organized flag"
+ 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.
+
+1. Click on **Scrape All** and look through the results. Add missing objects and click **Save**.
+ 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.
+ 1. 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.
+1. 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**.
+
+ ??? info "Fingerprints"
+ All fingerprints are tied to the user API key, no other information is sent to the stash-box instance. Privacy is paramount.
+
+## Identify
+
+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.
+
+!!! warning
+ Task is irreversible, so it's a good idea to [make a backup](/guides/backup-and-restore-database/) before running it.
+
+1. Go to :fontawesome-solid-gear: **Settings** and enable **Advanced Mode**.
+1. Go to :fontawesome-solid-gear: **Settings** > **Tasks**.
+1. Under Library heading click on **Identify...**.
+1. Under **Sources** select a stash-box instance(s) you want to match against.
+
+ !!! info
+ Identify task iterates through sources until it finds a match, once it finds a match, it will ignore all other sources for that scene.
+
+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).
+ 1. You can disable **Show male performers** if you don't want them to be scraped for you locally.
+ 1. You can disable **Set scene cover image** if you prefer to keep your existing cover.
+ 1. You can enable **Set organized flag** which will apply :fontawesome-solid-box: Organized flag.
+ 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.
+ 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.
+1. Click **Set as default** to save your configuration.
+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).
+1. Click **Set as default** to save your configuration.
+1. Click **Identify** to start the task.
+
+## Scrape with...
+
+In addition to previous methods, there is also a completely manual way to match scenes individually.
+
+1. Go to a scene you want to match.
+1. Click on the **Edit** tab.
+1. Click **Scrape with...** and select a stash-box instance you want to match against.
+1. Check the return results, create missing objects and click **Apply**.
+1. Click **Save**.
\ No newline at end of file
diff --git a/beginner-guides/troubleshooting-video-playback.md b/docs/guides/troubleshooting-video-playback.md
similarity index 69%
rename from beginner-guides/troubleshooting-video-playback.md
rename to docs/guides/troubleshooting-video-playback.md
index 196564c5..0f3e61f7 100644
--- a/beginner-guides/troubleshooting-video-playback.md
+++ b/docs/guides/troubleshooting-video-playback.md
@@ -1,43 +1,30 @@
---
-layout: clean
-title: Troubleshooting Video Playback
-nav_order: 4
-parent: Beginner Guides
-
+title: Troubleshooting video playback
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Inspecting files
+## Inspecting files
You can use the ffprobe command to gather useful information about a video file:
-```
+```shell
ffprobe -show_format -show_streams big_buck_bunny.mkv
```
This can be useful for example, when filing bug reports, or discussing in chat.
-# Remuxing files
+## Remuxing files
Another good test, is to see if remuxing the file into a new video file helps:
-```
+```shell
ffmpeg -i big_buck_bunny.mkv -c:v copy -c:a copy remuxed_file.mkv
```
-# Extracting a sample of a video
+## Extracting a sample of a video
If you are asked for a sample of a video (e.g. for developers to analyse), you can use
-```
+```shell
ffmpeg -ss 120 -i big_buck_bunny.mkv -t 30 -c:v copy -c:a copy 30_second_sample.mkv
```
diff --git a/docs/in-app-manual/browsing.md b/docs/in-app-manual/browsing.md
new file mode 100644
index 00000000..47ee4eb8
--- /dev/null
+++ b/docs/in-app-manual/browsing.md
@@ -0,0 +1,5 @@
+---
+title: Browsing
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Browsing.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/captions.md b/docs/in-app-manual/captions.md
new file mode 100644
index 00000000..fa4767c4
--- /dev/null
+++ b/docs/in-app-manual/captions.md
@@ -0,0 +1,5 @@
+---
+title: Captions
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Captions.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/configuration.md b/docs/in-app-manual/configuration.md
new file mode 100644
index 00000000..521c0922
--- /dev/null
+++ b/docs/in-app-manual/configuration.md
@@ -0,0 +1,5 @@
+---
+title: Configuration
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Configuration.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/contributing.md b/docs/in-app-manual/contributing.md
new file mode 100644
index 00000000..b9aff798
--- /dev/null
+++ b/docs/in-app-manual/contributing.md
@@ -0,0 +1,5 @@
+---
+title: Ways to contribute
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Contributing.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/deduplication.md b/docs/in-app-manual/deduplication.md
new file mode 100644
index 00000000..092fbc47
--- /dev/null
+++ b/docs/in-app-manual/deduplication.md
@@ -0,0 +1,5 @@
+---
+title: Dupe checker
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Deduplication.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/images.md b/docs/in-app-manual/images.md
new file mode 100644
index 00000000..2682dfc1
--- /dev/null
+++ b/docs/in-app-manual/images.md
@@ -0,0 +1,5 @@
+---
+title: Images and galleries
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Images.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/index.md b/docs/in-app-manual/index.md
new file mode 100644
index 00000000..94550a15
--- /dev/null
+++ b/docs/in-app-manual/index.md
@@ -0,0 +1,10 @@
+---
+title: In-app manual
+hide:
+ - toc
+---
+
+!!! info
+ 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"}.
+
+ Internal links will be broken as a result, but will work correctly when browsing the :fontawesome-solid-circle-question: **Help** section inside Stash.
\ No newline at end of file
diff --git a/docs/in-app-manual/interactive.md b/docs/in-app-manual/interactive.md
new file mode 100644
index 00000000..a4b8bf5c
--- /dev/null
+++ b/docs/in-app-manual/interactive.md
@@ -0,0 +1,5 @@
+---
+title: Interactivity
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Interactive.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/interface.md b/docs/in-app-manual/interface.md
new file mode 100644
index 00000000..13f7c327
--- /dev/null
+++ b/docs/in-app-manual/interface.md
@@ -0,0 +1,5 @@
+---
+title: Interface options
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Interface.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/introduction.md b/docs/in-app-manual/introduction.md
new file mode 100644
index 00000000..97929ffc
--- /dev/null
+++ b/docs/in-app-manual/introduction.md
@@ -0,0 +1,5 @@
+---
+title: Introduction
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Introduction.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/keyboardshortcuts.md b/docs/in-app-manual/keyboardshortcuts.md
new file mode 100644
index 00000000..ba4d2b1b
--- /dev/null
+++ b/docs/in-app-manual/keyboardshortcuts.md
@@ -0,0 +1,5 @@
+---
+title: Keyboard shortcuts
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/KeyboardShortcuts.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/plugins/embeddedplugins.md b/docs/in-app-manual/plugins/embeddedplugins.md
new file mode 100644
index 00000000..59c7f8e6
--- /dev/null
+++ b/docs/in-app-manual/plugins/embeddedplugins.md
@@ -0,0 +1,5 @@
+---
+title: Embedded plugins
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/EmbeddedPlugins.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/plugins/externalplugins.md b/docs/in-app-manual/plugins/externalplugins.md
new file mode 100644
index 00000000..a75afd8d
--- /dev/null
+++ b/docs/in-app-manual/plugins/externalplugins.md
@@ -0,0 +1,5 @@
+---
+title: External plugins
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/ExternalPlugins.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/plugins/index.md b/docs/in-app-manual/plugins/index.md
new file mode 100644
index 00000000..b49c7717
--- /dev/null
+++ b/docs/in-app-manual/plugins/index.md
@@ -0,0 +1,5 @@
+---
+title: Plugins
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Plugins.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/plugins/uipluginapi.md b/docs/in-app-manual/plugins/uipluginapi.md
new file mode 100644
index 00000000..0ba78e88
--- /dev/null
+++ b/docs/in-app-manual/plugins/uipluginapi.md
@@ -0,0 +1,5 @@
+---
+title: UI plugin API
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/UIPluginApi.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/scraping/index.md b/docs/in-app-manual/scraping/index.md
new file mode 100644
index 00000000..00720bc8
--- /dev/null
+++ b/docs/in-app-manual/scraping/index.md
@@ -0,0 +1,5 @@
+---
+title: Metadata scraping
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Scraping.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/scraping/scraperdevelopment.md b/docs/in-app-manual/scraping/scraperdevelopment.md
new file mode 100644
index 00000000..68a29739
--- /dev/null
+++ b/docs/in-app-manual/scraping/scraperdevelopment.md
@@ -0,0 +1,5 @@
+---
+title: Contributing scrapers
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/ScraperDevelopment.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tagger.md b/docs/in-app-manual/tagger.md
new file mode 100644
index 00000000..4f6ee690
--- /dev/null
+++ b/docs/in-app-manual/tagger.md
@@ -0,0 +1,5 @@
+---
+title: Scene tagger
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Tagger.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tasks/autotagging.md b/docs/in-app-manual/tasks/autotagging.md
new file mode 100644
index 00000000..b358bbb6
--- /dev/null
+++ b/docs/in-app-manual/tasks/autotagging.md
@@ -0,0 +1,5 @@
+---
+title: Auto tagging
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/AutoTagging.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tasks/identify.md b/docs/in-app-manual/tasks/identify.md
new file mode 100644
index 00000000..d08a1648
--- /dev/null
+++ b/docs/in-app-manual/tasks/identify.md
@@ -0,0 +1,5 @@
+---
+title: Identify
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Identify.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tasks/index.md b/docs/in-app-manual/tasks/index.md
new file mode 100644
index 00000000..62c423cf
--- /dev/null
+++ b/docs/in-app-manual/tasks/index.md
@@ -0,0 +1,5 @@
+---
+title: Tasks
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/Tasks.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tasks/jsonspec.md b/docs/in-app-manual/tasks/jsonspec.md
new file mode 100644
index 00000000..46b82c83
--- /dev/null
+++ b/docs/in-app-manual/tasks/jsonspec.md
@@ -0,0 +1,5 @@
+---
+title: Import/export JSON specification
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/JSONSpec.md"
\ No newline at end of file
diff --git a/docs/in-app-manual/tasks/scenefilenameparser.md b/docs/in-app-manual/tasks/scenefilenameparser.md
new file mode 100644
index 00000000..3e9bc3b0
--- /dev/null
+++ b/docs/in-app-manual/tasks/scenefilenameparser.md
@@ -0,0 +1,5 @@
+---
+title: Scene filename parser
+---
+
+--8<-- "https://github.com/stashapp/stash/raw/develop/ui/v2.5/src/docs/en/Manual/SceneFilenameParser.md"
\ No newline at end of file
diff --git a/home.md b/docs/index.md
similarity index 62%
rename from home.md
rename to docs/index.md
index 519be9b0..e6fe961f 100644
--- a/home.md
+++ b/docs/index.md
@@ -1,33 +1,40 @@
---
-layout: clean
title: Home
-nav_order: 1
-permalink: /
+hide:
+ - navigation
+ - toc
---
-# Stash
-
-[![Weblate project translated](https://img.shields.io/weblate/progress/stash?server=https%3A%2F%2Ftranslate.codeberg.org&style=for-the-badge&logo=weblate)](https://translate.codeberg.org/engage/stash/){:target="_blank"}
+[![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"}
[![GitHub Sponsors](https://img.shields.io/github/sponsors/stashapp?logo=github&style=for-the-badge)](https://github.com/sponsors/stashapp){:target="_blank"}
[![Open Collective backers](https://img.shields.io/opencollective/backers/stashapp?logo=opencollective&style=for-the-badge)](https://opencollective.com/stashapp){:target="_blank"}
[![Matrix](https://img.shields.io/matrix/stashapp:unredacted.org?logo=matrix&server_fqdn=matrix.org&style=for-the-badge)](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}
[![Discord](https://img.shields.io/discord/559159668438728723.svg?logo=discord&style=for-the-badge)](https://discord.gg/2TsNFKt){:target="_blank"}
[![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"}
-[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, Linux, macOS and Docker.
+[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.
+
+## About Stash
+
+- Stash gathers information about videos in your collection from the internet, and is extensible through the use of community-built plugins for a large number of content producers and sites.
+- Stash supports a wide variety of both video and image formats.
+- You can tag videos and find them later.
+- Stash provides statistics about performers, tags, studios and more.
+
+You can 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 [official website](https://stashapp.cc){:target="_blank"}.
-# Start Using Stash
+## Get started
-To get started go to [Getting Started](/getting-started) and grab the latest version for your operating system. 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 [official website](https://stashapp.cc){:target="_blank"}.
+To get started go to [Installation](/installation) and grab the latest version for your operating system.
-# Support
+## Support
-- Find answers to most [Frequently Asked Questions (FAQ)](/faq)
-- Join our [Matrix space](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}
-- Join our [Discord server](https://discord.gg/2TsNFKt){:target="_blank"}
+- Look through the [Frequently Asked Questions (FAQ)](/faq) section
+- Join our community [Matrix space](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}
+- Join our community [Discord server](https://discord.gg/2TsNFKt){:target="_blank"}
- Start a discussion [on GitHub](https://github.com/stashapp/stash/discussions){:target="_blank"}
-# Contribute
+## Contribute
- **Spread the word**: the more people that know about Stash, the more people can help with the tasks below.
- **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.
@@ -36,5 +43,5 @@ To get started go to [Getting Started](/getting-started) and grab the latest ver
- **Finds bugs**: test the software for bugs and create GitHub issues for them to help developers confirm and fix them faster.
- **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.
- **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.
-- **Support financially**: Stash development runs on donations. Donations are collected through OpenCollective. You can do anonymous donations, recurring donations, or even contribute towards a specific feature, incentivizing that bit to get done potentially faster.
+- **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.
- **Sponsor on GitHub**: You can sponsor the [stashapp organization on GitHub](https://github.com/sponsors/stashapp){:target="_blank"} via one-time or monthly donation.
diff --git a/getting-started/installation/docker.md b/docs/installation/docker.md
similarity index 51%
rename from getting-started/installation/docker.md
rename to docs/installation/docker.md
index d3c775e9..72822972 100644
--- a/getting-started/installation/docker.md
+++ b/docs/installation/docker.md
@@ -1,32 +1,20 @@
---
-layout: clean
title: Docker
-nav_order: 4
-parent: Installation
-grand_parent: Getting Started
+icon: fontawesome/brands/docker
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
+!!! info
+ 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"}.
-{: .important }
-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"}.
+!!! info
+ Official Stash image is located at [`stashapp/stash`](https://hub.docker.com/r/stashapp/stash){:target="_blank"}.
-{: .important }
-Official Stash image is located at [`stashapp/stash`](https://hub.docker.com/r/stashapp/stash){:target="_blank"}.
+!!! note
+ Stash README on Docker installation is available [here](https://github.com/stashapp/stash/blob/master/docker/production/README.md){:target="_blank"}.
-{: .note }
-Stash README on Docker installation is available [here](https://github.com/stashapp/stash/blob/master/docker/production/README.md){:target="_blank"}.
+## Using Docker Compose
-# Using Docker Compose
-
-## Install
+### Install
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"}.
- Modify the `docker-compose.yml`` file to your preferences.
@@ -35,10 +23,10 @@ Stash README on Docker installation is available [here](https://github.com/stash
4. Installing this way will bound Stash to port 9999.
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"}.
-## Upgrade
+### Update
-{: .warning }
-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`.
+??? warning
+ 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`.
1. Go to the directory where `docker-compose.yml` is saved.
2. Run `docker-compose pull`. Pulls the new image.
@@ -46,7 +34,7 @@ If you are upgrading from older than v0.20 version make sure to re-download the
4. Run `docker-compose up -d`. Creates and starts the new container.
- Make sure the mount points and settings are the same as in previous `docker-compose.yml` file.
-## Remove
+### Remove
1. Go to the directory where `docker-compose.yml` is saved.
2. Run `docker container kill`. Force stops the container.
diff --git a/getting-started/installation/freenas-truenas.md b/docs/installation/freenas-truenas.md
similarity index 83%
rename from getting-started/installation/freenas-truenas.md
rename to docs/installation/freenas-truenas.md
index 6593414b..61f6ba8e 100644
--- a/getting-started/installation/freenas-truenas.md
+++ b/docs/installation/freenas-truenas.md
@@ -1,25 +1,14 @@
---
-layout: clean
title: FreeNAS/TrueNAS
-nav_order: 6
-parent: Installation
-grand_parent: Getting Started
+icon: simple/truenas
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
+## TrueNAS Scale
-# TrueNAS Scale
+!!! info
+ The following step by step was tested using TrueNAS Scale Cobia (23.10.1.3).
-* The following step by step was tested using TrueNAS Scale Cobia (23.10.1.3).
-
-## Instalation
+### Installation
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/
@@ -32,7 +21,7 @@ To install the stashapp, we will use the TrueCharts app database. To install, we
After the update is complete, use the search bar to search for "stash". When found, click Install.
-## Options
+### Options
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".
@@ -44,39 +33,45 @@ After that, click Install.
Installation will take a few minutes. After the stash appears as "Running", click "Open" on the right and continue with the stash configuration.
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.
-# TrueNAS Core
+## TrueNAS Core
+
+!!! info
+ We are now offering pre-compiled FreeBSD binary. You can grab it from [release page](https://github.com/stashapp/stash/releases/latest){target="_blank"}.
+
+!!! warning
+ The install guide below was reported as outdated.
-## Caveats and assumptions
+### Caveats and assumptions
-* the method documented here has only been given cursory testing, so there may be compatibility problems
-* 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
-* if the jail is in NAT mode, ensure that port 9999 is forwarded to your TrueNAS host
-* the alternative to this method is to compile from source, which is a more involved process and not documented here
+- The method documented here has only been given cursory testing, so there may be compatibility problems.
+- 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.
+- If the jail is in NAT mode, ensure that port 9999 is forwarded to your TrueNAS host.
+- The alternative to this method is to compile from source, which is a more involved process and not documented here
-## Linux compatibility
+### Linux compatibility
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:
+
1. navigate to `System -> Tunables` in the TrueNAS Web UI
2. click `Add` and enter the following:
-* Variable: `linux_enable`
-* Value: `YES`
-* Type: `rc.conf`
+ - Variable: `linux_enable`
+ - Value: `YES`
+ - Type: `rc.conf`
3. Click submit.
4. In a shell in your iocage jail, edit `/etc/rc.conf` to add:
-
```
enable_linux="YES"
```
5. Reboot the system.
-## Install ffmpeg/ffprobe
+### Install ffmpeg/ffprobe
Go into your iocage jail and install `ffmpeg`
```
pkg install ffmpeg
```
-## Create user and group
+### Create user and group
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.
@@ -84,7 +79,7 @@ It is recommended to not run services as root. Adjust this step to your system.
pw useradd -n stash -u 1069 -d /nonexistent -s /usr/sbin/nologin
```
-## Download stash-linux
+### Download stash-linux
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
```
@@ -94,7 +89,7 @@ chown stash:stash stash-linux
chmod +x stash-linux
```
-## Create configuration directory
+### Create configuration directory
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:
```
@@ -102,7 +97,7 @@ mkdir /usr/local/etc/stash
chown stash:stash /usr/local/etc/stash
```
-## rc.d startup script
+### rc.d startup script
In order for stash to run as a daemon in the background, and also start at boot, you need a rc.d script.
```
@@ -145,7 +140,7 @@ run_rc_command $1
```
To save, press `ESC + Enter` and confirm with `a` and make it executable with `chmod +x /usr/local/etc/rc.d/stash`
-## Enable the service at boot
+### Enable the service at boot
If you want Stash to run when you start the jail, run the following command:
```
@@ -159,7 +154,7 @@ Stash is now available at http://jail-IP:9999/
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.
-## Optional steps
+### Optional steps
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.
```
diff --git a/docs/installation/index.md b/docs/installation/index.md
new file mode 100644
index 00000000..9f2b0916
--- /dev/null
+++ b/docs/installation/index.md
@@ -0,0 +1,17 @@
+---
+title: Installation
+hide:
+ - toc
+---
+
+Stash offers native binaries for the following platforms:
+
+- Windows
+- macOS
+- Linux
+- FreeBSD
+- Docker
+
+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"}.
+
+Official Discord image is hosted on [Docker Hub](https://hub.docker.com/r/stashapp/stash){target="_blank"}. Latest version can be pulled from `stashapp/stash:latest`.
\ No newline at end of file
diff --git a/getting-started/installation/linux.md b/docs/installation/linux.md
similarity index 65%
rename from getting-started/installation/linux.md
rename to docs/installation/linux.md
index db8229a9..d3a275c8 100644
--- a/getting-started/installation/linux.md
+++ b/docs/installation/linux.md
@@ -1,39 +1,27 @@
---
-layout: clean
title: Linux
-nav_order: 3
-parent: Installation
-grand_parent: Getting Started
+icon: fontawesome/brands/linux
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
+!!! info
+ 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.
-{: .important }
-It is recommended that you install `ffmpeg` from your distribution's package manager. In case you don't, Stash will download a copy for you.
+!!! note
+ 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.
+
+ `stash-linux` = amd64 (x86_64)
+ `stash-linux-arm32v6` = arm32v6 (armel)
+ `stash-linux-arm32v7` = arm32v7 (armhf)
+ `stash-linux-arm64v8` = arm64v8 (arm64)
-{: .note }
->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.
->
->`stash-linux` = amd64 (x86_64)
->`stash-linux-arm32v6` = arm32v6 (armel)
->`stash-linux-arm32v7` = arm32v7 (armhf)
->`stash-linux-arm64v8` = arm64v8 (arm64)
-
-# Install
+## Install
1. Download latest `` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"} depending on your architecture.
2. Run `./` from the terminal.
- If you have trouble, try running `chmod u+x ` to make the file executable.
3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
-# Upgrade
+## Update
1. Stop Stash server. Either by closing the terminal window or by stopping the process from task manager.
2. Download latest `` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
@@ -46,7 +34,7 @@ It is recommended that you install `ffmpeg` from your distribution's package man
- If any issues arise during the migration your database will be automatically restored from the backup.
7. You should be good to go.
-# Remove
+## Remove
1. Stop Stash server.
2. Delete `` binary file.
diff --git a/getting-started/installation/macos.md b/docs/installation/macos.md
similarity index 62%
rename from getting-started/installation/macos.md
rename to docs/installation/macos.md
index 92907f22..d60b321c 100644
--- a/getting-started/installation/macos.md
+++ b/docs/installation/macos.md
@@ -1,39 +1,27 @@
---
-layout: clean
title: macOS
-nav_order: 2
-parent: Installation
-grand_parent: Getting Started
+icon: fontawesome/brands/apple
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
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.
-# Packaged App
+## Packaged app
+
+!!! note
+ The packaged app is recommended for most users.
-{: .note }
-> The packaged app is recommended for most users.
->
-> It supports desktop notifications, displays a menu bar icon, and does not need to be launched from the terminal.
->
-> 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.
+ It supports desktop notifications, displays a menu bar icon, and does not need to be launched from the terminal.
-## Install
+ 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.
+
+### Install
1. Download the latest `Stash.app.zip` from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
2. Open `Stash.app.zip` archive and drag the `Stash` app to your Applications folder.
3. Open the `Stash` app.
4. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
-## Upgrade
+### Update
1. Stop Stash server. Either via icon in the menu bar or by stopping the process from Activity Monitor.
2. Download latest `Stash.app.zip` from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
@@ -42,44 +30,50 @@ On macOS, Stash can be run as either a packaged app (`Stash.app`) or as a comman
5. Open the `Stash` app.
6. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
7. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps.
- - Automatic backup will be performed before the migration.
- - If any issues arise during the migration your database will be automatically restored from the backup.
+ - Automatic backup will be performed before the migration.
+ - If any issues arise during the migration your database will be automatically restored from the backup.
8. You should be good to go.
-## Remove
+### Remove
1. Stop Stash server.
2. Delete `Stash` app.
3. Delete `$HOME/.stash`.
-# Command-line App
+## Command-line app
-{: .note }
-> 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`.
->
-> It does not support desktop notifications and does not display a menu bar icon. It must be launched from the terminal.
+!!! note
+ 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`.
+
+ It does not support desktop notifications and does not display a menu bar icon. It must be launched from the terminal.
-## Install
+### Install
1. Download latest `stash-macos` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
2. Run `./stash-macos` from the terminal.
- - If you have trouble, try running `chmod u+x stash-macos` to make the file executable.
+
+ !!! note ""
+ If you have trouble, try running `chmod u+x stash-macos` to make the file executable.
+
3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
-## Upgrade
+### Update
1. Stop Stash server. Either by closing the terminal window or by stopping the process from Activity Monitor.
2. Download latest `stash-macos` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
3. Delete old `stash-macos` binary and replace it with the newly downloaded one.
4. Run `./stash-macos` from the terminal.
- - If you have trouble, try running `chmod u+x stash-macos` to make the file executable.
+
+ !!! note ""
+ If you have trouble, try running `chmod u+x stash-macos` to make the file executable.
+
5. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
6. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps.
- - Automatic backup will be performed before the migration.
- - If any issues arise during the migration your database will be automatically restored from the backup.
+ - Automatic backup will be performed before the migration.
+ - If any issues arise during the migration your database will be automatically restored from the backup.
7. You should be good to go.
-## Remove
+### Remove
1. Stop Stash server.
2. Delete `stash-macos`.
diff --git a/docs/installation/synology.md b/docs/installation/synology.md
new file mode 100644
index 00000000..f0daabf2
--- /dev/null
+++ b/docs/installation/synology.md
@@ -0,0 +1,210 @@
+---
+title: Synology
+icon: simple/synology
+---
+
+!!! info
+ Written by [Muldec](https://github.com/Muldec){:target="_blank"}.
+
+## Foreword
+
+Synology devices comes in two categories : those who support containerization through Docker, and those who don't. To see in which category you stand, refer to the "Applied Models" section of [the Docker Package page](https://www.synology.com/dsm/packages/Docker){:target="_blank"}.
+
+Now, follow the installation instructions based on whether you [can use Docker](#to-install-stash-with-docker) or [you cannot use Docker](#to-install-stash-without-docker).
+
+## To install Stash with Docker
+
+!!! note
+ Running Stash without Docker is possible even if your NAS is Docker ready. It offers more control on your Stash instance startup. As an example, it allows you to store your porn collection in an Encrypted Shared Folder, and only run Stash when the Encrypted folder is Mounted (Decrypted).
+
+- Make sure [the Docker app is installed](https://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/){:target="_blank"} and running correctly.
+- [Search the registry for stash](https://hub.docker.com/r/stashapp/stash){:target="_blank"} and install.
+- Create a stash image with the following set up in 'advanced options'
+
+### "Volume" tab
+
+| File/Folder | Mount Path | Description |
+|-------------------------|--------------|-----------------------------------------------------|
+| docker/Stash/generated | /generated | Thumbnails, clips, etc |
+| docker/Stash/metadata | /metadata | Database |
+| docker/Stash/config | /root/.stash | Configuration Files |
+| docker/Stash/cache | /cache | Cache Files |
+| docker/Stash/blobs | /blobs | Binary data for scene covers, performer images, etc |
+| (where your porn lives) | /data | Location of your porn |
+
+### "Environment" tab
+
+(These will need to be the same as the Volumes you created in the "Volume" tab.)
+
+| variable | Value |
+|-----------------|--------------|
+| PATH | (keep as is) |
+| STASH_CACHE | /cache |
+| STASH_METADATA | /metadata |
+| STASH_GENERATED | /generated |
+| STASH_STASH | /data |
+| | | |
+
+### "Port" tab
+
+You will need to set a default port in the "Port" tab, otherwise Docker will assign a different port every time Stash is launched. Leave the container port as-is.
+
+### "Network" tab
+
+Make sure that "Use The Same Network As Docker Host" is checked.
+
+(thanks to backer Herelam80 for these instructions)
+
+## To install Stash without Docker
+
+!!! warning
+ This method uses SSH to run command lines on the NAS. If you are unfamiliar with SSH or linux command lines, I suggest you not to go further, as making a mistake in the SSH session can really screw your NAS.
+
+This is intended to work on DSM 7.0 and later. It will not work on any version prior to 7.0.
+
+### Install Prerequisites
+
+In DSM, navigate to `Package Center > Settings`. In the `Package Sources` tab, click `Add`, type _SynoCommunity_ as Name and [https://packages.synocommunity.com/](https://packages.synocommunity.com/){:target="_blank"} as Location and then press `OK` to validate.
+
+Go back to the Package Center and look for `Python 3.11` in the Community tab. Click on `Ìnstall` and agree to the _Third-Party Package_ warning.
+
+Then look for `Ffmpeg 6` in the Community tab. Click on `Ìnstall` and agree to the _Third-Party Package_ warning.
+
+### Enable SSH
+
+In DSM, navigate to `Control Panel > Connectivity > Terminal & SNMP` and check the `Enable SSH service` box.
+
+### Create a user that will run stash
+
+1. In DSM, navigate to `Control Panel > File Sharing > User & Group`
+1. Click on the `Create` button
+1. Give it a name (eg _stash_) and a Password (you will need it later)
+1. Click `Next` until you are on the "Join groups" screen
+1. Assign the user to the "administrators" group (this will be removed later but is required by synology to be able to use SSH (I know, it's stupid) and complete the installation properly)
+1. Click `Next` until you are on the "Assign shared folders permissions" screen
+1. Assign the Read/Write permission to your porn folder (the write permission is needed to allow the deletion of clips from the stash app)
+1. Click `Next` until you are on the "Assign application permissions" screen
+1. Check `Deny` for all applications
+1. Click `Next` until you can click on `Done`
+
+### Connect to your NAS
+
+With your terminal, connect to your NAS using the newly created account that is part of the _administrators_ group.
+
+```bash
+ssh stash@your_nas_hostname
+```
+
+### Link ffprobe & ffmpeg
+
+ffmpeg has been installed earlier, but is missing a link to ffprobe (also installed) and the new version of ffmpeg. Run the following command.
+
+```bash
+sudo ln -s /var/packages/ffmpeg6/target/bin/ffprobe /usr/local/bin/ffprobe
+sudo ln -s /var/packages/ffmpeg6/target/bin/ffmpeg /usr/local/bin/ffmpeg
+```
+### Download Stash
+
+Download the lastest version of Stash and its checksum from GitHub
+
+```bash
+# find what architecture your synology is running on
+uname -m
+
+# depending on the architecture, you'll have to download the right version of stash
+
+# x86_64
+wget https://github.com/stashapp/stash/releases/latest/download/stash-linux
+# armv6l
+wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm32v6
+# armv7l
+wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm32v7
+# aarch64
+wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm64v8
+
+# Download the CHECKSUM
+wget https://github.com/stashapp/stash/releases/latest/download/CHECKSUMS_SHA1
+
+# Perform the checksum validation
+sha1sum -c --ignore-missing CHECKSUMS_SHA1
+
+# you should see a line that says `stash-linux: OK`
+# if not, something went wrong during the download
+
+# Clean up the now unnecessary file
+rm CHECKSUMS_SHA1
+```
+
+!!! danger
+ DO NOT run stash yet or it will generate a bunch of files/folders where we don't want them.
+
+### Python
+
+Prepare a python environment (for scrapers and plugins)
+
+```bash
+python3.11 -m ensurepip --Update
+python3.11 -m venv stash-env
+source stash-env/bin/activate
+pip3 install pipreqs
+```
+
+### Configure your NAS to run Stash
+
+Create a profile file
+
+```bash
+echo 'PATH=/usr/local/bin:$PATH' > .profile
+echo 'source stash-env/bin/activate' >> .profile
+```
+
+Create the service file by running `cat > stash.service`, copy/pasting the following, and hitting CTRL+D when it's done to save the file (hit again if you are not back to the prompt) :
+
+```ini
+[Unit]
+Description=Run Stash at startup
+After=network.target
+
+[Service]
+WorkingDirectory=/var/services/homes/stash
+Type=simple
+User=stash
+ExecStart=/bin/bash -c -l '\
+ exec ./stash-linux'
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+```
+
+!!! note
+ Change the `ExecStart` line by providing the exact name of the stash executable that you downloaded previously.
+
+Start and activate the service
+
+```bash
+sudo systemctl enable "$(pwd)/stash.service"
+sudo systemctl start stash.service
+```
+
+### Verify that it is working
+
+You can now access to stash by navigating to your NAS url on port 9999 : `http://nas-hostname:9999`
+
+### Installing Scrapers and Plugins
+
+Whenever you install a new python scraper or plugin, do the following from the _stash_ user home directory
+
+```bash
+pipreqs .stash/.
+pip3 install -r .stash/requirements.txt
+```
+
+!!! note
+ Using pipreqs allows to scan all scrapers and plugins installed and find dependencies that they require. You can do the same thing without pipreqs by going into each individual directory and run `pip3 install -r requirements.txt`
+
+### Remove stash user from administrator group
+
+1. Go back to DSM, navigate to `Control Panel > File Sharing > User & Group`
+1. Click on the _stash_ user and then on `Edit`
+1. In the `User Groups` tab, uncheck "administrators" and click on `Save`
\ No newline at end of file
diff --git a/docs/installation/unraid.md b/docs/installation/unraid.md
new file mode 100644
index 00000000..c31af3cb
--- /dev/null
+++ b/docs/installation/unraid.md
@@ -0,0 +1,78 @@
+---
+title: Unraid
+icon: simple/unraid
+---
+
+!!! info
+ 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.
+
+!!! note
+ For users that want to try the development branch of Stash you can change the repository to `stashapp/stash:development`.
+
+## Install
+
+1. Open Unraid and go to the `Apps` tab.
+2. Enable apps (if disabled) and search for `Stash`.
+ - You can modify paths to your preference.
+3. Go to Docker tab and enable autostart for `Stash`.
+
+## Optional NVIDIA runtime
+
+!!! info
+ `binarygeek119/stash-cuda:latest` repository is not maintained by Stash core team.
+
+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.
+
+ !!! warning
+ Do not restart Unraid server until the plugin is done installing itself!
+
+2. After getting the popup, reboot your server. After it back online you may continue to the next steps.
+3. To begin modifing start by going into edit mode by right click on stash icon on Unraid dashboard or in Docker tab.
+4. In edit mode go to the top and click on basic view to switch to advaced view.
+
+ ![](/assets/beginner-guides/unraid-docker-stash-page.jpg){ width=300 align=center }
+ ![](/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg){ width=300 align=center }
+
+### Container configuration
+
+Now we can change some thing to have Stash work with a Nvidia GPU.
+
+1. Under Repository change the default Repository from `stashapp/stash:development` to `binarygeek119/stash-cuda:latest`.
+ ![](/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg){ width=300 align=center }
+ ![](/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg){ width=300 align=center }
+2. Add the following under Extra Parameters: `--runtime=nvidia`.
+ ![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg){ width=300 align=center }
+ ![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg){ width=300 align=center }
+3. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`.
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg){ width=600 align=center }
+4. Change `path` to `Variable` and add the following:
+ - `Name:` enter `NVIDIA_DRIVER_CAPABILITIES`
+ - `Key:` enter `NVIDIA_DRIVER_CAPABILITIES`
+ - `Value:` enter `all`
+ and click save.
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg){ width=200 align=center }
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg){ width=200 align=center }
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg){ width=200 align=center }
+5. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`.
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg){ width=600 align=center }
+6. Change `path` to `Variable` and add the following:
+ - `Name:` enter `NVIDIA_VISIBLE_DEVICES`
+ - `Key:` enter `NVIDIA_VISIBLE_DEVICES`
+ - `Value:` enter `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx`
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg){ width=200 align=center }
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg){ width=200 align=center }
+ ![](/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg){ width=200 align=center }
+
+#### Locating GPUID
+
+Where `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx` you must enter your own GPUID. To find it do the folowing:
+
+ - On a new Unraid page click on settings.
+ - Go down to the bottom and click Nvidia Driver plugin.
+ - Copy the key and paste it under `Variable` called `Value`.
+
+ ![](/assets/beginner-guides/unraid-gpuid.jpg){ width=600 align=center }
+
+1. Click on save.
+2. Now click on apply and let the Docker download the new Nvidia version of Stash.
+3. Enjoy and use as before.
\ No newline at end of file
diff --git a/getting-started/installation/windows.md b/docs/installation/windows.md
similarity index 56%
rename from getting-started/installation/windows.md
rename to docs/installation/windows.md
index c9a79f82..94a6acda 100644
--- a/getting-started/installation/windows.md
+++ b/docs/installation/windows.md
@@ -1,45 +1,39 @@
---
-layout: clean
title: Windows
-nav_order: 1
-parent: Installation
-grand_parent: Getting Started
+icon: fontawesome/brands/windows
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
+!!! note
+ 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"}.
-{: .note }
-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"}
-
-# Install
+## Install
1. Download latest `stash-win.exe` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
2. Run the executable (typically `stash-win.exe`).
- - 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.
+
+ !!! note ""
+ 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.
+
3. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
4. The program will show an icon in your notification area. You can access some quick links or quit the server from there.
-# Upgrade
+## Update
1. Stop Stash server. Either via icon in the notification area or by stopping the process from Task Manager.
2. Download latest `stash-win.exe` binary from [GitHub repository](https://github.com/stashapp/stash/releases/latest){:target="_blank"}.
3. Delete old `stash-win.exe` binary and replace it with the newly downloaded one.
4. Run the executable (typically `stash-win.exe`).
- - 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.
+
+ !!! note ""
+ 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.
+
5. If everything went well, it should open a browser tab [http://localhost:9999](http://localhost:9999){:target="_blank"} to get started.
6. You might be asked to perform a database migration depending on the changes included in the new release. Follow the steps.
- - Automatic backup will be performed before the migration.
- - If any issues arise during the migration your database will be automatically restored from the backup.
+ - Automatic backup will be performed before the migration.
+ - If any issues arise during the migration your database will be automatically restored from the backup.
7. You should be good to go.
-# Remove
+## Remove
1. Stop Stash server.
2. Delete the `stash-win.exe` binary file.
diff --git a/docs/integrations/index.md b/docs/integrations/index.md
new file mode 100644
index 00000000..637bb049
--- /dev/null
+++ b/docs/integrations/index.md
@@ -0,0 +1,10 @@
+---
+title: Integrations
+---
+
+!!! info
+ 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.
+
+Integrations are ways to integrate Stash into other programs.
+
+To install follow the provided install instructions.
\ No newline at end of file
diff --git a/docs/integrations/list.md b/docs/integrations/list.md
new file mode 100644
index 00000000..33c8ba2c
--- /dev/null
+++ b/docs/integrations/list.md
@@ -0,0 +1,45 @@
+---
+title: List of integrations
+---
+
+??? tip "stash-git-index"
+ Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing).
+
+??? tip "Integration no longer works"
+ 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.
+
+### [Jellyfin.Plugin.Stash](https://github.com/DirtyRacer1337/Jellyfin.Plugin.Stash){target=_blank}
+
+=== "Description"
+
+ Pulls data from your Stash using the filename to query on.
+
+=== "Author"
+
+ [DirtyRacer1337](https://github.com/DirtyRacer1337){target=_blank}
+
+=== "Screenshots"
+
+### [plugin.video.stash](https://github.com/gitgiggety/plugin.video.stash){target=_blank}
+
+=== "Description"
+
+ plugin.video.stash is an add-on for the Kodi home theater center software to incorporate Stash, an organizer for your porn.
+
+=== "Author"
+
+ [gitgiggety](https://github.com/gitgiggety){target=_blank}
+
+=== "Screenshots"
+
+### [StashPlexAgent.bundle](https://github.com/Darklyter/StashPlexAgent.bundle){target=_blank}
+
+=== "Description"
+
+ A very simplistic Plex agent to pull metadata from Stash.
+
+=== "Author"
+
+ [Darklyter](https://github.com/Darklyter){target=_blank}
+
+=== "Screenshots"
\ No newline at end of file
diff --git a/matrix.md b/docs/matrix.md
similarity index 91%
rename from matrix.md
rename to docs/matrix.md
index cc7ae3f4..33e2278c 100644
--- a/matrix.md
+++ b/docs/matrix.md
@@ -1,20 +1,11 @@
---
-layout: clean
title: Matrix
description: Matrix details on Stash space and rooms
-nav_order: 10
+hide:
+ - navigation
---
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# What is Matrix?
+## What is Matrix?
Matrix is an open-source internet protocol for secure, decentralised, real-time communication. Unlike other popular platforms like Discord, Matrix is federated. It consists of many servers, each server hosts Matrix accounts and chats. You can create an account on any Matrix server and the join other servers without having to re-create your account. One common example of federated protocol everyone uses today is email.
@@ -27,11 +18,11 @@ Server = Space11 Spaces are a collection of individual rooms.
-# Registration on Matrix
+## Registration on Matrix
There is no central place to register on. You can create an account on any homeserver and join spaces and rooms across all of them.
-## Popular homeservers
+### Popular homeservers
- [matrix.org (click to create an account)2](https://app.element.io/#/register){:target="_blank"}
- [nitro.chat (click to create an account)](https://app.nitro.chat/#/register){:target="_blank"}
@@ -40,46 +31,45 @@ There is no central place to register on. You can create an account on any homes
2 Redirects to element.io domain, which is affiliated with matrix.org.
-## Clients
-
-{: .note}
-Web-based clients are great to start and register. Element (web) is feature-rich and easy to use client.
+### Clients
Matrix supports a variety of clients on web, desktop (Windows, Linux, and macOS), and mobile (Android, iOS). matrix.org maintains a list of clients on their website [here](https://matrix.org/clients/){:target="_blank"}.
-# Stash space
+??? tip
+ Web-based clients are great to start and register. Element (web) is feature-rich and easy to use client.
-{: .important }
-Rooms can be joined from inside the space. You can join one, or more rooms, or all rooms from the space. They are not directly tied to each other.
+## Stash space
Our official space is located at [#stashapp:unredacted.org](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}.
Alternative addresses are on matrix.im: [#stashapp:matrix.im](https://matrix.to/#/#stashapp:matrix.im){:target="_blank"}.
-# Stash rooms
+!!! tip
+ Rooms can be joined from inside the space. You can join one, or more rooms, or all rooms from the space. They are not directly tied to each other.
+
+## Stash rooms
-{: .important }
-We are using a bridge bot that relays Discord and Matrix messages both ways in some rooms. They will be marked (bridged). Some features doesn't translate through the bridge like reactions and threads.
+!!! info
+ We are using a bridge bot that relays Discord and Matrix messages both ways in some rooms. They will be marked (bridged). Some features doesn't translate through the bridge like reactions and threads.
-{: .note }
-Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted in those rooms without /spoiler as long as they within space rules.
+ Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted in those rooms without /spoiler as long as they within space rules.
-## Matrix focused rooms
+### Matrix focused rooms
- [#stash-general-unbridged:unredacted.org](https://matrix.to/#/#stash-general-unbridged:unredacted.org){:target="_blank"} - Discussions outside of Discord sphere
-## Stashapp Org rooms
+### Stashapp Org rooms
- [#stash-announcements:unredacted.org](https://matrix.to/#/#stash-announcements:unredacted.org){:target="_blank"} - (bridged) - Stashapp announcements, news and status updates
- [#stash-finances:unredacted.org](https://matrix.to/#/#stash-sustainability:unredacted.org){:target="_blank"} - (bridged) - Financial status, bounty viability and long term sustainability of the Stash project
-## Support rooms
+### Support rooms
- [#stash-help:unredacted.org](https://matrix.to/#/#stash-help:unredacted.org){:target="_blank"} - (bridged) - Help with anything related to Stash/stash-box software
- [#stash-docker-help:unredacted.org](https://matrix.to/#/#stash-docker-help:unredacted.org){:target="_blank"} - (bridged) - Help with anything related to Docker
- [#stash-bugs:unredacted.org](https://matrix.to/#/#stash-bugs:unredacted.org){:target="_blank"} - (bridged) - Reporting bugs about Stash/stash-box software
- [#stash-feedback:unredacted.org](https://matrix.to/#/#stash-feedback:unredacted.org){:target="_blank"} - (bridged) - Feedback for Stash/stash-box software
-## Stash focused rooms
+### Stash focused rooms
- [#stash-general:unredacted.org](https://matrix.to/#/#stash-general:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Discussions loosely connected to Stash software
- [#stash-scenes:unredacted.org](https://matrix.to/#/#stash-scenes:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Discussions about anything which would fall under Scenes tab in Stash.
@@ -90,14 +80,14 @@ Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted
- [#stash-studios:unredacted.org](https://matrix.to/#/#stash-studios:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Discussions about anything which would fall under Studios tab in Stash.
- [#stash-tags:unredacted.org](https://matrix.to/#/#stash-tags:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Discussions about anything which would fall under Tags tab in Stash.
-## StashDB focused rooms
+### StashDB focused rooms
- [#stashdb-guidelines:unredacted.org](https://matrix.to/#/#stashdb-guidelines:unredacted.org){:target="_blank"} - (bridged) - Discussons about StashDB guidelines and proposals
- [#stashdb-ministry-of-truth:unredacted.org](https://matrix.to/#/#stashdb-ministry-of-truth:unredacted.org){:target="_blank"} - (bridged) - Discussions about StashDB submissions and best practices
- [#stashdb-general:unredacted.org](https://matrix.to/#/#stashdb-general:unredacted.org){:target="_blank"} - (bridged) - Discussions loosely connected to StashDB site
- [#stashdb-invites:unredacted.org](https://matrix.to/#/#stashdb-invites:unredacted.org){:target="_blank"} - (bridged) - Place to get an invite to StashDB
-## Contributor focused rooms
+### Contributor focused rooms
- [#stash-scrapers:unredacted.org](https://matrix.to/#/#stash-scrapers:unredacted.org){:target="_blank"} - (bridged) - Metadata scraping, curation and automation techniques
- [#stash-plugins:unredacted.org](https://matrix.to/#/#stash-plugins:unredacted.org){:target="_blank"} - (bridged) - Discussions loosely related to Stash plugins and plugin API
@@ -110,19 +100,19 @@ Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted
- [#stash-translation:unredacted.org](https://matrix.to/#/#stash-translation:unredacted.org){:target="_blank"} - (bridged) - Stash project localization
- [#stash-community-meta:unredacted.org](https://matrix.to/#/#stash-community-meta:unredacted.org){:target="_blank"} - (bridged) - Discussions about existing issues related to stash software
-## Developer focused rooms
+### Developer focused rooms
- [#stash-project-management:unredacted.org](https://matrix.to/#/#stash-project-management:unredacted.org){:target="_blank"} - (bridged) - Discussions about ongoing projects, roadmaps, updates and release scope
- [#stash-programming:unredacted.org](https://matrix.to/#/#stash-programming:unredacted.org){:target="_blank"} - (bridged) - Discussions loosely related to Stash programming
- [#stash-code-review:unredacted.org](https://matrix.to/#/#stash-code-review:unredacted.org){:target="_blank"} - (bridged) - Code validation and testing for pull requests
- [#stash-ui-ux:unredacted.org](https://matrix.to/#/#stash-ui-ux:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Discussions related to User Interface (UI) and User Experience (UX)
-## stash-box focused rooms
+### stash-box focused rooms
- [#stash-stash-box:unredacted.org](https://matrix.to/#/#stash-stash-box:unredacted.org){:target="_blank"} - (bridged) - Discussions related to stash-box API
- [#stash-admin-discussion:unredacted.org](https://matrix.to/#/#stash-admin-discussion:unredacted.org){:target="_blank"} - (bridged) - Discussions about stash-box from admins perspective
-## Misc. rooms
+### Misc. rooms
- [#stash-data-hoarding:unredacted.org](https://matrix.to/#/#stash-data-hoarding:unredacted.org){:target="_blank"} - (bridged) - Discussions about data hoarding
- [#stash-id-request:unredacted.org](https://matrix.to/#/#stash-id-request:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Scene or performer identification
- [#stash-id-request-unbridged:unredacted.org](https://matrix.to/#/#stash-id-request-unbridged:unredacted.org){:target="_blank"} - [NSFW] - Scene or performer identification where it's not appropriate for Discord
@@ -130,11 +120,11 @@ Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted
- [#stash-favorites-male-nsfw:unredacted.org](https://matrix.to/#/#stash-favorites-male-nsfw:unredacted.org){:target="_blank"} - [NSFW] - (bridged) - Showcase your favorite male performers
- [#stash-off-topic:unredacted.org](https://matrix.to/#/#stash-off-topic:unredacted.org){:target="_blank"} - (bridged) - Discussions outside of general Stash software focus
-## Bot feed rooms
+### Bot feed rooms
- [#stash-github-feed:unredacted.org](https://matrix.to/#/#stash-discord-free-zone:unredacted.org){:target="_blank"} - GitHub feed from various Stashapp repositories
-## Archived (read-only) rooms
+### Archived (read-only) rooms
- [#stash-images-and-galleries:unredacted.org](https://matrix.to/#/#stash-images-and-galleries:unredacted.org){:target="_blank"} - (bridged) - Help with anything related to images and/or galleries
- [#stash-movie-scraping:unredacted.org](https://matrix.to/#/#stash-movie-scraping:unredacted.org){:target="_blank"} - (bridged) - For anything related to Stash movie feature
- [#stash-community-liaison:unredacted.org](https://matrix.to/#/#stash-community-liaison:unredacted.org){:target="_blank"} - (bridged)
@@ -146,13 +136,13 @@ Some rooms are designated as [NSFW]. Adult focused media is allowed to be posted
- [#stash-pmvbox:unredacted.org](https://matrix.to/#/#stash-pmvbox:unredacted.org){:target="_blank"} - (bridged) - Discussions related to PMV Stash
- [#stash-fansdb:unredacted.org](https://matrix.to/#/#stash-fansdb:unredacted.org){:target="_blank"} - (bridged) - Discussions related to FansDB
-# Tips and Tricks
+## Tips and Tricks
- You can change your Display Name by going into Settings.
- If you use different Matrix ID than Discord username, you can set a custom ping for your old username (Settings > Notifications > Keyword).
- You can use web client to quickly create an account and then move to desktop based client for better experience.
-# Further read on Matrix
+## Further read on Matrix
- [joinmatrix.org guide](https://joinmatrix.org/guide/){:target="_blank"}
- [matrix.org FAQ](https://matrix.org/faq/){:target="_blank"}
diff --git a/docs/metadata-sources/index.md b/docs/metadata-sources/index.md
new file mode 100644
index 00000000..b996b13b
--- /dev/null
+++ b/docs/metadata-sources/index.md
@@ -0,0 +1,10 @@
+---
+title: Metadata sources
+---
+
+There are several ways to get metadata into Stash.
+
+You can configure your metadata sources under :fontawesome-solid-gear: **Settings** > **Metadata Providers**. See sections below for more details.
+
+- [stash-box instances](/metadata-sources/stash-box-instances) - more automatic, crowdsourced metadata
+- [Scrapers](/metadata-sources/scrapers) - more individual, can be used for different databases, official studios
\ No newline at end of file
diff --git a/docs/metadata-sources/list.md b/docs/metadata-sources/list.md
new file mode 100644
index 00000000..04296d98
--- /dev/null
+++ b/docs/metadata-sources/list.md
@@ -0,0 +1,4 @@
+---
+title: Scrapers list
+icon: octicons/link-external-16
+---
diff --git a/docs/metadata-sources/scrapers.md b/docs/metadata-sources/scrapers.md
new file mode 100644
index 00000000..f209128a
--- /dev/null
+++ b/docs/metadata-sources/scrapers.md
@@ -0,0 +1,73 @@
+---
+title: Scrapers
+---
+
+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.
+
+## Managing scrapers
+
+Scrapers can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Metadata Providers** page.
+
+Scrapers are installed using the **Available Scrapers** section. The **Community (stable)** source is configured by default.
+
+Installed plugins can be updated or uninstalled from the **Installed Scrapers** section.
+
+### Adding sources
+
+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**.
+
+### Installing scrapers manually
+
+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.
+
+Scrapers are added by adding configuration yaml files (format: `scraperName.yml`) to the `scrapers` directory.
+
+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.
+
+[CommunityScrapers repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"} is the source for community maintained scrapers.
+
+## Scraper types
+
+### By searching type
+
+#### Fragment
+
+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.
+
+#### Search by name
+
+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.
+
+Scrapers includes: Babepedia.yml, FreeonesCommunity.yml, IAFD.yml
+
+#### Search by URL
+
+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.
+
+Scrapers includes: All other scrapers.
+
+### By implementation
+
+#### XPath and JSON ccrapers
+
+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.
+
+#### CDP scrapers
+
+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.
+
+#### Python / Ruby scrapers
+
+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.
+
+## More details
+
+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"}.
+
+## Create your own
+
+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.
+
+## Contribution
+
+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.
\ No newline at end of file
diff --git a/docs/metadata-sources/stash-box-instances.md b/docs/metadata-sources/stash-box-instances.md
new file mode 100644
index 00000000..231a30ad
--- /dev/null
+++ b/docs/metadata-sources/stash-box-instances.md
@@ -0,0 +1,40 @@
+---
+title: stash-box instances
+---
+
+### FansDB
+
+FansDB is a community-driven metadata database focused on adult content platforms (OnlyFans, Fansly, ManyVids, etc.) where the independent creators are the primary focus.
+
+[: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"}
+
+### JAVStash
+
+JAVStash is a community-driven metadata database focused on Japanese Adult Video content and their original metadata in Japanese.
+
+[:octicons-link-16: Website](https://javstash.org){:target="_blank"} | [:fontawesome-regular-file-lines: Guidelines](https://discord.com/channels/1270524250213842975/1270531937785872504){:target="_blank"}[^1] | [: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"}[^2]
+
+[^1]: Link leads to a private Discord server.
+[^2]: Link leads to a private Discord server.
+
+### PMV Stash
+
+PMV Stash is a community-driven metadata database focused on remixed pornographic art such as Porn Music Videos, Cock Hero, Hypno Vids, Compilations.
+
+[: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://discord.com/channels/1032261936726933524/1080803277140144128){:target="_blank"}[^3]
+
+[^3]: Link leads to a private Discord server.
+
+### StashDB
+
+StashDB is a community-driven metadata database focused on digital scenes of all orientations.
+
+[:octicons-link-16: Website](https://stashdb.org){:target="_blank"} | [:fontawesome-regular-file-lines: Guidelines](https://guidelines.stashdb.org){:target="_blank"} | [:simple-discord: Discord](https://discord.com/invite/2TsNFKt){:target="_blank"} | [:simple-matrix: Matrix](https://matrix.to/#/#stashapp:unredacted.org){: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"}
+
+### ThePornDB
+
+ThePornDB is a metadata database focused on digital scenes and movies, relying on automated scrapers.
+
+[: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`]() | [:fontawesome-solid-unlock-keyhole: Join](https://theporndb.net/tools){:target="_blank"}[^4]
+
+[^4]: Requires registration to access the site.
\ No newline at end of file
diff --git a/docs/plugins/index.md b/docs/plugins/index.md
new file mode 100644
index 00000000..60c44e07
--- /dev/null
+++ b/docs/plugins/index.md
@@ -0,0 +1,28 @@
+---
+title: Plugins
+---
+
+!!! info
+ 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.
+
+Plugins adds further features that Stash doesn't itself provide.
+
+## Managing plugins
+
+Plugins can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Plugins** page.
+
+Plugins are installed using the **Available Plugins** section. The **Community (stable)** source is configured by default.
+
+Installed plugins can be updated or uninstalled from the **Installed Plugins** section.
+
+### Adding sources
+
+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**.
+
+### Installing plugins manually
+
+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.
+
+Plugins are added by adding configuration yaml files (format: `pluginName.yml`) to the `plugins` directory.
+
+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.
\ No newline at end of file
diff --git a/docs/plugins/list.md b/docs/plugins/list.md
new file mode 100644
index 00000000..ec12acfb
--- /dev/null
+++ b/docs/plugins/list.md
@@ -0,0 +1,3475 @@
+# List of plugins
+
+
+### [0gql-intercept](https://github.com/feederbox826/plugins/tree/main/plugins/0gql-intercept){target=_blank}
+
+=== "Description"
+
+ graphQL intercept helper library
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [7dJx1qP's Stash Userscript Library](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashUserscriptLibrary7dJx1qP){target=_blank}
+
+=== "Description"
+
+ Exports utility functions and a Stash class that emits events whenever a GQL response is received and whenenever a page navigation change is detected
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+
+
+### [Add Images to Tags](https://github.com/rosa-umineko/CommunityScripts/tree/main/plugins/addImagesToTags){target=_blank}
+
+=== "Description"
+
+ Auto add images to tags using first found image from Google API. Requires modifying the .py file to provide your own API key and CSE ID
+
+=== "Source URL"
+
+ ```
+ https://rosa-umineko.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [rosa-umineko](https://github.com/rosa-umineko)
+
+=== "Screenshots"
+
+
+### [Adulttime Interactive Downloader](https://github.com/stashapp/CommunityScripts/tree/main/plugins/AdulttimeInteractiveDL){target=_blank}
+
+=== "Description"
+
+ Download Interactive Files for Adulttime Scenes
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/AdulttimeInteractiveDL/README.md){target=_blank}
+
+=== "Author"
+
+ [tooliload](https://github.com/tooliload)
+
+=== "Screenshots"
+
+
+### [AI Tagger](https://github.com/stashapp/CommunityScripts/tree/main/plugins/AITagger){target=_blank}
+
+=== "Description"
+
+ Tag videos and Images with Locally hosted AI using Skier's Patreon AI models
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/AITagger/README.md){target=_blank}
+
+=== "Author"
+
+ [skier233](https://github.com/skier233)
+
+=== "Screenshots"
+
+
+### [audio-transcodes](https://github.com/stashapp/CommunityScripts/tree/main/plugins/audio-transcodes){target=_blank}
+
+=== "Description"
+
+ Generate a transcode video from an audio file
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/audio-transcodes/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [Auto Select Updatable Plugins and Scrapers](https://github.com/tetrax-10/stash-stuffs/tree/main/Plugins/AutoSelectUpdatablePluginsAndScrapers){target=_blank}
+
+=== "Description"
+
+ Auto selects updatable Plugins and Scrapers when Check for Updates is clicked
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+ ![Auto Select Updatable Plugins and Scrapers screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/AutoSelectUpdatablePlugins/demo.gif){ loading=lazy }
+
+### [Auto Update Plugins and Scrapers](https://github.com/tetrax-10/stash-stuffs/tree/main/Plugins/AutoUpdatePluginsAndScrapers){target=_blank}
+
+=== "Description"
+
+ Automatically updates Plugins and Scrappers on website Startup
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+
+
+### [Average Rating](https://github.com/feederbox826/plugins/tree/main/plugins/avg-rating){target=_blank}
+
+=== "Description"
+
+ Adds average rating to performers and studios
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Backup Plugins](https://github.com/serechops/Serechops-Stash/tree/main/plugins/pluginsBackup){target=_blank}
+
+=== "Description"
+
+ Creates a backup of the 'plugins' directory.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Bulk Import Performers](https://github.com/serechops/Serechops-Stash/tree/main/plugins/bulkImportPerformers){target=_blank}
+
+=== "Description"
+
+ Bulk Import Performers based on names from a text file.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/bulkImportPerformers/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [CJ's Card Tweaks.](https://github.com/stashapp/CommunityScripts/tree/main/plugins/cjCardTweaks){target=_blank}
+
+=== "Description"
+
+ Provides various tweaks for the Stash Cards.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/cjCardTweaks/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+ ![CJ's Card Tweaks. screenshot](/assets/plugins/cjCardTweaks/1.png){ loading=lazy } ![CJ's Card Tweaks. screenshot](/assets/plugins/cjCardTweaks/2.png){ loading=lazy } ![CJ's Card Tweaks. screenshot](/assets/plugins/cjCardTweaks/3.png){ loading=lazy }
+
+### [CleanupUI](https://github.com/S3L3CT3DLoves/stashPlugins/tree/main/plugins/cleanupUI){target=_blank}
+
+=== "Description"
+
+ UI plugin to hide features you don't want
+
+=== "Source URL"
+
+ ```
+ https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/CleanupUI/README.md){target=_blank}
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)
+
+=== "Screenshots"
+
+
+### [Comic Info Extractor](https://github.com/stashapp/CommunityScripts/tree/main/plugins/comicInfoExtractor){target=_blank}
+
+=== "Description"
+
+ Extract the metadata from cbz with the Comicrack standard (ComicInfo.xml)
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/comicInfoExtractor/README.md){target=_blank}
+
+=== "Author"
+
+ [yoshnopa](https://github.com/yoshnopa)
+
+=== "Screenshots"
+
+
+### [CommunityScriptsUILibrary](https://github.com/stashapp/CommunityScripts/tree/main/plugins/CommunityScriptsUILibrary){target=_blank}
+
+=== "Description"
+
+ CommunityScripts UI helper library
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/CommunityScriptsUILibrary/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [CompleteTheStash](https://github.com/MinasukiHikimuna/MidnightRider-Stash/tree/main/plugins/CompleteTheStash){target=_blank}
+
+=== "Description"
+
+ Finds missing scenes for selected performers and creates missing scene metadata to another missing Stash instance. You can use either StashDB or TPDB or both as a source for missing scenes.
+
+=== "Source URL"
+
+ ```
+ https://minasukihikimuna.github.io/MidnightRider-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/MinasukiHikimuna/MidnightRider-Stash/blob/main/plugins/CompleteTheStash/README.md){target=_blank}
+
+=== "Author"
+
+ [MinasukiHikimuna](https://github.com/MinasukiHikimuna)
+
+=== "Screenshots"
+
+
+### [Date Parser](https://github.com/stashapp/CommunityScripts/tree/main/plugins/DateParser){target=_blank}
+
+=== "Description"
+
+ Find date in path or filename and add it
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ HijackHornet
+
+=== "Screenshots"
+
+
+### [Default Data For Path](https://github.com/stashapp/CommunityScripts/tree/main/plugins/defaultDataForPath){target=_blank}
+
+=== "Description"
+
+ Adds configured Tags, Performers and/or Studio to all newly scanned Scenes, Images and Galleries.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/defaultDataForPath/README.md){target=_blank}
+
+=== "Author"
+
+ [TheSinfulKing](https://github.com/TheSinfulKing)
+
+=== "Screenshots"
+
+
+### [deletefp](https://github.com/feederbox826/plugins/tree/main/plugins/deletefp){target=_blank}
+
+=== "Description"
+
+ Adds a button to delete fingerprints
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Discord Presence](https://github.com/stashapp/CommunityScripts/tree/main/plugins/discordPresence){target=_blank}
+
+=== "Description"
+
+ Sets currently playing scene data as your Discord status. See README for prerequisites and config options (blue hyperlink next to enable/disable button)
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/discordPresence/README.md){target=_blank}
+
+=== "Author"
+
+ NotForMyCV
+
+=== "Screenshots"
+
+
+### [Dupe Marker Detector](https://github.com/stashapp/CommunityScripts/tree/main/plugins/dupeMarker){target=_blank}
+
+=== "Description"
+
+ Finds and marks duplicate markers
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/dupeMarker/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [DupFileManager](https://github.com/stashapp/CommunityScripts/tree/main/plugins/DupFileManager){target=_blank}
+
+=== "Description"
+
+ Manages duplicate files.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/DupFileManager/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [Duplicate Scene Marker Cleaner](https://github.com/serechops/Serechops-Stash/tree/main/plugins/markerDupes){target=_blank}
+
+=== "Description"
+
+ Automatically detects and removes duplicate scene markers based on scene ID, seconds, and title upon scene updates or via manual trigger.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [EasyTag](https://github.com/S3L3CT3DLoves/stashPlugins/tree/main/plugins/easytag){target=_blank}
+
+=== "Description"
+
+ UI plugin to add shortcuts for commonly used tags
+
+=== "Source URL"
+
+ ```
+ https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/QuickEdit/README.md){target=_blank}
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)
+
+=== "Screenshots"
+
+
+### [edit-unorganized](https://github.com/feederbox826/plugins/tree/main/plugins/edit-unorganized){target=_blank}
+
+=== "Description"
+
+ Default to edit tab on unorganized scenes
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/edit-unorganized/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Extended Stats](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stats){target=_blank}
+
+=== "Description"
+
+ Adds new stats to the stats page
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+
+
+### [FileMonitor](https://github.com/stashapp/CommunityScripts/tree/main/plugins/filemonitor){target=_blank}
+
+=== "Description"
+
+ Monitors the Stash library folders, and updates Stash if any changes occurs in the Stash library paths.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/FileMonitor/README.md){target=_blank}
+
+=== "Author"
+
+ [David-Maisonave](https://github.com/David-Maisonave)
+
+=== "Screenshots"
+ ![FileMonitor screenshot](/assets/plugins/filemonitor/1.png){ loading=lazy }
+
+### [Filename parser](https://github.com/stashapp/CommunityScripts/tree/main/plugins/filenameParser){target=_blank}
+
+=== "Description"
+
+ Parses filename into studio, date, performers and title
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [gitgiggety](https://github.com/gitgiggety)
+
+=== "Screenshots"
+
+
+### [Find File Errors](https://github.com/stg-annon/StashScripts/tree/main/plugins/findFileErrors){target=_blank}
+
+=== "Description"
+
+ find files that stash has previously errored on from the log file
+
+=== "Source URL"
+
+ ```
+ https://stg-annon.github.io/StashScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [stg-annon](https://github.com/stg-annon)
+
+=== "Screenshots"
+
+
+### [Find Marker Tag Images](https://github.com/serechops/Serechops-Stash/tree/main/plugins/findMarkerTagImages){target=_blank}
+
+=== "Description"
+
+ Script to update tag images based on scene markers
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/findMarkerTagImages/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [folderSort](https://github.com/S3L3CT3DLoves/stashPlugins/tree/main/plugins/folderSort){target=_blank}
+
+=== "Description"
+
+ Organise your PMV folder(s) based on Stash info
+
+=== "Source URL"
+
+ ```
+ https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/S3L3CT3DLoves/stashPlugins/blob/main/plugins/folderSort/README.md){target=_blank}
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)
+
+=== "Screenshots"
+
+
+### [fontawesome-js](https://github.com/feederbox826/plugins/tree/main/plugins/fontawesome-js){target=_blank}
+
+=== "Description"
+
+ Use fontawesome icons from React libraries
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Forbidden Config](https://github.com/feederbox826/plugins/tree/main/plugins/forbiddenConfig){target=_blank}
+
+=== "Description"
+
+ Expose config store to UI plugins
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Funscript Markers](https://github.com/stashapp/CommunityScripts/tree/main/plugins/funscriptMarkers){target=_blank}
+
+=== "Description"
+
+ Create markers if there is a funscript with "chapters" included in the metadata of the script
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/funscriptMarkers/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [Glassy - Branding](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Glassy - Branding){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/serechops/Serechops-Stash/blob/main/plugins/Glassy - Branding/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [HashTheStash](https://github.com/MinasukiHikimuna/MidnightRider-Stash/tree/main/plugins/HashTheStash){target=_blank}
+
+=== "Description"
+
+ Calculates additional fingerprints for scenes.
+
+=== "Source URL"
+
+ ```
+ https://minasukihikimuna.github.io/MidnightRider-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [MinasukiHikimuna](https://github.com/MinasukiHikimuna)
+
+=== "Screenshots"
+
+
+### [Hot Cards](https://github.com/stashapp/CommunityScripts/tree/main/plugins/hotCards){target=_blank}
+
+=== "Description"
+
+ Adds custom styling to card elements that match a Tag ID or a Rating Threshold.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/hotCards/README.md){target=_blank}
+
+=== "Author"
+
+ [HandyRandyx](https://github.com/HandyRandyx)
+
+=== "Screenshots"
+
+
+### [image2Scene](https://github.com/serechops/Serechops-Stash/tree/main/plugins/image2Scene){target=_blank}
+
+=== "Description"
+
+ Add a mechanism to link images to scenes in the Image Edit Panel.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/image2Scene/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [log-toast](https://github.com/feederbox826/plugins/tree/main/plugins/log-toast){target=_blank}
+
+=== "Description"
+
+ display log messages as toasts
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/log-toast/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Marker Delete Button](https://github.com/stashapp/CommunityScripts/tree/main/plugins/markerDeleteButton){target=_blank}
+
+=== "Description"
+
+ Adds a delete button to entries on the Markers page and on the Scene page.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [WeedLordVegeta420](https://github.com/WeedLordVegeta420]
+
+=== "Screenshots"
+
+
+### [markergen](https://github.com/feederbox826/plugins/tree/main/plugins/markergen){target=_blank}
+
+=== "Description"
+
+ Generate markers on save
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [mcMetadata](https://github.com/carrotwaxr/stash-plugins/tree/main/plugins/mcMetadata){target=_blank}
+
+=== "Description"
+
+ Generates metadata for use with other media servers like Emby and Jellyfin, and optionally organizes/renames your tagged scenes.
+
+=== "Source URL"
+
+ ```
+ https://carrotwaxr.github.io/stash-plugins/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/carrotwaxr/stash-plugins/blob/main/plugins/mcMetadata/README.md){target=_blank}
+
+=== "Author"
+
+ [carrotwaxr](https://github.com/carrotwaxr)
+
+=== "Screenshots"
+
+
+### [Misc Tags](https://github.com/stashapp/CommunityScripts/tree/main/plugins/miscTags){target=_blank}
+
+=== "Description"
+
+ Add extra tags for VR and other ues
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [Tweeticoats](https://github.com/Tweeticoats)
+
+=== "Screenshots"
+
+
+### [Movie Duration from Scenes](https://github.com/serechops/Serechops-Stash/tree/main/plugins/scenesMovieDuration){target=_blank}
+
+=== "Description"
+
+ More accurately reflect your movie's duration with the sum of durations of its scenes.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/scenesMovieDuration/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy){target=_blank}
+
+=== "Description"
+
+ Movie-Fy meta-package
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy Bulk Movie Scraper](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy%20Bulk%20Movie%20URL%20Scrape){target=_blank}
+
+=== "Description"
+
+ Update your movie metadata in bulk.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy Check and Update Scene Titles](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy%20Check%20and%20Update%20Scene%20Titles){target=_blank}
+
+=== "Description"
+
+ Check and update titles for scenes in the Movie studio
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy Create Movie Studio](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy%20Create%20Movie%20Studio){target=_blank}
+
+=== "Description"
+
+ Creates a new Movie Studio to be used with Mass_Movie_Create
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy Scene Studio Bulk Update](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy%20Scene%20Studio%20Bulk%20Update){target=_blank}
+
+=== "Description"
+
+ Bulk update scene studios based on movie studios.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Movie-Fy Update Movie Scene Covers](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Movie-Fy/Movie-Fy%20Update%20Movie%20Scene%20Covers){target=_blank}
+
+=== "Description"
+
+ Update scene cover images with movie cover images.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Movie-Fy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Path Parser](https://github.com/stashapp/CommunityScripts/tree/main/plugins/pathParser){target=_blank}
+
+=== "Description"
+
+ Updates scene info based on the file path.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/pathParser/README.md){target=_blank}
+
+=== "Author"
+
+ [ImJustMatt](https://github.com/ImJustMatt)
+
+=== "Screenshots"
+
+
+### [Performer Body Calculator](https://github.com/stg-annon/StashScripts/tree/main/plugins/performerBodyCalculator){target=_blank}
+
+=== "Description"
+
+ Tags performers based on existing metadata, with tags matching the performers body type
+
+=== "Source URL"
+
+ ```
+ https://stg-annon.github.io/StashScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stg-annon/StashScripts/blob/main/plugins/performerBodyCalculator/README.md){target=_blank}
+
+=== "Author"
+
+ [stg-annon](https://github.com/stg-annon)
+
+=== "Screenshots"
+
+
+### [Performer Details Extended](https://github.com/Valkyr-JS/stash-plugins/tree/main/plugins/PerformerDetailsExtended){target=_blank}
+
+=== "Description"
+
+ Displays metadata about frequent scene partners, most prominent tags, etc. in your library, on performer pages.
+
+=== "Source URL"
+
+ ```
+ https://valkyr-js.github.io/stash-plugins/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Valkyr-JS/PerformerDetailsExtended/blob/main/README.md){target=_blank}
+
+=== "Author"
+
+ [Valkyr-JS](https://github.com/Valkyr-JS)
+
+=== "Screenshots"
+
+
+### [Performer Gallery Scraper Plugin](https://github.com/serechops/Serechops-Stash/tree/main/plugins/performerGallery){target=_blank}
+
+=== "Description"
+
+ A plugin to scrape galleries from porngals4.com for specific performers and create zip archives.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Performer Scene Compare](https://github.com/serechops/Serechops-Stash/tree/main/plugins/performerSceneCompare){target=_blank}
+
+=== "Description"
+
+ Compares local performer scenes with StashDB and updates the local database.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/performerSceneCompare/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [PHash Duplicate Tagger](https://github.com/stg-annon/StashScripts/tree/main/plugins/phashDuplicateTagger){target=_blank}
+
+=== "Description"
+
+ PHash Duplicate Tagger (PDT) Will tag scenes based on duplicate PHashes for easier/safer removal.
+
+=== "Source URL"
+
+ ```
+ https://stg-annon.github.io/StashScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stg-annon/StashScripts/blob/main/plugins/phashDuplicateTagger/README.md){target=_blank}
+
+=== "Author"
+
+ [stg-annon](https://github.com/stg-annon)
+
+=== "Screenshots"
+
+
+### [Python Tools Installer](https://github.com/stashapp/CommunityScripts/tree/main/plugins/PythonToolsInstaller){target=_blank}
+
+=== "Description"
+
+ Download stashapp-tools for DockerEnv
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/PythonToolsInstaller/README.md){target=_blank}
+
+=== "Author"
+
+ [tooliload](https://github.com/tooliload)
+
+=== "Screenshots"
+
+
+### [Play Video If Preview Not Found](https://github.com/tetrax-10/stash-stuffs/tree/main/Plugins/PlayVideoIfPreviewNotFound){target=_blank}
+
+=== "Description"
+
+ Plays video on scene card hover if preview is not found
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+ ![Play Video If Preview Not Found screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/play-video-if-preview-not-found/demo.gif){ loading=lazy }
+
+### [Public IP](https://github.com/S3L3CT3DLoves/stashPlugins/tree/main/plugins/myIp){target=_blank}
+
+=== "Description"
+
+ Query ident.me to check my current IP (ensure VPN is working)
+
+=== "Source URL"
+
+ ```
+ https://s3l3ct3dloves.github.io/stashPlugins/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves)
+
+=== "Screenshots"
+
+
+### [Qx Scene Card](https://github.com/stashapp/CommunityScripts/tree/main/plugins/qxSceneCard){target=_blank}
+
+=== "Description"
+
+ Redesigns the scene card.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/qxSceneCard/README.md){target=_blank}
+
+=== "Author"
+
+ [Qx](https://github.com/QxxxGit)
+
+=== "Screenshots"
+
+
+### [Rebrand](https://github.com/feederbox826/plugins/tree/main/plugins/rebrand){target=_blank}
+
+=== "Description"
+
+ Adds a name override of your choice in Stash
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/rebrand/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [RenameFile](https://github.com/stashapp/CommunityScripts/tree/main/plugins/renamefile){target=_blank}
+
+=== "Description"
+
+ Renames video (scene) file names when the user edits the [Title] field located in the scene [Edit] tab.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/RenameFile/README.md){target=_blank}
+
+=== "Author"
+
+ [David-Maisonave](https://github.com/David-Maisonave)
+
+=== "Screenshots"
+
+
+### [Renamer](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Renamer){target=_blank}
+
+=== "Description"
+
+ Renames scene files based on scene details and updates associated scenes with a "Renamed" tag.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Renamer/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Renamer-Dev](https://github.com/serechops/Serechops-Stash/tree/main/plugins/Renamer-Dev){target=_blank}
+
+=== "Description"
+
+ Renames scene files based on scene details and updates associated scenes with a "Renamed" tag.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/Renamer-Dev/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [renamerOnUpdate](https://github.com/stashapp/CommunityScripts/tree/main/plugins/renamerOnUpdate){target=_blank}
+
+=== "Description"
+
+ Rename/move filename based on a template.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/renamerOnUpdate/README.md){target=_blank}
+
+=== "Author"
+
+ [Belleyy](https://github.com/Belleyy)
+
+=== "Screenshots"
+ ![renamerOnUpdate screenshot](/assets/plugins/renamerOnUpdate/1.png){ loading=lazy }
+
+### [Replace Thumbnails With High-Res Images](https://github.com/tetrax-10/stash-stuffs/tree/main/Plugins/ReplaceThumbnailsWithImages){target=_blank}
+
+=== "Description"
+
+ Replaces thumbnails with original high res images
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+
+
+### [Scene Cover Cropper](https://github.com/stashapp/CommunityScripts/tree/main/plugins/sceneCoverCropper){target=_blank}
+
+=== "Description"
+
+ Crop Scene Cover Images
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [Scene Marker Tags to Scene](https://github.com/stashapp/CommunityScripts/tree/main/plugins/markerTagToScene){target=_blank}
+
+=== "Description"
+
+ Adds primary tag of Scene Marker to the Scene on marker create/update.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [WithoutPants](https://github.com/WithoutPants)
+
+=== "Screenshots"
+
+
+### [SceneHub](https://github.com/serechops/Serechops-Stash/tree/main/plugins/SceneHub){target=_blank}
+
+=== "Description"
+
+ Collects the latest scenes from popular network sites and displays them all in one page.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/SceneHub/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Set Scene Cover](https://github.com/rosa-umineko/CommunityScripts/tree/main/plugins/setSceneCover){target=_blank}
+
+=== "Description"
+
+ searches Stash for Scenes with a cover image in the same folder and sets the cover image in stash to that image
+
+=== "Source URL"
+
+ ```
+ https://rosa-umineko.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [rosa-umineko](https://github.com/rosa-umineko)
+
+=== "Screenshots"
+
+
+### [Set Scene Cover](https://github.com/stashapp/CommunityScripts/tree/main/plugins/setSceneCoverFromFile){target=_blank}
+
+=== "Description"
+
+ searches Stash for Scenes with a cover image in the same folder and sets the cover image in stash to that image
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [stg-annon](https://github.com/stg-annon)
+
+=== "Screenshots"
+
+
+### [skip-intro](https://github.com/feederbox826/plugins/tree/main/plugins/skip-intro){target=_blank}
+
+=== "Description"
+
+ Skips static duration intros
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/skip-intro/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Stash AI](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stashai){target=_blank}
+
+=== "Description"
+
+ Add Tags or Markers to a video using AI
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [cc1234475](https://github.com/cc1234475)
+
+=== "Screenshots"
+
+
+### [Stash Audio Player](https://github.com/d0t-d0t-d0t/stash-repo/tree/main/Plugins/stashaudioplayer){target=_blank}
+
+=== "Description"
+
+ Add an audio-only toggle button and support for audio files in the Stash player through hls transcoder.
+
+=== "Source URL"
+
+ ```
+ https://raw.githubusercontent.com/d0t-d0t-d0t/stash-repo/refs/heads/dist/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/d0t-d0t-d0t/stash-repo/blob/main/Plugins/stashaudioplayer/about.md){target=_blank}
+
+=== "Author"
+
+ [d0t-d0t-d0t](https://github.com/d0t-d0t-d0t)
+
+=== "Screenshots"
+
+
+### [Stash Batch Create All](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashBatchCreateAll){target=_blank}
+
+=== "Description"
+
+ Adds a 'Create All' button to the scene tagger view. It will target all 'Create' buttons and add new tags as well.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Batch Query Edit](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashBatchQueryEdit){target=_blank}
+
+=== "Description"
+
+ Batch modify scene tagger search query
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Batch Query Edit screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/config.png){ loading=lazy } ![Stash Batch Query Edit screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Query%20Edit/scenes-tagger.png){ loading=lazy }
+
+### [Stash Batch Result Toggle](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashBatchResultToggle){target=_blank}
+
+=== "Description"
+
+ In Scene Tagger, adds button to toggle all stashdb scene match result fields. Saves clicks when you only want to save a few metadata fields. Instead of turning off every field, you batch toggle them off, then toggle on the ones you want
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Batch Result Toggle screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/config.png){ loading=lazy } ![Stash Batch Result Toggle screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Result%20Toggle/scenes-tagger.png){ loading=lazy }
+
+### [Stash Batch Save](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashBatchSave){target=_blank}
+
+=== "Description"
+
+ Adds a batch save button to scenes tagger
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Batch Save screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Save/scenes-tagger.png){ loading=lazy }
+
+### [Stash Batch Search](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashBatchSearch){target=_blank}
+
+=== "Description"
+
+ Adds a batch search button to scenes and performers tagger
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Batch Search screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Batch%20Search/scenes-tagger.png){ loading=lazy }
+
+### [Stash Disable All](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashDisableAll/stashDisableAll){target=_blank}
+
+=== "Description"
+
+ Disables all UI configs and plugins. Saves the current config to a JSON file so that it can be restored to original state.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Enable All](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashDisableAll/stashEnableFromSave){target=_blank}
+
+=== "Description"
+
+ Restores the UI to its original state via a saved JSON config.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash FPS Overlay](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashFPSOverlay){target=_blank}
+
+=== "Description"
+
+ Adds an FPS overlay on the scene cards.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Jellyfin Exporter](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashJellyfinExport){target=_blank}
+
+=== "Description"
+
+ Restructures your Stash library to be Jellyfin compliant to better serve and populate metadata within your Jellyfin server.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashJellyfinExporter/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Markdown](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashMarkdown){target=_blank}
+
+=== "Description"
+
+ Adds markdown parsing to tag description fields
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Markdown screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markdown/tag-description.png){ loading=lazy }
+
+### [Stash Markers Autoscroll](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashMarkersAutoscroll){target=_blank}
+
+=== "Description"
+
+ Automatically scrolls markers page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Markers Autoscroll screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Markers%20Autoscroll/scroll-settings.png){ loading=lazy }
+
+### [Stash Matched Performer Scrape](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashPerformerMatchScrape){target=_blank}
+
+=== "Description"
+
+ Scrapes performers in bulk from ThePornDB and StashDB on exact name matches only.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashPerformerMatchScrape/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash New Performer Filter Button](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashNewPerformerFilterButton){target=_blank}
+
+=== "Description"
+
+ Adds a customizable button to the performers page. Links to a new performers filter by default.
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash New Performer Filter Button screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20New%20Performer%20Filter%20Button/performers-page.png){ loading=lazy }
+
+### [Stash Notes](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stashNotes){target=_blank}
+
+=== "Description"
+
+ Adds a button to the navigation bar which opens a small window for writing notes to your browser's local storage.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [QxxxGit](https://github.com/QxxxGit)
+
+=== "Screenshots"
+
+
+### [Stash Open Media Player](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashOpenMediaPlayer){target=_blank}
+
+=== "Description"
+
+ Open scene filepath links in an external media player
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+
+
+### [Stash Performer Audit Task Button](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerAuditTaskButton){target=_blank}
+
+=== "Description"
+
+ Adds a button to the performers page to run the audit plugin task
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer Audit Task Button screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Audit%20Task%20Button/performers-page.png){ loading=lazy }
+
+### [Stash Performer Custom Fields](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerCustomFields){target=_blank}
+
+=== "Description"
+
+ Adds custom fields to performers that are stored in performer details as JSON.
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/7dJx1qP/stash-plugins/blob/main/plugins/stashPerformerCustomFields/README.md){target=_blank}
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer Custom Fields screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view.png){ loading=lazy } ![Stash Performer Custom Fields screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-view-compact.png){ loading=lazy } ![Stash Performer Custom Fields screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/custom-fields-edit.png){ loading=lazy } ![Stash Performer Custom Fields screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Custom%20Fields/performer-details-edit.png){ loading=lazy }
+
+### [Stash Performer Image Cropper](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerImageCropper){target=_blank}
+
+=== "Description"
+
+ Adds an image cropper to performer page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer Image Cropper screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Image%20Cropper/performer-image-cropper.png){ loading=lazy }
+
+### [Stash Performer Image Extractor](https://github.com/serechops/Serechops-Stash/tree/main/plugins/PerformerImageExport){target=_blank}
+
+=== "Description"
+
+ Extracts all performers from your localdb to a local directory for easy editing.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Performer Markers Tab](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerMarkersTab){target=_blank}
+
+=== "Description"
+
+ Adds a Markers link to performer pages
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer Markers Tab screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Markers%20Tab/performer-page.png){ loading=lazy }
+
+### [Stash Performer Tagger Additions](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerTaggerAdditions){target=_blank}
+
+=== "Description"
+
+ Adds performer birthdate and url to tagger view. Makes clicking performer name open stash profile in new tab instead of current tab.
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer Tagger Additions screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20Tagger%20Additions/performer-tagger.png){ loading=lazy }
+
+### [Stash Performer URL Searchbox](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashPerformerURLSearchbox){target=_blank}
+
+=== "Description"
+
+ Adds a search by performer url textbox to the performers page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Performer URL Searchbox screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Performer%20URL%20Searchbox/performers-page.png){ loading=lazy }
+
+### [Stash Realbooru](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stashRealbooru){target=_blank}
+
+=== "Description"
+
+ Add tags based on the realbooru model, This works on individual images.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [cc1234475](https://github.com/cc1234475)
+
+=== "Screenshots"
+
+
+### [Stash Reels](https://github.com/Valkyr-JS/stash-plugins/tree/main/plugins/StashReels){target=_blank}
+
+=== "Description"
+
+ TikTok for Stash.
+
+=== "Source URL"
+
+ ```
+ https://valkyr-js.github.io/stash-plugins/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Valkyr-JS/StashReels/blob/main/README.md){target=_blank}
+
+=== "Author"
+
+ [Valkyr-JS](https://github.com/Valkyr-JS)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Galleries](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickGalleries){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the gallery cards to perform various quick tasks related to galleries.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/serechops/Serechops-Stash/blob/main/plugins/stashRightClickGalleries/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Images](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickImages){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the image cards to perform various quick tasks related to images.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Performer Merge](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickPerformerMerge){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the to perform various quick tasks related to settings.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Performers](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickPerformers){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the performer cards to perform various quick tasks related to performers.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Scenes](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickScenes){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the scene cards to perform various quick tasks related to scenes.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Settings](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickSettings){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the settings icon to perform various quick tasks related to settings.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Right Click Tags](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashRightClickTags){target=_blank}
+
+=== "Description"
+
+ Adds a custom right-click menu to the tag cards to perform various quick tasks related to tags.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Scene File Size](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashSceneFileSize){target=_blank}
+
+=== "Description"
+
+ Display file size on scene cards.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Scene Specs Overlay](https://github.com/serechops/Serechops-Stash/tree/main/plugins/sceneSpecsOverlay){target=_blank}
+
+=== "Description"
+
+ Hides all the scene specs overlay within the scene card and reveals them on hover.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Scene Tagger Additions](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashSceneTaggerAdditions){target=_blank}
+
+=== "Description"
+
+ Adds scene duration and filepath to tagger view.
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Scene Tagger Additions screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/config.png){ loading=lazy } ![Stash Scene Tagger Additions screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Additions/scenes-tagger.png){ loading=lazy }
+
+### [Stash Scene Tagger Colorizer](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashSceneTaggerColorizer){target=_blank}
+
+=== "Description"
+
+ Colorize scene tagger match results to show matching and mismatching scene data.
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Scene Tagger Colorizer screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/config.png){ loading=lazy } ![Stash Scene Tagger Colorizer screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/scenes-tagger.png){ loading=lazy } ![Stash Scene Tagger Colorizer screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Colorizer/tag-colors.png){ loading=lazy }
+
+### [Stash Scene Tagger Draft Submit](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashSceneTaggerDraftSubmit){target=_blank}
+
+=== "Description"
+
+ Adds button to Scene Tagger to submit draft to stashdb
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Scene Tagger Draft Submit screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Scene%20Tagger%20Draft%20Submit/scenes-tagger.png){ loading=lazy }
+
+### [Stash Set Stashbox Favorite Performers](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashSetStashboxFavoritePerformers){target=_blank}
+
+=== "Description"
+
+ Set Stashbox favorite performers according to stash favorites
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Set Stashbox Favorite Performers screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Set%20Stashbox%20Favorite%20Performers/performers-page.png){ loading=lazy }
+
+### [Stash Stashbox Scene Count](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashStashboxSceneCount){target=_blank}
+
+=== "Description"
+
+ Adds stashbox scene counts to performers and studios
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Stashbox Scene Count screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stashbox%20Scene%20Count/performer.png){ loading=lazy }
+
+### [Stash StashID Icon](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashStashIDIcon){target=_blank}
+
+=== "Description"
+
+ Adds checkmark icon to performer and studio cards that have a stashid
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash StashID Icon screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/performer-page.png){ loading=lazy } ![Stash StashID Icon screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/studio-page.png){ loading=lazy } ![Stash StashID Icon screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Icon/scene-page.png){ loading=lazy }
+
+### [Stash StashID Input](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashStashIDInput){target=_blank}
+
+=== "Description"
+
+ Adds input for entering new stash id to performer details page and studio page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash StashID Input screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/performer-page.png){ loading=lazy } ![Stash StashID Input screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20StashID%20Input/studio-page.png){ loading=lazy }
+
+### [Stash Stats](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashStats){target=_blank}
+
+=== "Description"
+
+ Adds stats to stats page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/7dJx1qP/stash-plugins/blob/main/plugins/stashStats/README.md){target=_blank}
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Stats screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Stats/stats-page.png){ loading=lazy }
+
+### [Stash Studio Logo Wall View](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashStudioLogoWallView){target=_blank}
+
+=== "Description"
+
+ Adds the studio logo on the scene cards in Wall view.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Tag Image Cropper](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashTagImageCropper){target=_blank}
+
+=== "Description"
+
+ Adds an image cropper to tag page
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Tag Image Cropper screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Tag%20Image%20Cropper/tag-image-cropper.png){ loading=lazy }
+
+### [Stash TimeStamps](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashTimestamps){target=_blank}
+
+=== "Description"
+
+ Create timestamps from pre-existing markers within the scene's details.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashTimestamps/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Stash Video Player AB Loop Time Input](https://github.com/7dJx1qP/stash-plugins/tree/main/plugins/stashVideoPlayerABLoopTimeInput){target=_blank}
+
+=== "Description"
+
+ Replaces the video player AB loop start and end buttons with time inputs
+
+=== "Source URL"
+
+ ```
+ https://7djx1qp.github.io/stash-plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [7dJx1qP](https://github.com/7dJx1qP)
+
+=== "Screenshots"
+ ![Stash Video Player AB Loop Time Input screenshot](https://raw.githubusercontent.com/7dJx1qP/stash-plugins/main/images/Stash%20Video%20Player%20AB%20Loop%20Time%20Input/ab-loop-time-input.png){ loading=lazy }
+
+### [stash-omnisearch](https://github.com/feederbox826/plugins/tree/main/plugins/stash-omnisearch){target=_blank}
+
+=== "Description"
+
+ search all the things on stash
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/stash-omnisearch/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [stash-open](https://github.com/feederbox826/plugins/tree/main/plugins/stash-open){target=_blank}
+
+=== "Description"
+
+ Opens media files in local media player
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/stash-open/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [StashAppAndroidTV Companion](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stashAppAndroidTvCompanion){target=_blank}
+
+=== "Description"
+
+ A companion plugin for StashAppAndroidTV
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [damontecres](https://github.com/damontecres)
+
+=== "Screenshots"
+
+
+### [stashdb performer gallery](https://github.com/stashapp/CommunityScripts/tree/main/plugins/stashdb-performer-gallery){target=_blank}
+
+=== "Description"
+
+ Automatically download performer images from stashdb or other stash-boxes. Add the [Stashbox Performer Gallery] tag to a performer and it will create a gallery of images from that stash-box database. Apply the tag [Set Profile Image] to an image to set it as the profile image of that performer. Note you will need to configure the download path and add this as a path under settings > library
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [Tweeticoats](https://github.com/Tweeticoats)
+
+=== "Screenshots"
+
+
+### [StashDB Tag Import](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashDBTagImport){target=_blank}
+
+=== "Description"
+
+ Import StashDB's list of Tags for your Stash.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDBTagImport/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [stashdb-api](https://github.com/feederbox826/plugins/tree/main/plugins/stashdb-api){target=_blank}
+
+=== "Description"
+
+ StashDB API client
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/stashdb-api/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [stashdb-fullimg](https://github.com/feederbox826/plugins/tree/main/plugins/stashdb-fullimg){target=_blank}
+
+=== "Description"
+
+ Download full-size images from StashDB
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/stashdb-fullimg/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [stashDisable](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashDisableAll/stashDisable){target=_blank}
+
+=== "Description"
+
+ stashDisable meta-package
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashDisableAll/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [stashlist-sync](https://github.com/feederbox826/stashlist/tree/main/plugins/stashlist-sync){target=_blank}
+
+=== "Description"
+
+ Sync stashIDs to stashlist history
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/stashlist/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/stashlist/blob/main/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [stashTagPerformerImage](https://github.com/serechops/Serechops-Stash/tree/main/plugins/stashTagPerformerImage){target=_blank}
+
+=== "Description"
+
+ Checks parent directory of image on Image.Update.Post and compares to any existing performers in the db. Updates that image with the related performer.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/stashTagPerformerImage/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Studio background shadow](https://github.com/feederbox826/plugins/tree/main/plugins/studio-img-bg){target=_blank}
+
+=== "Description"
+
+ Add drop shadows to studio icons for visibility
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/studio-img-bg/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+ ![Studio background shadow screenshot](https://raw.githubusercontent.com/feederbox826/plugins/main/docs/studio-image-bg_after.png){ loading=lazy }
+
+### [Studio Top Performer](https://github.com/serechops/Serechops-Stash/tree/main/plugins/studioTopPerformer){target=_blank}
+
+=== "Description"
+
+ Adds a Queen icon with the top performer listed in the studio cards as determined by most scenes starred in from that particular studio.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/plugins/studioTopPerformer/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Tag Graph](https://github.com/stg-annon/StashScripts/tree/main/plugins/tagGraph){target=_blank}
+
+=== "Description"
+
+ Interactive tag graph with vis.js, to view go to http://localhost:9999/plugin/tagGraph/assets/graph/
+
+=== "Source URL"
+
+ ```
+ https://stg-annon.github.io/StashScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stg-annon/StashScripts/blob/main/plugins/tagGraph/README.md){target=_blank}
+
+=== "Author"
+
+ [stg-annon](https://github.com/stg-annon)
+
+=== "Screenshots"
+
+
+### [Tag Scenes From Performer Tags](https://github.com/stashapp/CommunityScripts/tree/main/plugins/tagScenesWithPerfTags){target=_blank}
+
+=== "Description"
+
+ tags scenes with performer tags.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [Dankonite](https://github.com/Dankonite)
+
+=== "Screenshots"
+
+
+### [tag-filter](https://github.com/feederbox826/plugins/tree/main/plugins/tag-filter){target=_blank}
+
+=== "Description"
+
+ Filter out and hide meta-tags
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/tag-filter/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [tag-graph-js](https://github.com/feederbox826/plugins/tree/main/plugins/tag-graph-js){target=_blank}
+
+=== "Description"
+
+ Interactive tag graph with d3.js
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/tag-graph-js/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [tag-video](https://github.com/feederbox826/plugins/tree/main/plugins/tag-video){target=_blank}
+
+=== "Description"
+
+ Add <video> support to tag images
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [tagger-img-res](https://github.com/feederbox826/plugins/tree/main/plugins/tagger-img-res){target=_blank}
+
+=== "Description"
+
+ Adds resolutions to all tagger images
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Tetrax Userscript Library](https://github.com/tetrax-10/stash-stuffs/tree/main/Plugins/TetraxUserscriptLibrary){target=_blank}
+
+=== "Description"
+
+ Utility library for Tetrax userscripts
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+
+
+### [The Porn DB Markers](https://github.com/stashapp/CommunityScripts/tree/main/plugins/TPDBMarkers){target=_blank}
+
+=== "Description"
+
+ Sync Markers from The Porn DB aka theporndb.net
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [Tweeticoats](https://github.com/Tweeticoats)
+
+=== "Screenshots"
+
+
+### [Theme - colorPalette](https://github.com/stashapp/CommunityScripts/tree/main/plugins/Theme-ColorPalette){target=_blank}
+
+=== "Description"
+
+ Based on the default theme, change the overall color of the page by setting the hue value. Make minor changes to the remaining styles.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/Theme-ColorPalette/README.md){target=_blank}
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [Theme Switch](https://github.com/stashapp/CommunityScripts/tree/main/plugins/themeSwitch){target=_blank}
+
+=== "Description"
+
+ Theme and CSS script manager located in main menu bar top right.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/themeSwitch/README.MD){target=_blank}
+
+=== "Author"
+
+ [elkorol](https://github.com/elkorol)
+
+=== "Screenshots"
+ ![Theme Switch screenshot](/assets/plugins/themeSwitch/1.png){ loading=lazy } ![Theme Switch screenshot](/assets/plugins/themeSwitch/2.png){ loading=lazy }
+
+### [Timestamp Trade](https://github.com/stashapp/CommunityScripts/tree/main/plugins/timestampTrade){target=_blank}
+
+=== "Description"
+
+ Sync Markers with timestamp.trade, a new database for sharing markers.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/timestampTrade/README.md){target=_blank}
+
+=== "Author"
+
+ [Tweeticoats](https://github.com/Tweeticoats)
+
+=== "Screenshots"
+
+
+### [titleFromFilename](https://github.com/stashapp/CommunityScripts/tree/main/plugins/titleFromFilename){target=_blank}
+
+=== "Description"
+
+ Set a scene's title from it's filename
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/plugins/titleFromFilename/README.md){target=_blank}
+
+=== "Author"
+
+ [bnkai](https://github.com/bnkai)
+
+=== "Screenshots"
+
+
+### [titleobserver](https://github.com/feederbox826/plugins/tree/main/plugins/titleobserver){target=_blank}
+
+=== "Description"
+
+ Adds an event listener for title changes
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Valkyr Scene Cards](https://github.com/Valkyr-JS/stash-plugins/tree/main/plugins/ValkyrSceneCards){target=_blank}
+
+=== "Description"
+
+ A rework of the scene card component for Stash.
+
+=== "Source URL"
+
+ ```
+ https://valkyr-js.github.io/stash-plugins/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Valkyr-JS/ValkyrSceneCards/blob/main/README.md){target=_blank}
+
+=== "Author"
+
+ [Valkyr-JS](https://github.com/Valkyr-JS)
+
+=== "Screenshots"
+ ![Valkyr Scene Cards screenshot](/assets/plugins/ValkyrSceneCards/1.png){ loading=lazy } ![Valkyr Scene Cards screenshot](/assets/plugins/ValkyrSceneCards/2.png){ loading=lazy }
+
+### [VideoScrollWheel](https://github.com/stashapp/CommunityScripts/tree/main/plugins/VideoScrollWheel){target=_blank}
+
+=== "Description"
+
+ Adds functionality to change volume/time in scene video player by hovering over left/right side of player and scrolling with mouse scrollwheel. Scroll while hovering on left side to adjust volume, scroll on right side to skip forward/back.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [WeedLordVegeta420](https://github.com/WeedLordVegeta420)
+
+=== "Screenshots"
+
+
+### [Visage](https://github.com/stashapp/CommunityScripts/tree/main/plugins/visage){target=_blank}
+
+=== "Description"
+
+ Use facial Recognition To Lookup Performers.
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [cc1234475](https://github.com/cc1234475)
+
+=== "Screenshots"
+
+
+### [vjs-mmb-fullscreen](https://github.com/feederbox826/plugins/tree/main/plugins/vjs-mmb-fullscreen){target=_blank}
+
+=== "Description"
+
+ VideoJS middle mouse button fullscreen
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/vjs-mmb-fullscreen/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [vjs-shortcut](https://github.com/feederbox826/plugins/tree/main/plugins/vjs-shortcut){target=_blank}
+
+=== "Description"
+
+ Add YouTube keyboard shortcuts to VideoJS
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/vjs-shortcut/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [Watched Video Icon](https://github.com/feederbox826/plugins/tree/main/plugins/watched-video){target=_blank}
+
+=== "Description"
+
+ Adds icon and css class to watched videos
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/plugins/blob/main/plugins/watched-video/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
+
+### [wfke](https://github.com/feederbox826/plugins/tree/main/plugins/wfke){target=_blank}
+
+=== "Description"
+
+ wait for key elements
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/plugins/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://feederbox.cc)
+
+=== "Screenshots"
+
diff --git a/docs/scripts/index.md b/docs/scripts/index.md
new file mode 100644
index 00000000..89e3eea0
--- /dev/null
+++ b/docs/scripts/index.md
@@ -0,0 +1,10 @@
+---
+title: Scripts
+---
+
+!!! info
+ 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.
+
+Scripts are standalone programs that can interact with Stash either through GraphQL queries, custom Javascript or by directly editing Stash database or external files.
+
+To install a script follow the script's install instructions.
\ No newline at end of file
diff --git a/docs/scripts/list.md b/docs/scripts/list.md
new file mode 100644
index 00000000..d0393d17
--- /dev/null
+++ b/docs/scripts/list.md
@@ -0,0 +1,206 @@
+---
+title: List of scripts
+---
+
+??? tip "stash-git-index"
+ Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing).
+
+??? tip "Script no longer works"
+ If you found that script 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.
+
+### [AddMarkerOnO](https://github.com/rosa-umineko/CommunityScripts/blob/main/scripts/AddMarkerOnO.js){target=_blank}
+
+=== "Description"
+
+ Will auto-generate a marker when the SceneAddO event is trigger
+
+=== "Author"
+
+ [rosa-umineko](https://github.com/rosa-umineko){target=_blank}
+
+=== "Screenshots"
+
+### [blurryCardBackground](https://github.com/philpw99/StashCustomJavascripts/blob/main/blurryCardBackground.js){target=_blank}
+
+=== "Description"
+
+ Add blurry background to scene/movie/gallery/image/studio.
+
+=== "Author"
+
+ [philpw99](https://github.com/philpw99){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://docs.stashapp.cc/assets/add-ons/blurryCardBackground.png)
+
+### [FilenamePerformersToCSV](https://github.com/ALonelyJuicebox/FilenamePerformersToCSV){target=_blank}
+
+=== "Description"
+
+ Parse performer names from your media filenames into CSV files for batch import into Stash!
+
+=== "Author"
+
+ [ALonelyJuicebox](https://github.com/ALonelyJuicebox){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://raw.githubusercontent.com/ALonelyJuicebox/FilenamePerformersToCSV/refs/heads/main/filenametoperformer.png)
+
+### [Get-ProfilePictures](https://github.com/MinasukiHikimuna/MidnightRider-Stash/blob/main/scripts/Get-ProfilePictures.ps1){target=_blank}
+
+=== "Description"
+
+ Get-ProfilePictures
+
+=== "Author"
+
+ [MinasukiHikimuna](https://github.com/MinasukiHikimuna){target=_blank}
+
+=== "Screenshots"
+
+### [Kodi helper](https://github.com/stashapp/CommunityScripts/tree/main/scripts/kodi-helper){target=_blank}
+
+=== "Description"
+
+ Generates nfo and strm for use with Kodi.
+
+=== "Author"
+
+ [WithoutPants](https://github.com/WithoutPants){target=_blank}
+
+=== "Screenshots"
+
+### [OFMetadataToStash](https://github.com/ALonelyJuicebox/OFMetadataToStash){target=_blank}
+
+=== "Description"
+
+ OnlyFans metadata import tool for Stash, written in Powershell.
+
+ - Simple to use with a straightforward command line based UI!
+ - Script can auto-associate scenes/images with the appropriate OnlyFans performer(s) and studio, in batch!
+ - Built-in utility for completely scrubbing and sanitizing OnlyFans metadata databases
+
+=== "Author"
+
+ [ALonelyJuicebox](https://github.com/ALonelyJuicebox){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://docs.stashapp.cc/assets/add-ons/OnlyFans_Scraper.png)
+ ![](https://raw.githubusercontent.com/ALonelyJuicebox/OFMetadataToStash/refs/heads/main/readme_assets/oldtonew.png)
+
+### [plex-to-stash-ratings](https://github.com/oikmeg/plex-to-stash-ratings){target=_blank}
+
+=== "Description"
+
+ Transfer scene rating and view count from Plex to Stash.
+
+=== "Author"
+
+ [oikmeg](https://github.com/oikmeg){target=_blank}
+
+=== "Screenshots"
+
+### [pwPlayer.js - Scene Card Quick Player](https://github.com/philpw99/StashCustomJavascripts/blob/main/pwPlayer.js){target=_blank}
+
+=== "Description"
+
+ This Javascript will create a "Play" button in each scene card. You can click on it and the video for that scene will be played right away. Click on the video again, then you are back to the scene list.
+
+=== "Author"
+
+ [philpw99](https://github.com/philpw99){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://user-images.githubusercontent.com/22040708/211264163-5f25f566-8217-4334-9df6-ca742a5e92c5.png)
+
+### [SQLITE Renamer for Stash](https://github.com/stashapp/CommunityScripts/tree/main/scripts/Sqlite_Renamer){target=_blank}
+
+=== "Description"
+
+ Using metadata from your database (SQLITE) to rename your file.
+
+=== "Author"
+
+ [Belleyy](https://github.com/Belleyy){target=_blank}
+
+=== "Screenshots"
+
+### [Stash Watcher](https://github.com/stashapp/CommunityScripts/tree/main/scripts/stash-watcher){target=_blank}
+
+=== "Description"
+
+ Stash Watcher is a service that watches your Stash library directories for changes and then triggers a Metadata Scan when new files are added to those directories. It then waits a period of time before triggering another scan to keep Stash from constantly scanning if you're making many changes. Note that updates are watched during that window; the update is merely delayed.
+
+=== "Author"
+
+ [DuctTape42](https://github.com/DuctTape42){target=_blank}
+
+=== "Screenshots"
+
+### [stashapp-tag-importer](https://github.com/soundchaser128/stashapp-tag-importer){target=_blank}
+
+=== "Description"
+
+ Creates tags and aliases, resolves tag conflicts, and updates tag titles and descriptions from Stashbox (StashDB) to your local Stash instance. It can be run periodically to perform a one way sync to keep your Stash instance up to date with Stashbox (StashDB).
+
+=== "Author"
+
+ [soundchaser128](https://github.com/soundchaser128){target=_blank}
+
+=== "Screenshots"
+
+### [StashGalleryUpdate](https://github.com/Darklyter/StashGalleryUpdate){target=_blank}
+
+=== "Description"
+
+ Dumb little script to match and update Stash galleries from scenes
+
+=== "Author"
+
+ [Darklyter](https://github.com/Darklyter){target=_blank}
+
+=== "Screenshots"
+
+### [StashStudioSync](https://github.com/Stash-KennyG/StashStudioSync){target=_blank}
+
+=== "Description"
+
+ An easy way to query a stashbox GQL endpoint and import any unknown studio IDs.
+
+=== "Author"
+
+ [Stash-KennyG](https://github.com/Stash-KennyG){target=_blank}
+
+=== "Screenshots"
+
+### [StashTagSkins](https://github.com/Stash-KennyG/StashTagSkins){target=_blank}
+
+=== "Description"
+
+ Used to quickly apply and change themes of tags for Stash.
+
+=== "Author"
+
+ [Stash-KennyG](https://github.com/Stash-KennyG){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://docs.stashapp.cc/assets/add-ons/StashTagSkins_Sample.png)
+ ![](https://docs.stashapp.cc/assets/add-ons/StashTagSkins_Icons.png)
+ ![](https://docs.stashapp.cc/assets/add-ons/StashTagSkins_Hamster.png)
+
+### [StashVideohasherNode](https://github.com/Darklyter/StashVideohasherNode){target=_blank}
+
+=== "Description"
+
+ This is a very simple script that can be run on multiple systems to process a large Stash import of scenes. Instead of running cover and phash generation tasks on the Stash server itself, this script will allow you to do the same thing on as many computers as you would like, with all of the nodes contributing back to the Stash server.
+
+=== "Author"
+
+ [Darklyter](https://github.com/Darklyter){target=_blank}
+
+=== "Screenshots"
\ No newline at end of file
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
new file mode 100644
index 00000000..30930f38
--- /dev/null
+++ b/docs/stylesheets/extra.css
@@ -0,0 +1,21 @@
+@keyframes heart {
+ 0%, 40%, 80%, 100% {
+ transform: scale(1);
+ }
+ 20%, 60% {
+ transform: scale(1.15);
+ }
+}
+.heart {
+ animation: heart 1000ms infinite;
+ color: #EE0F0F;
+}
+.md-nav__item svg {
+ width: 18px !important;
+ height: 18px !important;
+}
+/*
+.md-grid {
+ max-width: 81rem;
+}
+*/
diff --git a/docs/themes/index.md b/docs/themes/index.md
new file mode 100644
index 00000000..76443c78
--- /dev/null
+++ b/docs/themes/index.md
@@ -0,0 +1,30 @@
+---
+title: Themes
+---
+
+!!! info
+ 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.
+
+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.
+
+Themes can be installed either via plugin or as Custom CSS.
+
+## Installing via plugin
+
+Plugins can be installed and managed from the :fontawesome-solid-gear: **Settings** > **Plugins** page.
+
+Plugins are installed using the **Available Plugins** section. The **Community (stable)** source is configured by default that has several themes.
+
+Installed plugins can be updated or uninstalled from the **Installed Plugins** section.
+
+### Adding sources
+
+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**.
+
+## Installing via Custom CSS
+
+1. Find a theme from the list and copy the content of .css file.
+1. In Stash, go to :fontawesome-solid-gear: **Settings** > **Interface** and scroll down to Custom CSS heading.
+1. Make sure **Custom CSS enabled** is checked.
+1. Click on **Edit** under **Custom CSS** and then paste the CSS code into the text box.
+1. You will need to force-reload ++shift+f5++ in order to see the theme.
\ No newline at end of file
diff --git a/docs/themes/list.md b/docs/themes/list.md
new file mode 100644
index 00000000..90837bf7
--- /dev/null
+++ b/docs/themes/list.md
@@ -0,0 +1,761 @@
+# List of themes
+
+
+### [alternative-tag-layout](https://github.com/feederbox826/themes/tree/main/themes/alternative-tag-layout){target=_blank}
+
+=== "Description"
+
+ Changes the tags layout to show more images, and details on hover
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/themes/blob/main/themes/alternative-tag-layout/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [direct-stream](https://github.com/feederbox826/themes/tree/main/themes/direct-stream){target=_blank}
+
+=== "Description"
+
+ Adds styling to settings to indicate direct stream
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/themes/blob/main/themes/direct-stream/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [Dracula Theme](https://github.com/uncertainmongoose/dracula-for-stash/tree/main/themes/dracula){target=_blank}
+
+=== "Description"
+
+ A dark theme for Stash based on the popular Dracula theme.
+
+=== "Source URL"
+
+ ```
+ https://uncertainmongoose.github.io/dracula-for-stash/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [UncertainMongoose](https://github.com/UncertainMongoose)
+
+=== "Screenshots"
+
+
+### [Glassy - A Window to Your Collection](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - A Window to Your Collection){target=_blank}
+
+=== "Description"
+
+ A Stash Theme
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Font Overhaul](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Font Overhaul){target=_blank}
+
+=== "Description"
+
+ A Stash Theme
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Front Page Animations and Blur](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Front Page Animations and Blur){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Marker Wall Redesign](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Marker Wall Redesign){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Performer Scene Card Details Redesign](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Performer Scene Card Details Redesign){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Scene and Movie Card Redesign](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Scene and Movie Card Redesign){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Scene and Movie Card Redesign - No Animated Titles](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Scene and Movie Card Redesign - No Animated Titles){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Scene Player-Details 60/40](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Scene Player-Details 60-40){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Scene Player-Details Reversed](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Scene Player-Details Reversed){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Scene Player-Details Reversed 60/40](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Scene Player-Details Reversed 60-40){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Smaller Performer Cards on Main Page](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Smaller Performer Cards on Main Page){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Smaller Performer Image Cards](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Smaller Performer Image Cards){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy - Video-Res Icons](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Video-Res Icons){target=_blank}
+
+=== "Description"
+
+ A Glassy Add-On Module.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy Images](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Images){target=_blank}
+
+=== "Description"
+
+ Images for A Stash Theme
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [Glassy Installer](https://github.com/serechops/Serechops-Stash/tree/main/themes/Glassy - Installer){target=_blank}
+
+=== "Description"
+
+ Glassy meta-package for requirements.
+
+=== "Source URL"
+
+ ```
+ https://serechops.github.io/Serechops-Stash/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Serechops/Serechops-Stash/blob/main/themes/Glassy/README.md){target=_blank}
+
+=== "Author"
+
+ [serechops](https://github.com/serechops)
+
+=== "Screenshots"
+
+
+### [hide-donate](https://github.com/feederbox826/themes/tree/main/themes/hide-donate){target=_blank}
+
+=== "Description"
+
+ Hide the Donate button.
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/themes/blob/main/themes/hide-donate/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [hide-ocount](https://github.com/feederbox826/themes/tree/main/themes/hide-ocount){target=_blank}
+
+=== "Description"
+
+ Hide O-Count and O-Count trakcers
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [more-studio-row](https://github.com/feederbox826/themes/tree/main/themes/more-studio-row){target=_blank}
+
+=== "Description"
+
+ Display more studio per row
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/themes/blob/main/themes/more-studio-row/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [performer-grid](https://github.com/feederbox826/themes/tree/main/themes/performer-grid){target=_blank}
+
+=== "Description"
+
+ Aligns performer details in a grid
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/feederbox826/themes/blob/main/themes/performer-grid/README.md){target=_blank}
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
+
+### [Theme - BlackHole](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-BlackHole){target=_blank}
+
+=== "Description"
+
+ BlackHole Theme for Stash by BViking78
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ BViking78
+
+=== "Screenshots"
+
+
+### [Theme - ModernDark](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-ModernDark){target=_blank}
+
+=== "Description"
+
+ ModernDark Theme for Stash by cj13
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [cj13](https://github.com/cj12312021)
+
+=== "Screenshots"
+
+
+### [Theme - NeonDark](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-NeonDark){target=_blank}
+
+=== "Description"
+
+ NeonDark Theme for Stash by Dankonite
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ Dankonite
+
+=== "Screenshots"
+
+
+### [Theme - Night](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-Night){target=_blank}
+
+=== "Description"
+
+ Night Theme for Stash (unknown author)
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ No Author
+
+=== "Screenshots"
+
+
+### [Theme - Plex](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-Plex){target=_blank}
+
+=== "Description"
+
+ Plex Theme for Stash by Fidelio 2020
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/themes/Theme-Plex/README.md){target=_blank}
+
+=== "Author"
+
+ Fidelio
+
+=== "Screenshots"
+
+
+### [Theme - Plex Better Styles](https://github.com/tetrax-10/stash-stuffs/tree/main/themes/PlexBetterStyles){target=_blank}
+
+=== "Description"
+
+ A modified version of Stash-Plex theme
+
+=== "Source URL"
+
+ ```
+ https://tetrax-10.github.io/stash-stuffs/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/Tetrax-10/stash-stuffs/tree/main#1-plex-better-styles){target=_blank}
+
+=== "Author"
+
+ [tetrax-10](https://github.com/Tetrax-10)
+
+=== "Screenshots"
+ ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/galleries.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/performers.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/images.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/scenes.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/settings.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/help.png){ loading=lazy } ![Theme - Plex Better Styles screenshot](https://raw.githubusercontent.com/Tetrax-10/stash-stuffs/main/assets/plex-better-styles/tags.png){ loading=lazy }
+
+### [Theme - Pornhub](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-PornHub){target=_blank}
+
+=== "Description"
+
+ PornHub Theme for Stash by neurokinin
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ ronilaukkarinen
+
+=== "Screenshots"
+
+
+### [Theme - Pulsar](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-Pulsar){target=_blank}
+
+=== "Description"
+
+ Plex Theme for Stash by Fonzie 2020-21
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ Fonzie
+
+=== "Screenshots"
+
+
+### [Theme - PulsarLight](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-PulsarLight){target=_blank}
+
+=== "Description"
+
+ Plex Theme for Stash by Fonzie 2021
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ Fonzie
+
+=== "Screenshots"
+
+
+### [Theme - Rounded Yellow](https://github.com/stashapp/CommunityScripts/tree/main/themes/Theme-RoundedYellow){target=_blank}
+
+=== "Description"
+
+ Theme with rounded corners and yellow accents
+
+=== "Source URL"
+
+ ```
+ https://stashapp.github.io/CommunityScripts/stable/index.yml
+ ```
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/themes/Theme-RoundedYellow/README.md){target=_blank}
+
+=== "Author"
+
+ Fonzie
+
+=== "Screenshots"
+
+
+### [wrap-subtag](https://github.com/feederbox826/themes/tree/main/themes/wrap-subtag){target=_blank}
+
+=== "Description"
+
+ Wraps detail values (subtags)
+
+=== "Source URL"
+
+ ```
+ https://feederbox826.github.io/themes/main/index.yml
+ ```
+
+=== "README"
+
+ No README available
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826)
+
+=== "Screenshots"
+
diff --git a/docs/userscripts/index.md b/docs/userscripts/index.md
new file mode 100644
index 00000000..e1500cd5
--- /dev/null
+++ b/docs/userscripts/index.md
@@ -0,0 +1,16 @@
+---
+title: Userscripts
+---
+
+!!! info
+ 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.
+
+Userscripts are programs written in Javascript that modifies web pages to improve browsing with new features, formatting and more.
+
+## Install
+
+To install the userscript you will need a browser extension such as:
+
+- [Violentmonkey](https://violentmonkey.github.io){:target="_blank"}
+- [Tampermonkey](https://www.tampermonkey.net){:target="_blank"}
+- [Greasemonkey](https://www.greasespot.net){:target="_blank"}
\ No newline at end of file
diff --git a/docs/userscripts/list.md b/docs/userscripts/list.md
new file mode 100644
index 00000000..45b6cc3e
--- /dev/null
+++ b/docs/userscripts/list.md
@@ -0,0 +1,261 @@
+---
+title: List of userscripts
+---
+
+??? tip "stash-git-index"
+ Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing).
+
+??? tip "Userscript no longer works"
+ If you found that userscript 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.
+
+## Stash userscripts
+
+??? tip "Compatability"
+ Make sure your instance URL is declared in `@match`.
+
+### [stashCreateAll](https://github.com/Serechops/Serechops-Stash/blob/main/Stash_Userscripts/stashCreateAll.user.js){target=_blank}
+
+=== "Description"
+
+ Automate batch creation and tagging
+
+=== "Author"
+
+ [Serechops](https://github.com/Serechops){target=_blank}
+
+=== "Screenshots"
+
+### [Performer Image Carousel](https://github.com/Serechops/Serechops-Stash/blob/main/Stash_Userscripts/performerImageCarousel.user.js){target=_blank}
+
+=== "Description"
+
+ Displays a carousel of performer images in the header.
+
+=== "Author"
+
+ [Serechops](https://github.com/Serechops){target=_blank}
+
+=== "Screenshots"
+
+## stash-box userscripts
+
+??? tip "stash-box compatability"
+ Sometimes just updating `@match` is enough to make the userscript to work on a different stash-box instance. But it's not a guarantee.
+
+### [db-noto-color](https://github.com/feederbox826/userscripts/blob/main/userscript/db-noto-color.user.js){target=_blank}
+
+=== "Description"
+
+ Adds Noto Color Emoji to stash-box instances
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [FansDB Submission Helper](https://github.com/stashapp/CommunityScripts/blob/main/userscripts/FansDB_Submission_Helper/fansdb_submission_helper.user.js){target=_blank}
+
+=== "Description"
+
+ - Adds button to add all unmatched aliases to performer
+ - Adds button to add all unmatched urls to performer
+ - Adds button to add all unmatched measurements to performer (if they match expected formats)
+ - Convert unmatched urls from regular strings to linked strings
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/userscripts/FansDB_Submission_Helper/README.md)
+
+=== "Author"
+
+ [mmenanno](https://github.com/mmenanno){target=_blank}, [DogmaDragon](https://github.com/DogmaDragon){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://user-images.githubusercontent.com/1358708/178110989-3bc33371-e3bb-4064-8851-a9356b5a4882.png){ loading=lazy }
+ ![](https://camo.githubusercontent.com/11a63da488ee722aa46c573257b7350728f9baae33512e18f97bebd79e070d84/68747470733a2f2f6d6f6e6f736e61702e636f6d2f696d6167652f7034706b6371724b5759703356357175486c354c574f415a5547336f4150){ loading=lazy }
+
+### [StashDB Submission Helper](https://github.com/stashapp/CommunityScripts/blob/main/userscripts/StashDB_Submission_Helper/stashdb_submission_helper.user.js){target=_blank}
+
+=== "Description"
+
+ - Adds button to add all unmatched aliases to performer
+ - Adds button to add all unmatched urls to performer
+ - Adds button to add all unmatched measurements to performer (if they match expected formats)
+ - Convert unmatched urls from regular strings to linked strings
+
+=== "README"
+
+ View [README](https://github.com/stashapp/CommunityScripts/blob/main/userscripts/StashDB_Submission_Helper/README.md)
+
+=== "Author"
+
+ [mmenanno](https://github.com/mmenanno){target=_blank}
+
+=== "Screenshots"
+
+ ![](https://user-images.githubusercontent.com/1358708/178110989-3bc33371-e3bb-4064-8851-a9356b5a4882.png){ loading=lazy }
+ ![](https://camo.githubusercontent.com/11a63da488ee722aa46c573257b7350728f9baae33512e18f97bebd79e070d84/68747470733a2f2f6d6f6e6f736e61702e636f6d2f696d6167652f7034706b6371724b5759703356357175486c354c574f415a5547336f4150){ loading=lazy }
+
+### [stashdb-diff](https://github.com/feederbox826/userscripts/blob/main/userscript/stashdb-diff.user.js){target=_blank}
+
+=== "Description"
+
+ add character-by-character diff for stashdb
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [stashdb-link-chip](https://github.com/feederbox826/userscripts/blob/main/userscript/stashdb-link-chip.user.js){target=_blank}
+
+=== "Description"
+
+ add chips to links in edit queue
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [stashdb-relative-date](https://github.com/feederbox826/userscripts/blob/main/userscript/stashdb-relative-date.user.js){target=_blank}
+
+=== "Description"
+
+ adds relative dates to stashdb
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [stashdb-rm](https://github.com/feederbox826/userscripts/blob/main/userscript/stashdb-rm.user.js){target=_blank}
+
+=== "Description"
+
+ Remove scenes from loaded studios on stashdb.org
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [StashBox Notifications](https://github.com/S3L3CT3DLoves/UserScripts/blob/main/StashBox/notifications.user.js){target=_blank}
+
+=== "Description"
+
+ Notifications for StashBox !
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank}
+
+=== "Screenshots"
+
+### [Studio Image Blur for StashDB](https://github.com/Serechops/Serechops-Stash/blob/main/StashDB%20Userscript/Studio%20Image%20Blur%20for%20StashDB-0.1.user.js){target=_blank}
+
+=== "Description"
+
+ Blurs images from specific studios on StashDB scene cards, based on studio name and img src
+
+=== "Author"
+
+ [Serechops](https://github.com/Serechops){target=_blank}
+
+=== "Screenshots"
+
+## Utility userscripts
+
+There are some userscripts that might be useful to Stash users, but does not directly involve Stash or stash-box instances.
+
+### [twitter-media-unblur](https://github.com/feederbox826/userscripts/blob/main/userscript/twitter-media-unblur.user.js){target=_blank}
+
+=== "Description"
+
+ unblur all twitter sensitive media post
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [PMVHaven AutoDL](https://github.com/S3L3CT3DLoves/UserScripts/blob/main/scripts/PMVHaven-Auto-DL.user.js){target=_blank}
+
+=== "Description"
+
+ Dashboard to simplify PMV downloading on PMVHaven
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank}
+
+=== "Screenshots"
+
+### [SpankBang AutoDL](https://github.com/S3L3CT3DLoves/UserScripts/blob/main/scripts/SB-Auto-DL.user.js){target=_blank}
+
+=== "Description"
+
+ Dashboard to download all a user's videos on SpankBang
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank}
+
+=== "Screenshots"
+
+### [SpankBang Frontend Scraper](https://github.com/S3L3CT3DLoves/UserScripts/blob/main/scripts/SB-Frontend-Scraper.user.js){target=_blank}
+
+=== "Description"
+
+ Use in Stash to scrape Spankbang from the browser, bypassing cloudflare issues
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank}
+
+=== "Screenshots"
+
+### [LifeSelector unblur](https://github.com/feederbox826/userscripts/blob/main/userscript/ls-unblur.user.js){target=_blank}
+
+=== "Description"
+
+ Unblur LifeSelector website
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [redgifs autosettings](https://github.com/feederbox826/userscripts/blob/main/userscript/redgifs-auto.user.js){target=_blank}
+
+=== "Description"
+
+ Auto Unmute / Play / HD redgifs
+
+=== "Author"
+
+ [feederbox826](https://github.com/feederbox826){target=_blank}
+
+=== "Screenshots"
+
+### [Stash-TMDB Sync/Scraper](https://github.com/W0lfieW0lf/StashApp-Tools/blob/main/Userscripts/Stash-TMDB_SyncButton%20.js){target=_blank}
+
+=== "Description"
+
+ Sync Button in TMDB Site.to Create Movie/Performer in Stash and Update performer missing info.
+
+=== "Author"
+
+ [W0lfieW0lf](https://github.com/W0lfieW0lf){target=_blank}
+
+=== "Screenshots"
+ ![](https://raw.githubusercontent.com/W0lfieW0lf/StashApp-Tools/refs/heads/main/docs/images/Stash-TMDB_SyncButton/stash_tmdb_movie.png)
+ ![](https://raw.githubusercontent.com/W0lfieW0lf/StashApp-Tools/refs/heads/main/docs/images/Stash-TMDB_SyncButton/stash_tmdb_person.png)
\ No newline at end of file
diff --git a/docs/utilities/index.md b/docs/utilities/index.md
new file mode 100644
index 00000000..f78efad6
--- /dev/null
+++ b/docs/utilities/index.md
@@ -0,0 +1,10 @@
+---
+title: Utilities
+---
+
+!!! info
+ 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.
+
+Utilities are other external applications that utilise or interact with Stash in some way.
+
+To install follow the utilities install instructions.
\ No newline at end of file
diff --git a/docs/utilities/list.md b/docs/utilities/list.md
new file mode 100644
index 00000000..df80f577
--- /dev/null
+++ b/docs/utilities/list.md
@@ -0,0 +1,135 @@
+---
+title: List of utilities
+---
+
+??? tip "stash-git-index"
+ Exhaustive list of git repositories related to Stash [Google Sheets document](https://docs.google.com/spreadsheets/d/1yudaRDo_3ZOVivviffvQiSGU_gNpgkG4kIYrJP6DHP4/edit?usp=sharing).
+
+??? tip "Utility no longer works"
+ 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.
+
+### [clip-mash](https://github.com/soundchaser128/clip-mash){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [soundchaser128](https://github.com/soundchaser128){target=_blank}
+
+=== "Screenshots"
+
+### [Stash App for Android TV](https://github.com/damontecres/StashAppAndroidTV){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [damontecres](https://github.com/damontecres){target=_blank}
+
+=== "Screenshots"
+
+ ![](/assets/add-ons/StashAppAndroidTV-1.png)
+ ![](/assets/add-ons/StashAppAndroidTV-2.png)
+ ![](/assets/add-ons/StashAppAndroidTV-3.png)
+
+### [stash-compilation-maker](https://github.com/soundchaser128/stash-compilation-maker){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [soundchaser128](https://github.com/soundchaser128){target=_blank}
+
+=== "Screenshots"
+
+### [stash-qmt](https://github.com/PokerFacowaty/stash-qmt){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [PokerFacowaty](https://github.com/PokerFacowaty){target=_blank}
+
+=== "Screenshots"
+
+ ![](/assets/add-ons/stash-qmt-1.png)
+ ![](/assets/add-ons/stash-qmt-2.png)
+
+### [stash-vr-companion](https://github.com/Tweeticoats/stash-vr-companion){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [Tweeticoats](https://github.com/Tweeticoats){target=_blank}
+
+=== "Screenshots"
+
+### [stash-vr](https://github.com/o-fl0w/stash-vr){target=_blank}
+
+=== "Description"
+
+ Watch your Stash library in VR for that full immersion effect.
+
+ 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.
+
+=== "Author"
+
+ [o-fl0w](https://github.com/o-fl0w){target=_blank}
+
+=== "Screenshots"
+### [stash-webvr](https://gitlab.com/stish/stash-webvr){target=_blank}
+
+=== "Description"
+
+ WebVR friendly Stash client that displays only videos tagged with "Virtual Reality" tag.
+
+=== "Author"
+
+ [stishadmin](https://gitlab.com/stishadmin){target=_blank}
+
+=== "Screenshots"
+
+### [Stash_helper](https://github.com/philpw99/Stash_Helper){target=_blank}
+
+=== "Description"
+
+ Adds some helping features to Stash (Bookmarks, playlist, external player, etc). Windows only.
+
+=== "Author"
+
+ [philpw99](https://github.com/philpw99){target=_blank}
+
+=== "Screenshots"
+
+ ![](/assets/add-ons/Stash_helper-1.png)
+
+### [StashBox Performer Bot](https://github.com/S3L3CT3DLoves/StashBots){target=_blank}
+
+=== "Description"
+
+ 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.
+
+=== "Author"
+
+ [S3L3CT3DLoves](https://github.com/S3L3CT3DLoves){target=_blank}
+
+=== "Screenshots"
+
+
+
+
+
+
+
+
diff --git a/frequently-asked-questions.md b/frequently-asked-questions.md
index 29cb39b7..e69de29b 100644
--- a/frequently-asked-questions.md
+++ b/frequently-asked-questions.md
@@ -1,151 +0,0 @@
----
-layout: clean
-title: Frequently Asked Questions
-nav_order: 9
-permalink: /faq/
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Logging in
-
-## How do I recover a forgotten username or password?
-
-Stash saves login credentials in the `config.yml` file. You must reset both login and password if you have forgotten your password by doing the following:
-- Close your Stash process;
-- Open the `config.yml` file found in your Stash directory with a text editor;
-- Delete the `login` and `password` lines from the file and save;
-- Stash authentication should now be reset with no authentication credentials.
-
-## How can I connect to my server from elsewhere within my network?
-
-Find the local IP address of your Stash Server (guides for [Windows](https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9){:target="_blank"}, [MacOS](https://support.apple.com/guide/mac-help/find-your-computers-name-and-network-address-mchlp1177/11.0/mac/11.0){:target="_blank"}, [Linux](https://wiki.archlinux.org/title/Network_configuration#IP_addresses){:target="_blank"}). Then, on another device on your local network, open a browser to http://SERVER.IP.ADDRESS.HERE:9999/
-
-See [this article](/networking/authentication-required-when-accessing-stash-from-the-internet#alternative-and-safe-methods-to-access-your-stash) for ideas on accessing your stash from outside your network.
-
-## How do I serve Stash over SSL/TLS (HTTPS)?
-
-This is typically accomplished by putting Stash behind a reverse proxy, such as Nginx or Caddy. Stash can also serve SSL directly.
-To use the built-in SSL:
-First you must generate a SSL certificate and key combo. Here is an example using openssl:
-
-`openssl req -x509 -newkey rsa:4096 -sha256 -days 7300 -nodes -keyout stash.key -out stash.crt -extensions san -config <(echo "[req]"; echo distinguished_name=req; echo "[san]"; echo subjectAltName=DNS:stash.server,IP:127.0.0.1) -subj /CN=stash.server`
-
-This command would need customizing for your environment. [This link](https://stackoverflow.com/questions/10175812/how-to-create-a-self-signed-certificate-with-openssl){:target="_blank"} might be useful.
-
-Once you have a certificate and key file name them `stash.crt` and `stash.key` and place them in the same directory as the `config.yml` file, or the `~/.stash` directory. Stash detects these and starts up using HTTPS rather than HTTP.
-
-Alternatively you can add values to `config.yml` for `ssl_cert_path: /ssl-certs/my-fullchain.cer` and `ssl_key_path: C:\ssl-certs\my-private.key`, which contain the full paths to your files.
-
-## How do I serve Stash in a Subpath?
-
-The basepath defaults to `/`. When running stash via a reverse proxy in a subpath, the basepath can be changed by having the reverse proxy pass `X-Forwarded-Prefix` (and optionally `X-Forwarded-Port`) headers. When detects these headers, it alters the basepath URL of the UI.
-
-# Working with Content
-
-## What's the best way to add metadata to Stash?
-
-* StashDB is a service that allows for crowdsourcing of porn metadata. Check the pinned messages in the #stashbox-invites channel in Discord to start using it.
-* Stash includes a single scraper, but you can add more via the [CommunityScrapers repository](https://github.com/stashapp/CommunityScrapers){:target="_blank"}. See the README for installation and usage instructions.
-
-## How do I rename or relocate a library folder or scenes?
-
-**If you need to move or rename a folder**, you can remove the existing directory from your library and re-add the new location.
-**If you need to move or rename scenes**, you can simply move the scenes and rescan, being sure the new location is in your library.
-
-Stash will recognize the files on the next scan and re-link to the new location.
-**Do not run a Clean in between these steps, or you will lose the information from your relocated folders** (your files will not be affected).
-
-Stash uses 2 different methods to track your scenes: oshash and filename/path. Changing ONE (either moving OR editing/altering the file) will be recovered on your next scan. Stash will update the 'wrong' entry, and restore it knowing 2 things about each file. If both are changed at once (like a reencode and a rename), Stash has no way to associate the file with the old version and will add the file as new entry, **losing** the old metadata associated with it. (The data isn't deleted until a clean though)
-
-> **⚠️ Note:** Don't forget to click `Save` after updating these directories!
-
-## How do I add galleries?
-
-For gallery-related issues check the relevant Documentation [section](/in-app-manual/images).
-
-## How to add performers in bulk?
-
-> You will need to have a stash-box attached as a source.
-
-Go to `Performers` page > Tagger view > click `Batch Update Performers` > select your preferences > refresh the page.
-
-# Scraping
-
-## Scrape behind paywall
-
-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. So far this technique was tested and passed under Windows 10 only.
-
-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.
-
-Steps:
-1. Prepare your scraper's .yml file and make sure it's valid and working. Your scraper should have the following setting inside:
-```
-driver:
- useCDP: true
-```
-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.
-3. In Stash, make sure that the "Chrome CDP Path" setting is `http://localhost:9222/json/version`.
-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.
-5. Paste the webpage's URL in your Stash scene and start scraping. It should get the information correctly.
-
-# Troubleshooting
-
-## Error: Panic: error initializing configuration: missing the following mandatory settings: generated
-
-1. Find your `config.yml` file. Usually located at `%userprofile%/.stash` or `$HOME/.stash`.
-2. Open it and find `generated:` line.
-3. Replace with or add `generated: absolute_path_to_your_generated_folder`.
-4. Save and try to start Stash.
-
-## Known Issues
-
-- Performer images uploaded in WebP format will not display on versions of Safari prior to version 13 or on anything earlier than MacOS Big Sur. This is a [limitation of Safari](https://caniuse.com/webp){:target="_blank"}. As a workaround, ensure you are uploading performer images in jpg or png format.
-
-## Stash is showing a "FFMPEG Not Found" error
-
-If Stash is unable to find or download FFMPEG, then download and install it yourself.
-
-The `ffmpeg.exe` and `ffprobe.exe` files should be placed in `C:\Users\YourUsername\.stash` on Windows.
-The `ffmpeg` and `ffprobe` files should be placed in `~/.stash` on macOS / Linux.
-
-## I'm having problem with my Docker image
-
-Third-party Docker images are more likely to be misconfigured and makes it harder to get support from the core Stash team. For best experience you should stay with official Stash Docker image. [Stash repository](https://github.com/stashapp/stash/tree/master/docker/production){:target="_blank"} and [DockerHub](https://hub.docker.com/r/stashapp/stash){:target="_blank"}.
-
-## I'm getting "Migration failed"
-
-It can mean that you database got corrupted. You can verify that by running a few SQL statements. The easiest way to do so is to install a simple program called [DB Browser for SQLite](https://sqlitebrowser.org){:target="_blank"}. Start the program and in the menu select `File` > `Open Database...` and select your Stash .sqlite database file. Then navigate to the `Execute SQL` tab and run:
-- `PRAGMA integrity_check;` - it should return `ok`.
-- `PRAGMA foreign_key_check;` - it should return nothing.
-
-If you get something different it means there is an issue with your database. It's still possible that it can be recovered. You can ask for more help in one of the [support channels](#support).
-Another option would be to try using an older backup if you have one.
-
-## How do I run multiple instances of Stash?
-
-Running multiple instances of Stash can be done by specifying both the `-c` switch to denote an alternate `config.yml` filepath, and the `--p` switch to denote a unique port number.
-
-Step-by-step Linux guide to running mutiple instances of Stash:
-
-1. Create a new directory for the alternate Stash configuration, referred to here as `NEW_DIRECTORY_LOCATION`.
-2. Choose a unique port number that does not conflict with other local Stash instances, referred to here as `NEW_PORT_NUMBER`.
-3. Initiate Stash to assume a fresh installation by running `./stash-linux --port NEW_PORT_NUMBER -c NEW_DIRECTORY_LOCATION/config.yml`.
-4. Complete the Stash Setup Wizard.
-5. Using a text editor, manually update `config.yml` to use `NEW_PORT_NUMBER`. Find the line `port: 9999` and replace with `port: NEW_PORT_NUMBER`.
-6. This instance of Stash can now be accessed by running `./stash-linux -c NEW_DIRECTORY_LOCATION/config.yml`
-
-# Support
-
-## I have a question not answered here
-
-- Join our [Matrix space](https://matrix.to/#/#stashapp:unredacted.org){:target="_blank"}
-- Join our [Discord server](https://discord.gg/2TsNFKt){:target="_blank"}
-- Start a [discussion on GitHub](https://github.com/stashapp/stash/discussions){:target="_blank"}
diff --git a/getting-started.md b/getting-started.md
deleted file mode 100644
index 0e813ebb..00000000
--- a/getting-started.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: clean
-title: Getting Started
-nav_order: 2
-has_children: true
-has_toc: false
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. [Installation](/getting-started/installation/)
- - [Windows](/getting-started/installation/windows)
- - [macOS](/getting-started/installation/macos)
- - [Linux](/getting-started/installation/linux)
- - [Docker](/getting-started/installation/docker)
- - [Synology](/getting-started/installation/synology)
- - [FreeNAS/TrueNAS](/getting-started/installation/freenas-truenas)
- - [Unraid](/getting-started/installation/unraid)
-2. [First Steps](/getting-started/first-steps/)
-
\ No newline at end of file
diff --git a/getting-started/first-steps.md b/getting-started/first-steps.md
deleted file mode 100644
index 0c5d45f1..00000000
--- a/getting-started/first-steps.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-layout: clean
-title: First Steps
-nav_order: 2
-parent: Getting Started
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Setting Up Content Libraries
-
-1. Open your Stash.
-2. Go to `Settings` > `Library` and click `Add Directory`.
-3. To change the drive letter/volume, just type it in the field.
-![Drive location](/assets/getting-started/drive_location.png)
-4. Select the folder containing the content you want to add. It will select the folder and all sub-folders.
-5. Click `Confirm`.
-
-# Configuring Scan Options
-
-1. Open your Stash.
-2. Go to `Settings` > `Tasks`.
-3. Select options you want based on your preferences, but keep in mind that every option increases time the scan will take.
-4. You can stop and re-scan it will ignore the files that are already scanned and just scan new or missing files.
-
-# Initiating Scan
-
-{: .note }
-If for some reason you need to stop the scan the next time you start it again it will skip files that are already scanned and just go through new files.
-
-1. Open your Stash.
-2. Go to `Settings` > `Tasks`.
-3. Click `Scan` to start scanning for the content from your setup libraries or `Selective Scan...` if you want to scan a specific location.
diff --git a/getting-started/installation.md b/getting-started/installation.md
deleted file mode 100644
index db5156af..00000000
--- a/getting-started/installation.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: clean
-title: Installation
-nav_order: 1
-has_children: true
-has_toc: false
-parent: Getting Started
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. [Windows](/getting-started/installation/windows)
-2. [macOS](/getting-started/installation/macos)
-3. [Linux](/getting-started/installation/linux)
-4. [Docker](/getting-started/installation/docker)
-5. [Synology](/getting-started/installation/synology)
-6. [FreeNAS/TrueNAS CORE](/getting-started/installation/freenas-truenas)
-7. [Unraid](/getting-started/installation/unraid)
-
-
diff --git a/getting-started/installation/synology.md b/getting-started/installation/synology.md
index 89fb4810..e69de29b 100644
--- a/getting-started/installation/synology.md
+++ b/getting-started/installation/synology.md
@@ -1,220 +0,0 @@
----
-layout: clean
-title: Synology
-nav_order: 5
-parent: Installation
-grand_parent: Getting Started
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Foreword
-
-Synology devices comes in two categories : those who support containerization through Docker, and those who don't. To see in which category you stand, refer to the "Applied Models" section of [the Docker Package page](https://www.synology.com/dsm/packages/Docker){:target="_blank"}.
-
-Now, follow the installation instructions based on whether you [can use Docker](#to-install-stash-with-docker) or [you cannot use Docker](#to-install-stash-without-docker).
-
-{: .note }
-Running stash without docker is possible even if your NAS is docker ready. It offers more control on your stash instance startup. As an example, it allows you to store your porn collection in an Encrypted Shared Folder, and only run stash when the Encrypted folder is Mounted (Decrypted).
-
-## To install Stash with Docker
-
-- Make sure [the Docker app is installed](https://blog.pavelsklenar.com/how-to-install-and-use-docker-on-synology/){:target="_blank"} and running correctly.
-- [Search the registry for stash](https://hub.docker.com/r/stashapp/stash){:target="_blank"} and install.
-- Create a stash image with the following set up in 'advanced options'
-
-### "Volume" Tab
-
-| File/Folder | Mount Path | Description |
-|-------------------------|--------------|-----------------------------------------------------|
-| docker/Stash/generated | /generated | Thumbnails, clips, etc |
-| docker/Stash/metadata | /metadata | Database |
-| docker/Stash/config | /root/.stash | Configuration Files |
-| docker/Stash/cache | /cache | Cache Files |
-| docker/Stash/blobs | /blobs | Binary data for scene covers, performer images, etc |
-| (where your porn lives) | /data | Location of your porn |
-
-### "Environment" Tab
-
-(These will need to be the same as the Volumes you created in the "Volume" tab.)
-
-| variable | Value |
-|-----------------|--------------|
-| PATH | (keep as is) |
-| STASH_CACHE | /cache |
-| STASH_METADATA | /metadata |
-| STASH_GENERATED | /generated |
-| STASH_STASH | /data |
-| | | |
-
-### "Port" Tab
-
-You will need to set a default port in the "Port" tab, otherwise Docker will assign a different port every time Stash is launched. Leave the container port as-is.
-
-### "Network" Tab
-
-Make sure that "Use The Same Network As Docker Host" is checked.
-
-(thanks to backer Herelam80 for these instructions)
-
-## To install Stash without Docker
-
-Warning : this method uses SSH to run command lines on the NAS. If you are unfamiliar with SSH or linux command lines, I suggest you not to go further, as making a mistake in the SSH session can really screw your NAS.
-
-This is intended to work on DSM 7.0 and later. It will not work on any version prior to 7.0.
-
-### Install Prerequisites
-
-In DSM, navigate to `Package Center > Settings`. In the `Package Sources` tab, click `Add`, type _SynoCommunity_ as Name and [https://packages.synocommunity.com/](https://packages.synocommunity.com/){:target="_blank"} as Location and then press `OK` to validate.
-
-Go back to the Package Center and look for `Python 3.11` in the Community tab. Click on `Install` and agree to the _Third-Party Package_ warning.
-
-Then look for `Ffmpeg 6` in the Community tab. Click on `Install` and agree to the _Third-Party Package_ warning.
-
-### Enable SSH
-
-In DSM, navigate to `Control Panel > Connectivity > Terminal & SNMP` and check the `Enable SSH service` box.
-
-### Create a user that will run stash
-
-1. In DSM, navigate to `Control Panel > File Sharing > User & Group`
-1. Click on the `Create` button
-1. Give it a name (eg _stash_) and a Password (you will need it later)
-1. Click `Next` until you are on the "Join groups" screen
-1. Assign the user to the "administrators" group (this will be removed later but is required by synology to be able to use SSH (I know, it's stupid) and complete the installation properly)
-1. Click `Next` until you are on the "Assign shared folders permissions" screen
-1. Assign the Read/Write permission to your porn folder (the write permission is needed to allow the deletion of clips from the stash app)
-1. Click `Next` until you are on the "Assign application permissions" screen
-1. Check `Deny` for all applications
-1. Click `Next` until you can click on `Done`
-
-### Connect to your NAS
-
-With your terminal, connect to your NAS using the newly created account that is part of the _administrators_ group.
-
-```bash
-ssh stash@your_nas_hostname
-```
-
-### Link ffprobe & ffmpeg
-
-ffmpeg has been installed earlier, but is missing a link to ffprobe (also installed) and the new version of ffmpeg. Run the following command.
-
-```bash
-sudo ln -s /var/packages/ffmpeg6/target/bin/ffprobe /usr/local/bin/ffprobe
-sudo ln -s /var/packages/ffmpeg6/target/bin/ffmpeg /usr/local/bin/ffmpeg
-```
-
-### Download Stash
-
-Download the lastest version of stash and its checksum from github
-
-```bash
-# find what architecture your synology is running on
-uname -m
-
-# depending on the architecture, you'll have to download the right version of stash
-
-# x86_64
-wget https://github.com/stashapp/stash/releases/latest/download/stash-linux
-# armv6l
-wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm32v6
-# armv7l
-wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm32v7
-# aarch64
-wget https://github.com/stashapp/stash/releases/latest/download/stash-linux-arm64v8
-
-# Download the CHECKSUM
-wget https://github.com/stashapp/stash/releases/latest/download/CHECKSUMS_SHA1
-
-# Perform the checksum validation
-sha1sum -c --ignore-missing CHECKSUMS_SHA1
-
-# you should see a line that says `stash-linux: OK`
-# if not, something went wrong during the download
-
-# Clean up the now unnecessary file
-rm CHECKSUMS_SHA1
-```
-
-{: .note }
-DO NOT run stash yet or it will generate a bunch of files/folders where we don't want them_
-
-### Python
-
-Prepare a python environment (for scrapers and plugins)
-
-```bash
-python3.11 -m ensurepip --upgrade
-python3.11 -m venv stash-env
-source stash-env/bin/activate
-pip3 install pipreqs
-```
-
-### Configure your NAS to run Stash
-
-Create a profile file
-
-```bash
-echo 'PATH=/usr/local/bin:$PATH' > .profile
-echo 'source stash-env/bin/activate' >> .profile
-```
-
-Create the service file by running `cat > stash.service`, copy/pasting the following, and hitting CTRL+D when it's done to save the file (hit again if you are not back to the prompt) :
-
-```ini
-[Unit]
-Description=Run Stash at startup
-After=network.target
-
-[Service]
-WorkingDirectory=/var/services/homes/stash
-Type=simple
-User=stash
-ExecStart=/bin/bash -c -l '\
- exec ./stash-linux'
-Restart=on-failure
-
-[Install]
-WantedBy=multi-user.target
-```
-
-{: .note }
-Change the `ExecStart` line by providing the exact name of the stash executable that you downloaded previously.
-
-Start and activate the service
-
-```bash
-sudo systemctl enable "$(pwd)/stash.service"
-sudo systemctl start stash.service
-```
-
-### Verify that it is working
-
-You can now access to stash by navigating to your NAS url on port 9999 : `http://nas-hostname:9999`
-
-### Installing Scrapers and Plugins
-
-Whenever you install a new python scraper or plugin, do the following from the _stash_ user home directory
-
-```bash
-pipreqs .stash/.
-pip3 install -r .stash/requirements.txt
-```
-
-{: .note }
-Using pipreqs allows to scan all scrapers and plugins installed and find dependencies that they require. You can do the same thing without pipreqs by going into each individual directory and run `pip3 install -r requirements.txt`
-
-### Remove stash user from administrator group
-
-1. Go back to DSM, navigate to `Control Panel > File Sharing > User & Group`
-1. Click on the _stash_ user and then on `Edit`
-1. In the `User Groups` tab, uncheck "administrators" and click on `Save`
-
diff --git a/getting-started/installation/unraid.md b/getting-started/installation/unraid.md
deleted file mode 100644
index 801ceb5d..00000000
--- a/getting-started/installation/unraid.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-layout: clean
-title: Unraid
-nav_order: 7
-parent: Installation
-grand_parent: Getting Started
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-{: .important }
-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.
-
-{: .note }
-For users that want to try the development branch of Stash you can change the repository to `stashapp/stash:development`.
-
-# Install
-
-1. Open Unraid and go to the `Apps` tab.
-2. Enable apps (if disabled) and search for `Stash`.
- - You can modify paths to your preference.
-3. Go to Docker tab and enable autostart for `Stash`.
-
-# Optional Nvidia Runtime
-
-{: .important }
-`binarygeek119/stash-cuda:latest` repository is not maintained by Stash core team.
-
-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.
-
-{: .warning }
-Do not restart Unraid server until the plugin is done installing itself!
-
-{:style="counter-reset:none"}
-2. After getting the popup, reboot your server. After it back online you may continue to the next steps.
-
-{:style="counter-reset:none"}
-3. To begin modifing start by going into edit mode by right click on stash icon on Unraid dashboard or in Docker tab.
-
-{:style="counter-reset:none"}
-4. In edit mode go to the top and click on basic view to switch to advaced view.
-
-![](/assets/beginner-guides/unraid-docker-stash-page.jpg)
-![](/assets/beginner-guides/unraid-docker-stash-page-advanced-view.jpg)
-
-## Container configuration
-
-Now we can change some thing to have Stash work with a Nvidia GPU.
-
-1. Under Repository change the default Repository from `stashapp/stash:development` to `binarygeek119/stash-cuda:latest`.
-
-![](/assets/beginner-guides/unraid-docker-stash-Repository-1.jpg)
-![](/assets/beginner-guides/unraid-docker-stash-Repository-2.jpg)
-
-{:style="counter-reset:none"}
-2. Add the following under Extra Parameters: `--runtime=nvidia`.
-
-![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-1.jpg)
-![](/assets/beginner-guides/unraid-docker-stash-Extra-Parameters-2.jpg)
-
-{:style="counter-reset:none"}
-3. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`.
-
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg)
-
-{:style="counter-reset:none"}
-4. Change `path` to `Variable` and add the following:
-
-`Name:` enter `NVIDIA_DRIVER_CAPABILITIES`
-`Key:` enter `NVIDIA_DRIVER_CAPABILITIES`
-`Value:` enter `all`
-
-and click save.
-
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg)
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg)
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-4.jpg)
-
-{:style="counter-reset:none"}
-5. Go down to the bottom of the page and click on `Add another Path, Port, Variable, Label or Device`.
-
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-1.jpg)
-
-{:style="counter-reset:none"}
-6. Change `path` to `Variable` and add the following:
-
-`Name:` enter `NVIDIA_VISIBLE_DEVICES`
-`Key:` enter `NVIDIA_VISIBLE_DEVICES`
-`Value:` enter `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx`
-
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-2.jpg)
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-3.jpg)
-![](/assets/beginner-guides/unraid-stash-Add-another-Variable-5.jpg)
-
-### Locating GPUID
-
-Where `GPU-xxxx-xxxx-xxx-xxxx-xxxx-xxx-xxxxxxxxxxxx` you must enter your own GPUID. To find it do the folowing:
- - On a new Unraid page click on settings.
- - Go down to the bottom and click Nvidia Driver plugin.
- - Copy the key and paste it under `Variable` called `Value`.
-
-![](/assets/beginner-guides/unraid-gpuid.jpg)
-
-{:style="counter-reset:none"}
-7. Click on save.
-
-{:style="counter-reset:none"}
-8. Now click on apply and let the Docker download the new Nvidia version of Stash.
-
-{:style="counter-reset:none"}
-9. Enjoy and use as before.
diff --git a/in-app-manual.md b/in-app-manual.md
deleted file mode 100644
index e75b533d..00000000
--- a/in-app-manual.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: clean
-title: In-app Manual
-nav_order: 3
-has_children: true
-has_toc: false
-
----
-Internal Stash documentation, mirrored from [Stash repository](https://github.com/stashapp/stash/tree/master/ui/v2.5/src/docs/en/Manual){:target="_blank"}.
-
-
-
- Table of Contents
-
-{: .text-delta }
-1. [Introduction](/in-app-manual/introduction)
-2. [Configuration](/in-app-manual/configuration)
-3. [Interface Options](/in-app-manual/interface)
-4. [Tasks](/in-app-manual/tasks)
- - [Identify](/in-app-manual/tasks/identify)
- - [Auto Tagging](/in-app-manual/tasks/autotagging)
- - [Scene Filename Parser](/in-app-manual/tasks/scenefilenameparser)
- - [JSON Specification](/in-app-manual/tasks/jsonspec)
-5. [Browsing](/in-app-manual/browsing)
-6. [Images and Galleries](/in-app-manual/images)
-7. [Metadata Scraping](/in-app-manual/scraping)
- - [Scraper Development](/in-app-manual/scraping/scraperdevelopment)
-8. [Plugins](/in-app-manual/plugins)
- - [External](/in-app-manual/plugins/externalplugins)
- - [Embedded](/in-app-manual/plugins/embeddedplugins)
-9. [Scene Tagger](/in-app-manual/tagger)
-10. [Dupe Checker](/in-app-manual/deduplication)
-11. [Interactivity](/in-app-manual/interactive)
-12. [Captions](/in-app-manual/captions)
-13. [Keyboard Shorcuts](/in-app-manual/keyboardshortcuts)
-14. [Contributing](/in-app-manual/contributing)
-15. [Further Help](/in-app-manual/help)
-
\ No newline at end of file
diff --git a/in-app-manual/browsing.md b/in-app-manual/browsing.md
index a06df673..e69de29b 100644
--- a/in-app-manual/browsing.md
+++ b/in-app-manual/browsing.md
@@ -1,67 +0,0 @@
----
-layout: clean
-title: Browsing
-nav_order: 5
-parent: In-app Manual
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Querying and Filtering
-
-## Keyword searching
-
-The text field allows you to search using keywords. Keyword searching matches on different fields depending on the object type:
-
-| Type | Fields searched |
-|------|-----------------|
-| Scene | Title, Details, Path, OSHash, Checksum, Marker titles |
-| Image | Title, Path, Checksum |
-| Movie | Title |
-| Marker | Title, Scene title |
-| Gallery | Title, Path, Checksum |
-| Performer | Name, Aliases |
-| Studio | Name, Aliases |
-| Tag | Name, Aliases |
-
-Keyword matching uses the following rules:
-
-* all words are required in the matching field. For example, `foo bar` matches scenes with both `foo` and `bar` in the title.
-* the `or` keyword or symbol (`|`) is used to match either fields. For example, `foo or bar` (or `foo | bar`) matches scenes with `foo` or `bar` in the title. Or sets can be combined. For example, `foo or bar or baz xyz or zyx` matches scenes with one of `foo`, `bar` and `baz`, *and* `xyz` or `zyx`.
-* the not symbol (`-`) is used to exclude terms. For example, `foo -bar` matches scenes with `foo` and excludes those with `bar`. The not symbol cannot be combined with an or operand. That is, `-foo or bar` will be interpreted to match `-foo` or `bar`. On the other hand, `foo or bar -baz` will match `foo` or `bar` and exclude `baz`.
-* surrounding a phrase in quotes (`"`) matches on that exact phrase. For example, `"foo bar"` matches scenes with `foo bar` in the title. Quotes may also be used to escape the keywords and symbols. For example, `foo "-bar"` will match scenes with `foo` and `-bar`.
-* quoted phrases may be used with the or and not operators. For example, `"foo bar" or baz -"xyz zyx"` will match scenes with `foo bar` *or* `baz`, and exclude those with `xyz zyx`.
-* `or` keywords or symbols at the start or end of a line will be treated literally. That is, `or foo` will match scenes with `or` and `foo`.
-* all keyword matching is case-insensitive
-
-## Filters
-
-Filters can be accessed by clicking the filter button on the right side of the query text field.
-
-Note that only one filter criterion per criterion type may be assigned.
-
-### Regex modifiers
-
-Some filters have regex modifier as an option. Regex modifiers are always case-sensitive.
-
-## Sorting and page size
-
-The current sorting field is shown next to the query text field, indicating the current sort field and order. The page size dropdown allows selecting from a standard set of objects per page, and allows setting a custom page size.
-
-## Saved filters
-
-Saved filters can be accessed with the bookmark button on the left of the query text field. The current filter can be saved by entering a filter name and clicking on the save button. Existing saved filters may be overwritten with the current filter by clicking on the save button next to the filter name. Saved filters may also be deleted by pressing the delete button next to the filter name.
-
-Saved filters are sorted alphabetically by title, with capitalized titles sorted first.
-
-## Default filter
-
-The default filter for the top-level pages may be set to the current filter by clicking the `Set as default` button in the saved filter menu.
diff --git a/in-app-manual/captions.md b/in-app-manual/captions.md
index 1ed578f8..e69de29b 100644
--- a/in-app-manual/captions.md
+++ b/in-app-manual/captions.md
@@ -1,31 +0,0 @@
----
-layout: clean
-title: Captions
-nav_order: 12
-parent: In-app Manual
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Stash supports captioning with SRT and VTT files.
-
-These files need to be named as follows:
-
-# Scene
-
-- {scene_name}.{language_code}.ext
-- {scene_name}.ext
-
-Where `{language_code}` is defined by the [ISO-6399-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes){:target="_blank"} (2 letters) standard and `ext` is the file extension. Captions files without a language code will be labeled as Unknown in the video player but will work fine.
-
-Scenes with captions can be filtered with the `captions` criterion.
-
-**Note:** If the caption file was added after the scene was initially added during scan you will need to run a Selective Scan task for it to show up.
diff --git a/in-app-manual/configuration.md b/in-app-manual/configuration.md
index 8409bfb0..e69de29b 100644
--- a/in-app-manual/configuration.md
+++ b/in-app-manual/configuration.md
@@ -1,184 +0,0 @@
----
-layout: clean
-title: Configuration
-nav_order: 2
-parent: In-app Manual
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Stashes
-
-This section allows you to add and remove directories from your library list. Files in these directories will be included when scanning. Files that are outside of these directories will be removed when running the Clean task.
-
-> **⚠️ Note:** Don't forget to click `Save` after updating these directories!
-
-# Excluded Patterns
-
-Given a valid [regex](https://github.com/google/re2/wiki/Syntax){:target="_blank"}, files that match even partially are excluded during the Scan process and are not entered in the database. Also during the Clean task if these files exist in the DB they are removed from it and their generated files get deleted.
-Prior to matching both the filenames and patterns are converted to lower case so the match is case insensitive.
-
-Regex patterns can be added in the config file or from the UI.
-If you add manually to the config file a restart is needed while from the UI you just need to click the Save button.
-When added through the config file directly special care must be given to double escape the `\` character.
-
-Some examples
-
-For the config file you need the following added
-```
-exclude:
-- "sample\\.mp4$"
-- "/\\.[[:word:]]+/"
-- "c:\\\\stash\\\\videos\\\\exclude"
-- "^/stash/videos/exclude/"
-- "\\\\\\\\stash\\network\\\\share\\\\excl\\\\"
-```
-* the first excludes all files ending in `sample.mp4` ( `.` needs to be escaped also)
-* the second hidden directories `/.directoryname/`
-* the third is an example for a windows directory `c:\stash\videos\exclude`
-* the fourth the directory `/stash/videos/exclude/`
-* and the last a windows network path `\\stash\network\share\excl\`
-
-**Note:** if a directory is excluded for images and videos, then the directory will be excluded from scans completely.
-
-_a useful [link](https://regex101.com/){:target="_blank"} to experiment with regexps_
-
-# Gallery Creation From Folders
-
-In the Library section you can find an option to create a gallery from each folder containing images. This will be applied on all libraries when activated, including the base folder of a library.
-
-If you wish to apply this on a per folder basis, you can create a file called **.nogallery** or **.forcegallery** in a folder that should act different than this global setting.
-
-This will either exclude the folder from becoming a gallery even if the setting is set, or create a gallery from the folder even if the setting is not set.
-
-The file will only be recognized if written in lower case letters.
-
-Files with a dot in front are handled as hidden in the Linux OS and Mac OS, so you will not see those files after creation on your system without setting your file manager accordingly.
-
-# Hashing algorithms
-
-Stash identifies video files by calculating a hash of the file. There are two algorithms available for hashing: `oshash` and `MD5`. `MD5` requires reading the entire file, and can therefore be slow, particularly when reading files over a network. `oshash` (which uses OpenSubtitle's hashing algorithm) only reads 64k from each end of the file.
-
-The hash is used to name the generated files such as preview images and videos, and sprite images.
-
-By default, new systems have MD5 calculation disabled for optimal performance. Existing systems that are upgraded will have the oshash populated for each scene on the next scan.
-
-## Changing the hashing algorithm
-
-To change the file naming hash to oshash, all scenes must have their oshash values populated. oshash population is done automatically when scanning.
-
-To change the file naming hash to `MD5`, the MD5 must be populated for all scenes. To do this, `Calculate MD5` for videos must be enabled and the library must be rescanned.
-
-MD5 calculation may only be disabled if the file naming hash is set to `oshash`.
-
-After changing the file naming hash, any existing generated files will now be named incorrectly. This means that stash will not find them and may regenerate them if the `Generate task` is used. To remedy this, run the `Rename generated files` task, which will rename existing generated files to their correct names.
-
-### Step-by-step instructions to migrate to oshash for existing users
-
-These instructions are for existing users whose systems will be defaulted to use and calculate MD5 checksums. Once completed, MD5 checksums will no longer be calculated when scanning, and oshash will be used for generated file naming. Existing calculated MD5 checksums will remain on scenes, but checksums will not be calculated for new scenes.
-
-1. Scan the library (to populate oshash for all existing scenes).
-2. In Settings -> Configuration page, untick `Calculate MD5` and select `oshash` as file naming hash. Save the configuration.
-3. In Settings -> Tasks page, click on the `Rename generated files` migration button.
-
-# Parallel Scan/Generation
-
-## Number of parallel task for scan/generation
-
-This setting controls how many sub-tasks will be run in parallel during scanning and generation tasks. (See Tasks)
-
-Auto-detection can be enabled by setting this to zero. This will calculate the number of parallel tasks to be `logical cores/4 + 1`.
-Logical cores are multiplication of the number of physical cores with the number of threads each core can handle.
-
-This setting can be used to increase/decrease overall CPU utilisation in two scenarios:
-1. High performance 4+ CPU cores.
-2. Media files stored on remote/cloud filesystem.
-
-Note: If this is set too high it will decrease overall performance and causes failures (out of memory).
-
-## Hardware Accelerated Live Transcoding
-
-Hardware accelerated live transcoding can be enabled by setting the `FFmpeg hardware encoding` setting. Stash outputs the supported hardware encoders to the log file on startup at the Info log level. If a given hardware encoder is not supported, it's error message is logged to the Debug log level for debugging purposes.
-
-## HLS/DASH Streaming
-
-To stream using HLS (such as on Apple devices) or DASH, the Cache path must be set. This directory is used to store temporary files during the live-transcoding process. The Cache path can be set in the System settings page.
-
-## ffmpeg arguments
-
-Additional arguments can be injected into ffmpeg when generating previews and sprites, and when live-transcoding videos.
-
-The ffmpeg arguments configuration is split into `Input` and `Output` arguments. Input arguments are injected before the input file argument, and output arguments are injected before the output file argument.
-
-Arguments are accepted as a list of strings. Each string is a separate argument. For example, a single argument of `-foo bar` would be treated as a single argument `"-foo bar"`. The correct way to pass this argument would be to split it into two separate arguments: `"-foo", "bar"`.
-
-# Scraping
-
-## User Agent string
-
-Some websites require a legitimate User-Agent string when receiving requests, or they will be rejected. If entered, this string will be applied as the `User-Agent` header value in http scrape requests.
-
-## Chrome CDP path
-
-Some scrapers require a Chrome instance to function correctly. If left empty, stash will attempt to find the Chrome executable in the path environment, and will fail if it cannot find one.
-
-`Chrome CDP path` can be set to a path to the chrome executable, or an http(s) address to remote chrome instance (for example: `http://localhost:9222/json/version`).
-
-# Authentication
-
-By default, stash is not configured with any sort of password protection. To enable password protection, both `Username` and `Password` must be populated. Note that when entering a new username and password where none was set previously, the system will immediately request these credentials to log you in.
-
-# API key
-
-If password protection is enabled, you may also generate an API key. An API key is used by external systems to access your stash system without needing to login first.
-
-External systems using the API key must set the `ApiKey` header value to the configured API key in order to bypass the login requirement.
-
-## Logging out
-
-The logout button is situated in the upper-right part of the screen when you are logged in.
-
-## Recovering from a forgotten username or password
-
-Stash saves login credentials in the config.yml file. You must reset both login and password if you have forgotten your password by doing the following:
-* Close your Stash process
-* Open the `config.yml` file found in your Stash directory with a text editor
-* Delete the `login` and `password` lines from the file and save
-Stash authentication should now be reset with no authentication credentials.
-
-# Advanced configuration options
-
-These options are typically not exposed in the UI and must be changed manually in the `config.yml` file.
-
-| Field | Remarks |
-|-------|---------|
-| `custom_served_folders` | A map of URLs to file system folders. See below. |
-| `custom_ui_location` | The file system folder where the UI files will be served from, instead of using the embedded UI. Empty to disable. Stash must be restarted to take effect. |
-| `developer_options.extra_blob_paths` | A list of alternative blob paths. These paths will be read for blob files. Blobs will not be written or deleted from these paths. Intended for developer use only. |
-| `max_upload_size` | Maximum file upload size for import files. Defaults to 1GB. |
-| `theme_color` | Sets the `theme-color` property in the UI. |
-| `gallery_cover_regex` | The regex responsible for selecting images as gallery covers |
-| `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 |
-| `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 |
-| `sequential_scanning` | Modifies behaviour of the scanning functionality to generate support files (previews/sprites/phash) at the same time as fingerprinting/screenshotting. Useful when scanning cached remote files. |
-
-## Custom served folders
-
-Custom served folders are served when the server handles a request with the `/custom` URL prefix. The following is an example configuration:
-
-```
-custom_served_folders:
- /: D:\stash\static
- /foo: D:\bar
-```
-
-With the above configuration, a request for `/custom/foo/bar.png` would serve `D:\bar\bar.png`.
-
-The `/` entry matches anything that is not otherwise mapped by the other entries. For example, `/custom/baz/xyz.png` would serve `D:\stash\static\baz\xyz.png`.
diff --git a/in-app-manual/contributing.md b/in-app-manual/contributing.md
deleted file mode 100644
index 4e0caff4..00000000
--- a/in-app-manual/contributing.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-layout: clean
-title: Ways to Contribute
-nav_order: 14
-parent: In-app Manual
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Financial
-
-Financial contributions are welcomed and are accepted using [Open Collective](https://opencollective.com/stashapp){:target="_blank"}.
-
-# Development-related
-
-The Stash backend is written in Go, using a SQLite database. The UI is written in Typescript, using React. Bug fixes, improvements and new features are welcomed. Please see the [DEVELOPMENT.md](https://github.com/stashapp/stash/blob/develop/docs/DEVELOPMENT.md){:target="_blank"} file for details on how to get started. Assistance is available via our [Discord](https://discord.gg/2TsNFKt){:target="_blank"}.
-
-# Documentation
-
-Efforts to improve documentation in Stash helps new users and reduces the number of questions we have to field in Discord. Contributions to documentation are welcomed. While submitting documentation changes via GitHub pull requests is ideal, we will gladly accept submissions via [GitHub issues](https://github.com/stashapp/stash/issues){:target="_blank"} or on [Discord](https://discord.gg/2TsNFKt){:target="_blank"}.
-
-For those with web page experience, we also welcome contributions to our [website](https://stashapp.cc/){:target="_blank"} (which as of writing is very undeveloped).
-
-# Testing features, improvements and bug fixes
-
-Testing is currently covered by a very small group, so new testers are welcomed. Being able to build Stash locally is ideal, but binaries for pull requests are also available.
-
-First, you will need to be signed in to GitHub. Find and open the relevant pull request, and then click on the `Checks` tab. On the right, there should be a button titled `Artifacts` - click that, and you should get a dropdown with links to download binaries built from that pull request for Linux, Windows and macOS.
-
-# Submitting and contributing to bug reports, improvements and new features
-
-We welcome ideas for future improvements and features, and bug reports help everyone. These can all be found on [GitHub](https://github.com/stashapp/stash/issues){:target="_blank"}.
-
-# Providing support
-
-Offering support for new users on [Discord](https://discord.gg/2TsNFKt){:target="_blank"} is also welcomed.
diff --git a/in-app-manual/deduplication.md b/in-app-manual/deduplication.md
deleted file mode 100644
index 7932d1b2..00000000
--- a/in-app-manual/deduplication.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: clean
-title: Dupe Checker
-nav_order: 10
-parent: In-app Manual
-
----
-
-[The dupe checker](http://localhost:9999/sceneDuplicateChecker){:target="_blank"} searches your collection for scenes that are perceptually similar. This means that the files don't need to be identical, and will be identified even with different bitrates, resolutions, and intros/outros.
-
-To achieve this stash needs to generate what's called a phash, or perceptual hash. Similar to sprite generation stash will generate a set of 25 images from fixed points in the scene. These images will be stitched together, and then hashed using the phash algorithm. The phash can then be used to find scenes that are the same or similar to others in the database. Phash generation can be run during scan, or as a separate task. Note that generation can take a while due to the work involved with extracting screenshots.
-
-The dupe checker can be run with four different levels of accuracy. `Exact` looks for scenes that have exactly the same phash. This is a fast and accurate operation that should not yield any false positives except in very rare cases. The other accuracy levels look for duplicate files within a set distance of each other. This means the scenes don't have exactly the same phash, but are very similar. `High` and `Medium` should still yield very good results with few or no false positives. `Low` is likely to produce some false positives, but might still be useful for finding dupes.
-
-Note that to generate a phash stash requires an uncorrupted file. If any errors are encountered during sprite generation the phash will not be generated. This is to prevent false positives.
diff --git a/in-app-manual/help.md b/in-app-manual/help.md
deleted file mode 100644
index 005be7c1..00000000
--- a/in-app-manual/help.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: clean
-title: Where to Get Further Help
-nav_order: 15
-parent: In-app Manual
-
----
-
-Join our [Discord](https://discord.gg/2TsNFKt){:target="_blank"}.
-
-The [Stash-Docs](https://docs.stashapp.cc) covers some areas not covered in the in-app help.
-
-Raise a [GitHub issue](https://github.com/stashapp/stash/issues){:target="_blank"}.
diff --git a/in-app-manual/images.md b/in-app-manual/images.md
deleted file mode 100644
index 0385a054..00000000
--- a/in-app-manual/images.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-layout: clean
-title: Images and Galleries
-nav_order: 6
-parent: In-app Manual
-
----
-
-Images are the parts which make up galleries, but you can also have them be scanned independently. To declare an image part of a gallery, there are four ways:
-
-1. Group them in a folder together and activate the **Create galleries from folders containing images** option in the library section of your settings. The gallery will get the name of the folder.
-2. Group them in a folder together and create a file in the folder called .forcegallery. The gallery will get the name of the folder.
-3. Group them into a zip archive together. The gallery will get the name of the archive.
-4. You can simply create a gallery in stash itself by clicking on **New** in the Galleries tab.
-
-You can add images to every gallery manually in the gallery detail page. Deleting can be done by selecting the according images in the same view and clicking on the minus next to the edit button.
-
-For best results, images in zip file should be stored without compression (copy, store or no compression options depending on the software you use. Eg on linux: `zip -0 -r gallery.zip foldertozip/`). This impacts **heavily** on the zip read performance.
-
-If a filename of an image in the gallery zip file ends with `cover.jpg`, it will be treated like a cover and presented first in the gallery view page and as a gallery cover in the gallery list view. If more than one images match the name the first one found in natural sort order is selected.
-
-## Image clips/gifs
-
-Images can also be clips/gifs. These are meant to be short video loops. Right now they are not possible in zipfiles. To declare video files to be images, there are two ways:
-
-1. Deactivate video scanning for all libraries that contain clips/gifs, but keep image scanning active. Set the **Scan Video Extensions as Image Clip** option in the library section of your settings.
-2. Make sure none of the file endings used by your clips/gifs are present in the **Video Extensions** and add them to the **Image Extensions** in the library section of your settings.
-
-A clip/gif will be a stillframe in the wall and grid view by default. To view the loop, you can go into the Lightbox Carousel (e.g. by clicking on an image in the wall view) or the image detail page.
-
-If you want the loop to be used as a preview on the wall and grid view, you will have to generate them.
-You can do this as you scan for the new clip file by activating **Generate previews for image clips** on the scan settings, or do it after by going to the **Generated Content** section in the task section of your settings, activating **Image Clip Previews** and clicking generate. This takes a while, as the files are transcoded.
\ No newline at end of file
diff --git a/in-app-manual/interactive.md b/in-app-manual/interactive.md
deleted file mode 100644
index 34f1e344..00000000
--- a/in-app-manual/interactive.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: clean
-title: Interactivity
-nav_order: 11
-parent: In-app Manual
-
----
-
-Stash currently supports syncing with Handy devices, using funscript files.
-
-In order for stash to connect to your Handy device, the Handy Connection Key must be entered in Settings -> Interface.
-
-Funscript files must be in the same directory as the matching video file and must have the same base name. For example, a funscript file for `video.mp4` must be named `video.funscript`. A scan must be run to update scenes with matching funscript files.
-
-Scenes with funscript files can be filtered with the `interactive` criterion.
diff --git a/in-app-manual/interface.md b/in-app-manual/interface.md
deleted file mode 100644
index 0a57b87c..00000000
--- a/in-app-manual/interface.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-layout: clean
-title: Interface Options
-nav_order: 3
-parent: In-app Manual
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Language
-
-Setting the language affects the formatting of numbers and dates.
-
-# Scene/Marker Wall Preview Type
-
-The Scene Wall and Marker pages display scene preview videos (mp4) by default. This can be changed to animated image (webp) or static image.
-
-> **⚠️ Note:** scene/marker preview videos must be generated to see them in the applicable wall page if Video preview type is selected. Likewise, if Animated Image is selected, then Image Previews must be generated.
-
-# Show Studios as text
-
-By default, a scene's studio will be shown as an image overlay. Checking this option changes this to display studios as a text name instead.
-
-# Scene Player options
-
-By default, scene videos do not automatically start when navigating to the scenes page. Checking the "Auto-start video" option changes this to auto play scene videos.
-
-The maximum loop duration option allows looping of shorter videos. Set this value to the maximum scene duration that scene videos should loop. Setting this to 0 disables this functionality.
-
-## Activity tracking
-
-The "Track Activity" option allows tracking of scene play count and duration, and sets the resume point when a scene video is not finished.
-
-The "Minimum Play Percent" gives the minimum proportion of a video that must be played before the play count of the scene is incremented.
-
-By default, when a scene has a resume point, the scene player will automatically seek to this point when the scene is played. Setting "Always start video from beginning" to true disables this behaviour.
-
-# Custom CSS
-
-The stash UI can be customised using custom CSS. See [here](/user-interface-ui/custom-css-snippets) for a community-curated set of CSS snippets to customise your UI.
-
-[Stash Plex Theme](/user-interface-ui/themes/plex) is a community created theme inspired by the popular Plex interface.
-
-# Custom Locales
-
-The localisation strings can be customised. The master list of default (en-GB) locale strings can be found [here](https://github.com/stashapp/stash/blob/develop/ui/v2.5/src/locales/en-GB.json){:target="_blank"}. The custom locale format is the same as this json file.
-
-For example, to override the `actions.add_directory` label (which is `Add Directory` by default), you would have the following in the custom locale:
-
-```
-{
- "actions": {
- "add_directory": "Some other description"
- }
-}
-```
-
-# Custom served folders
-
-It is possible to expose specific folders to the UI. This configuration is performed manually in the `config.yml` file only.
-
-Custom served content is exposed via the `/custom` URL path prefix.
-
-For example, in the `config.yml` file:
-```
-custom_served_folders:
- /: D:\stash\static
- /foo: D:\bar
-```
-
-With the above configuration, a request for `/custom/foo/bar.png` would return `D:\bar\bar.png`. The `/` entry matches anything that is not otherwise mapped by the other entries. For example, `/custom/baz/xyz.png` would return `D:\stash\static\baz\xyz.png`.
-
-Applications for this include using static images in custom css, like the Plex theme. For example, using the following config:
-```yml
-custom_served_folders:
- /: \custom
-```
-
-The `background.png` and `noise.png` files can be placed in the `custom` folder, then in the custom css, the `./background.png` and `./noise.png` strings can be replaced with `/custom/background.png` and `/custom/noise.png` respectively.
-
-Other applications are to add custom UIs to stash, accessible via `/custom`.
diff --git a/in-app-manual/introduction.md b/in-app-manual/introduction.md
deleted file mode 100644
index 2c304ba4..00000000
--- a/in-app-manual/introduction.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: clean
-title: Introduction
-nav_order: 1
-parent: In-app Manual
-
----
-
-Stash works by cataloging your media using the paths that you provide. Once you have [configured](http://localhost:9999/settings?tab=library){:target="_blank"} the locations where your media is stored, you can click the Scan button in [`Settings -> Tasks`](http://localhost:9999/settings?tab=tasks){:target="_blank"} and stash will begin scanning and importing your media into its library.
-
-For the best experience, it is recommmended that after a scan is finished, that video previews and sprites are generated. You can do this in [`Settings -> Tasks`](http://localhost:9999/settings?tab=tasks){:target="_blank"}. Note that currently it is only possible to perform one task at a time and there is no task queue, so the Generate task should be performed after Scan is complete.
-
-Once your media is imported, you are ready to begin creating Performers, Studios and Tags, and curating your content!
diff --git a/in-app-manual/keyboardshortcuts.md b/in-app-manual/keyboardshortcuts.md
index f4c0996c..e69de29b 100644
--- a/in-app-manual/keyboardshortcuts.md
+++ b/in-app-manual/keyboardshortcuts.md
@@ -1,209 +0,0 @@
----
-layout: clean
-title: Keyboard Shortcuts
-nav_order: 13
-parent: In-app Manual
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-# Global shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `?` | Display manual |
-
-## Global Navigation
-
-| Keyboard sequence | Target page |
-|-------------------|--------|
-| `g s` | Scenes |
-| `g i` | Images |
-| `g v` | Movies |
-| `g k` | Markers |
-| `g l` | Galleries |
-| `g p` | Performers |
-| `g u` | Studios |
-| `g t` | Tags |
-| `g z` | Settings |
-
-# Query page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `/` | Focus search field / focus query field in filter dialog |
-| `f` | Show Add Filter dialog |
-| `r` | Reshuffle if sorted by random |
-| `v g` | Set view to grid |
-| `v l` | Set view to list |
-| `v w` | Set view to wall |
-| `+` | Increase zoom slider |
-| `-` | Decrease zoom slider |
-| `←` | Previous page of results |
-| `→` | Next page of results |
-| `Shift + ←` | Go to current results page -10 |
-| `Shift + →` | Go to current results page +10 |
-| `Ctrl + Home` | Go to first page of results |
-| `Ctrl + End` | Go to last page of results |
-| `s a` | Select all on page |
-| `s n` | Unselect all |
-| `e` | Edit selected |
-| `d d` | Delete selected |
-
-# Scenes page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `p r` | Play random scene |
-
-# Scene page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `a` | Details tab |
-| `q` | Queue tab |
-| `k` | Markers tab |
-| `i` | File info tab |
-| `e` | Edit tab |
-| `h` | History tab |
-| `,` | Hide/Show sidebar |
-| `.` | Hide/Show scene scrubber |
-| `o` | Increment O-Counter |
-| `p n` | Play next scene in queue |
-| `p p` | Play previous scene in queue |
-| `p r` | Play random scene in queue |
-| `Space` | Play/pause player |
-| `Enter` | Play/pause player |
-| `←` | Seek backwards by 10 seconds |
-| `→` | Seek forwards by 10 seconds |
-| `Shift + ←` | Seek backwards by 5 seconds |
-| `Shift + →` | Seek forwards by 5 seconds |
-| `Ctrl/Alt + ←` | Seek backwards by 1 minute |
-| `Ctrl/Alt + →` | Seek forwards by 1 minute |
-| `{1-9}` | Seek to 10-90% duration |
-| `[` | Scrub backwards 10% duration |
-| `]` | Scrub forwards 10% duration |
-| `↑` | Increase volume 10% |
-| `↓` | Decrease volume 10% |
-| `m` | Toggle mute |
-| `l` | A/B looping toggle. Press once to set start point. Press again to set end point. Press again to disable loop. |
-| `Shift + l` | Toggle looping of scene when it's over |
-
-## Scene Markers tab shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `n` | Display Create Markers dialog |
-
-## Edit Scene tab shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `r {1-5}` | Set rating (stars) |
-| `r 0` | Unset rating (stars) |
-| `r {0-9} {0-9}` | Set rating (decimal - `00` for `10.0`) |
-| ``r ` `` | Unset rating (decimal) |
-| `s s` | Save Scene |
-| `d d` | Delete Scene |
-| `Ctrl + v` | Paste Scene cover |
-
-[//]: # "Commented until implementation is dealt with"
-[//]: # "(| `l` | Focus Gallery selector |)"
-[//]: # "(| `u` | Focus Studio selector |)"
-[//]: # "(| `p` | Focus Performers selector |)"
-[//]: # "(| `v` | Focus Movies selector |)"
-[//]: # "(| `t` | Focus Tags selector |)"
-
-# Movies Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `n` | New Movie |
-
-# Movie Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `e` | Edit Movie |
-| `s s` | Save Movie |
-| `d d` | Delete Movie |
-| `r {1-5}` | [Edit mode] Set rating (stars) |
-| `r 0` | [Edit mode] Unset rating (stars) |
-| `r {0-9} {0-9}` | [Edit mode] Set rating (decimal - `r 0 0` for `10.0`) |
-| ``r ` `` | [Edit mode] Unset rating (decimal) |
-| `,` | Expand/Collapse Details |
-| `Ctrl + v` | Paste Movie image |
-
-[//]: # "Commented until implementation is dealt with"
-[//]: # "(| `u` | Focus Studio selector (in edit mode) |)"
-
-# Markers Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `p r` | Play random marker |
-
-# Performers Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `n` | New Performer |
-| `p r` | Open random Performer |
-
-# Performer Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `c` | Scenes tab |
-| `e` | Edit tab |
-| `o` | Operations tab |
-| `f` | Toggle favourite |
-| `,` | Expand/Collapse Details |
-
-## Edit Performer tab shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `s s` | Save Performer |
-| `d d` | Delete Performer |
-| `Ctrl + v` | Paste Performer image |
-
-# Studios Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `n` | New Studio |
-
-# Studio Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `e` | Edit Studio |
-| `s s` | Save Studio |
-| `d d` | Delete Studio |
-| `,` | Expand/Collapse Details |
-| `Ctrl + v` | Paste Studio image |
-
-# Tags Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `n` | New Tag |
-
-# Tag Page shortcuts
-
-| Keyboard sequence | Action |
-|-------------------|--------|
-| `e` | Edit Tag |
-| `s s` | Save Tag |
-| `d d` | Delete Tag |
-| `,` | Expand/Collapse Details |
-| `Ctrl + v` | Paste Tag image |
\ No newline at end of file
diff --git a/in-app-manual/plugins.md b/in-app-manual/plugins.md
index 1f957f1f..e69de29b 100644
--- a/in-app-manual/plugins.md
+++ b/in-app-manual/plugins.md
@@ -1,325 +0,0 @@
----
-layout: clean
-title: Plugins
-nav_order: 8
-parent: In-app Manual
-has_children: true
-has_toc: false
-
----
-
-
-
- Table of Contents
-
- {: .text-delta }
-1. TOC
-{:toc}
-
-
-Stash supports plugins that can do the following:
-- perform custom tasks when triggered by the user from the Tasks page
-- perform custom tasks when triggered from specific events
-- add custom CSS to the UI
-- add custom JavaScript to the UI
-
-Plugin tasks can be implemented using embedded Javascript, or by calling an external binary.
-
-> **⚠️ Note:** Plugin support is still experimental and is likely to change.
-
-## Managing Plugins
-
-Plugins can be installed and managed from the `Settings > Plugins` page.
-
-Scrapers are installed using the `Available Plugins` section. This section allows configuring sources from which to install plugins. The `Community (stable)` source is configured by default. This source contains plugins for the current _stable_ version of stash.
-
-These are the plugin sources maintained by the stashapp organisation:
-
-| Name | Source URL | Recommended Local Path | Notes |
-|------|-----------|------------------------|-------|
-| Community (stable) | `https://stashapp.github.io/CommunityScripts/stable/index.yml` | `stable` | For the current stable version of stash. |
-| Community (develop) | `https://stashapp.github.io/CommunityScripts/develop/index.yml` | `develop` | For the develop version of stash. |
-
-Installed plugins can be updated or uninstalled from the `Installed Plugins` section.
-
-### Source URLs
-
-The source URL must return a yaml file containing all the available packages for the source. An example source yaml file looks like the following:
-
-```
-- id:
- name:
- version:
- date:
- requires:
- -
- - ...
- path:
- sha256:
- metadata:
-
-- ...
-```
-
-Path can be a relative path to the zip file or an external URL.
-
-# Adding plugins manually
-
-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 `$HOME/.stash` directory or the current working directory.
-
-Plugins are added by adding configuration yaml files (format: `pluginName.yml`) to the `plugins` directory.
-
-Loaded plugins can be viewed in the Plugins page of the Settings. After plugins are added, removed or edited while stash is running, they can be reloaded by clicking `Reload Plugins` button.
-
-# Using Plugins
-
-Plugins provide tasks which can be run from the Tasks page.
-
-# Creating Plugins
-
-## Plugin Configuration File Format
-
-The basic structure of a plugin configuration file is as follows:
-
-```
-name:
-description:
-version:
-url:
-ui:
- # optional list of css files to include in the UI
- css:
- -
-
- # optional list of js files to include in the UI
- javascript:
- -
-
- # optional list of plugin IDs to load prior to this plugin
- requires:
- -
-
- # optional list of assets
- assets:
- urlPrefix: fsLocation
- ...
-
- # content-security policy overrides
- csp:
- script-src:
- - http://alloweddomain.com
-
- style-src:
- - http://alloweddomain.com
-
- connect-src:
- - http://alloweddomain.com
-
- # map of setting names to be displayed in the plugins page in the UI
- settings:
- # internal name
- foo:
- # name to display in the UI
- displayName: Foo
- # type of the attribute to show in the UI
- # can be BOOLEAN, NUMBER, or STRING
- type: BOOLEAN
-
-# the following are used for plugin tasks only
-exec:
- - ...
-interface: [interface type]
-errLog: [one of none trace, debug, info, warning, error]
-tasks:
- - ...
-```
-
-The `name`, `description`, `version` and `url` fields are displayed on the plugins page.
-
-The `exec`, `interface`, `errLog` and `tasks` fields are used only for plugins with tasks.
-
-The `settings` field is used to display plugin settings on the plugins page. Plugin settings can also be set using the graphql mutation `configurePlugin` - the settings set this way do _not_ need to be specified in the `settings` field unless they are to be displayed in the stock plugin settings UI.
-
-## UI Configuration
-
-The `css` and `javascript` field values may be relative paths to the plugin configuration file, or
-may be full external URLs.
-
-The `requires` field is a list of plugin IDs which must have their javascript/css files loaded
-before this plugins javascript/css files.
-
-The `assets` field is a map of URL prefixes to filesystem paths relative to the plugin configuration file.
-Assets are mounted to the `/plugin/{pluginID}/assets` path.
-
-As an example, for a plugin with id `foo` with the following `assets` value:
-```
-assets:
- foo: bar
- /: .
-```
-The following URLs will be mapped to these locations:
-`/plugin/foo/assets/foo/file.txt` -> `{pluginDir}/bar/file.txt`
-`/plugin/foo/assets/file.txt` -> `{pluginDir}/file.txt`
-`/plugin/foo/assets/bar/file.txt` -> `{pluginDir}/bar/file.txt` (via the `/` entry)
-
-Mappings that try to go outside of the directory containing the plugin configuration file will be
-ignored.
-
-The `csp` field contains overrides to the content security policies. The URLs in `script-src`,
-`style-src` and `connect-src` will be added to the applicable content security policy.
-
-See [External Plugins](/in-app-manual/plugins/externalplugins) for details for making external plugins.
-
-See [Embedded Plugins](/in-app-manual/plugins/embeddedplugins) for details for making embedded plugins.
-
-## Plugin Task Input
-
-Plugin tasks may accept an input from the stash server. This input is encoded according to the interface, and has the following structure (presented here in JSON format):
-```
-{
- "server_connection": {
- "Scheme": "http",
- "Port": 9999,
- "SessionCookie": {
- "Name":"session",
- "Value":"cookie-value",
- "Path":"",
- "Domain":"",
- "Expires":"0001-01-01T00:00:00Z",
- "RawExpires":"",
- "MaxAge":0,
- "Secure":false,
- "HttpOnly":false,
- "SameSite":0,
- "Raw":"",
- "Unparsed":null
- },
- "Dir": ,
- "PluginDir": ,
- },
- "args": {
- "argKey": "argValue"
- }
-}
-```
-
-The `server_connection` field contains all the information needed for a plugin to access the parent stash server, if necessary.
-
-## Plugin Task Output
-
-Plugin output is expected in the following structure (presented here as JSON format):
-
-```
-{
- "error":
- "output":
-}
-```
-
-The `error` field is logged in stash at the `error` log level if present. The `output` is written at the `debug` log level.
-
-## Task Configuration
-
-Tasks are configured using the following structure:
-
-```
-tasks:
- - name:
- description:
- defaultArgs:
- argKey: argValue
-```
-
-A plugin configuration may contain multiple tasks.
-
-The `defaultArgs` field is used to add inputs to the plugin input sent to the plugin.
-
-## Hook Configuration
-
-Stash supports executing plugin operations via triggering of a hook during a stash operation.
-
-Hooks are configured using a similar structure to tasks:
-
-```
-hooks:
- - name:
- description:
- triggeredBy:
- - ...
- defaultArgs:
- argKey: argValue
-```
-
-**Note:** it is possible for hooks to trigger eachother or themselves if they perform mutations. For safety, hooks will not be triggered if they have already been triggered in the context of the operation. Stash uses cookies to track this context, so it's important for plugins to send cookies when performing operations.
-
-### Trigger Types
-
-Trigger types use the following format:
-`