3252 Commits

Author SHA1 Message Date
Marco
5646b7932b Fix: Prevent Nil Pointer Dereference in scrapeScene (#6857)
* fix(scraper): prevent nil pointer dereference in scrapeScene

When scrapeScene finds no results, ret remains nil and is passed to
processSceneRelationships, which unconditionally dereferences it at
line 89 (ret.Performers = ...), causing a panic.

Initialize ret to an empty ScrapedScene so processSceneRelationships
always has a valid pointer. This also preserves the intent of #3953:
returning a scene with only relationship fields set when scraped
non-relationship data is absent.

Fixes panic: runtime error: invalid memory address or nil pointer
dereference at pkg/scraper/mapped.go:89 in processSceneRelationships

* Update mapped.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* test(scraper): add relationships-only scene regression test

Signed-off-by: Marco <130363067+dutchdevil-83@users.noreply.github.com>

* test(scraper): restore scene test and add relationships regression

---------

Signed-off-by: Marco <130363067+dutchdevil-83@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
latest_develop
2026-05-28 15:20:33 -05:00
Slick Daddy
4187d164b3 fix: close HTTP response bodies and add nil guards for Primary() calls (#6930)
* Fix HTTP body leaks, nil pointer panics, and file handle cleanup

* Extract unzipFile loop body into unzipFileEntry helper

The unzipFile function had defer o.Close() and defer i.Close() inside
a for loop, which is a Go antipattern — defers are function-scoped and
wouldn't execute until unzipFile returned, leaving file handles open
across iterations. Extracting the per-file logic into unzipFileEntry
ensures each defer fires when that function returns, at the end of each
loop iteration.
2026-05-25 10:09:44 +10:00
Slick Daddy
4a4cd1c5d1 add ARCHITECTURE.MD (#6926)
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2026-05-20 11:11:09 +10:00
Slick Daddy
31570955cd Fix typos in source code and documentation (#6940) 2026-05-20 09:08:09 +10:00
sprayidle
70437b4866 Stop pagination footer blocking clicks on elements horizontal to it (#6895) 2026-05-18 17:20:17 +10:00
WithoutPants
bb67152f95 Add related object resolves to file graphql types (#6938)
* Add scenes/images/galleries fields to graphql file types
* Consolidate file id loaders
2026-05-18 16:52:14 +10:00
WithoutPants
9b21f2bb28 Workaround content not showing when tabKey is unset. (#6923)
Don't render tabs at all until tabKey is set.
2026-05-13 14:59:17 +10:00
Slick Daddy
80df250e36 Add list view for Studios page (#6913)
* Implement list view for Studios page

- Add StudioListTable component with columns for logo, name, aliases, rating, scene count, image count, gallery count, performer count, and related studios
- Update StudioList component to use StudioListTable for List display mode
- Add DisplayMode.List to StudioListFilterOptions to enable list view option in UI

* Remove aliases from NameCell in StudioListTable

* Update StudioListTable: conditional image rendering, intl labels, add related_studios key
* Add StudioListTable.scss and import it

---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2026-05-12 14:23:34 +10:00
WithoutPants
fc0b2a5d96 Fix OR sub-filter not using correct table join type (#6920)
* Remove invalid duplicate named objects from test setup

Studios and tags are enforced to have unique names, so it doesn't make sense to allow them in the datalayer tests

* Convert inner joins to left joins when using or sub-filter
2026-05-12 14:04:07 +10:00
dev-null-life
01a7583364 Refresh file info counter after deleting a file (#6841)
The mutateDeleteFiles Apollo cache update evicted the plural list
queries (findScenes/findImages/findGalleries) but not the singular
detail queries, so the "File Info" counter on a scene/image/gallery
detail page stayed stale until a manual refresh.

Co-authored-by: dev-null-life <264850222+dev-null-life@users.noreply.github.com>
2026-05-05 14:45:33 +10:00
feederbox826
9234979084 [ci] add explicit flow for makefile, add make install (#6877)
* [ci] add explicit flow for makefile, add make install
* [ci] re-add touch index.html
* [ci] run integration tests without generate
* [ci] switch from spaces to tabs
---------
Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
2026-05-05 14:44:47 +10:00
feederbox826
46f72e5574 [docker] bump cuda, node version (#6890)
12.8 was superceded by 12.8.3 and 13 has since been released.

Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
2026-05-05 14:03:01 +10:00
Stash-KennyG
3afe29215d Align release Dockerfiles with Go 1.25 for backend builds. (#6889)
The x86_64 and CUDA backend stages still used golang:1.24.3 while go.mod requires Go 1.25, which broke make docker-build under GOTOOLCHAIN=local. Bump both images to golang:1.25.9 to match docker/compiler/Dockerfile and PR #6869.

Verified with: make docker-build

Fixes https://github.com/stashapp/stash/issues/6887

Co-authored-by: KennyG <kennyg@kennyg.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-05 14:02:33 +10:00
Gykes
db4eabea81 New: Allow Description and Alias on Tag Creation in Scene Tagger (#6872) 2026-05-03 15:32:28 -07:00
dependabot[bot]
1ec5583931 Bump golang.org/x/image from 0.18.0 to 0.38.0 (#6774)
Bumps [golang.org/x/image](https://github.com/golang/image) from 0.18.0 to 0.38.0.
- [Commits](https://github.com/golang/image/compare/v0.18.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/image
  dependency-version: 0.38.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-29 10:45:36 +10:00
WithoutPants
2b29207f1e Upgrade go to 1.25.9 and golangci-lint (#6869)
* Bump go version in go.mod
* Update compiler image.

Changed github download url since existing one didn't have version 12 of the SDK.

* Update macOS requirements in README for v0.32.0
* Update lint action
* Bump golangci-lint version
* Migrate golangci-lint config
* Fix QF1012 errors

(Use fmt.Fprintf(...) instead of WriteString(fmt.Sprintf(...)))

* Fix QF1003 errors

(could use tagged switch)

* Fix ST1005 errors

(error string capitalisation)

* Fix ST1011 errors

(seconds suffix)

* Fix QF1006 errors

(lift into loop condition)

* Fix QF1002 errors

(switch condition)

* Fix gocritic error

(deprecated paragraph)

* Fix incorrect nolint directive

* Ignore specific checks

noctx should be addressed in a later PR
---------
Co-authored-by: DogmaDragon <103123951+DogmaDragon@users.noreply.github.com>
Co-authored-by: feederbox826 <me@feederbox.cc>
2026-04-29 10:13:58 +10:00
WithoutPants
98fd0267d0 Update go.sum 2026-04-28 14:01:50 +10:00
dependabot[bot]
3f83a84afb Bump github.com/antchfx/xpath from 1.3.5 to 1.3.6 (#6763)
Bumps [github.com/antchfx/xpath](https://github.com/antchfx/xpath) from 1.3.5 to 1.3.6.
- [Release notes](https://github.com/antchfx/xpath/releases)
- [Commits](https://github.com/antchfx/xpath/compare/v1.3.5...v1.3.6)

---
updated-dependencies:
- dependency-name: github.com/antchfx/xpath
  dependency-version: 1.3.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-28 13:50:43 +10:00
WithoutPants
af6491a36f Pnpm dedupe and overrides (#6868)
* Run pnpm dedupe
* Override alerted transitive dependencies
2026-04-28 13:45:45 +10:00
dependabot[bot]
cea3c0383f Bump lodash-es from 4.17.23 to 4.18.1 in /ui/v2.5 (#6790)
Bumps [lodash-es](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash-es
  dependency-version: 4.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-28 11:50:30 +10:00
dependabot[bot]
2c98ad4d78 Bump vite from 7.3.1 to 7.3.2 in /ui/v2.5 (#6862)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.2
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-28 11:45:31 +10:00
Niklas Wagner
103181a6d2 feat: include api key in funscript url (#6760) 2026-04-24 14:59:24 +10:00
WithoutPants
8e070717e5 Optimise table joins (#6648)
* Use inner joins where it makes sense to do so
* Don't trim stash ids
2026-04-24 14:38:11 +10:00
feederbox826
6004ed52af switch to gosx-notifier fork (#6714)
* switch to gosx-notifier fork
* [ci] add macos bundle
---------
Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
2026-04-24 14:33:23 +10:00
(Moai Emoji)
0b811e13b9 Remove empty directories on Clean Generated Files with Blobs (#6749) 2026-04-24 14:29:12 +10:00
feederbox826
083ba25d04 ui package updates sprint 1 (#6777)
* minor package version bumps, remove string.replaceAll polyfill
* update universal-cookie
* bump flag-icons
* [apollo] replace cloneDeep with lodash-es/CloneDeep
* [apollo] partial upgrade to 3.14
* remove dom-screen-wake-lock
* switch videojs-vr library for xvr support. minor bumps
* vite 7
* bump ua-parser-js
* bump postcss
* bump polyfills
* partial bump eslint to v8, otherwise we lose airbnb
* bump typescript to 5.9
* ensure node engine, remove homepage
2026-04-24 14:14:07 +10:00
Gykes
a33cca6033 Fix: Release DB Lock on Large Image Libraries (#6845) 2026-04-23 14:57:53 +10:00
Gykes
22d2dbc46b Merge pull request #6838 from smith113-p/link
Fix: Correct stash ID links in merge dialogs
2026-04-21 17:11:48 -07:00
DogmaDragon
2c8a0ad192 Add architecture section 2026-04-19 23:48:59 +03:00
Gykes
443de78260 Merge pull request #6802 from stashapp/docs-normalize-manual-headers
Normalize manual headers
2026-04-17 13:40:03 -07:00
smith113-p
ada05a59d0 Format 2026-04-16 20:00:22 -04:00
smith113-p
fb1a548be1 Correct stash ID links in merge dialogs
The <StashIDList/> element hardcoded a link type of "scenes", so the
tag and performer merge dialogs had incorrect links.

Reported in Discord #bugs
2026-04-16 19:55:53 -04:00
Gykes
26cd867a6a Merge pull request #6773 from stashapp/docs-6673
Document details being searchable field on images
2026-04-13 22:36:43 -07:00
Gykes
f26ae0724b Merge pull request #6772 from stashapp/docs-6449
Update object fields in scraper documentation
2026-04-13 22:36:29 -07:00
DogmaDragon
4de2351e7c Clarify caption file naming conventions in documentation (#6821) v0.31.1 2026-04-13 11:03:09 +10:00
WithoutPants
82d12145cc Fix typo in tag export (#6819) 2026-04-13 10:53:12 +10:00
WithoutPants
968a97aa45 Update changelog 2026-04-10 16:06:29 +10:00
dev-null-life
f920bd8b8e Fix WebSocket UTF-8 error for non-UTF-8 file paths in subscriptions (#6810)
* Fix WebSocket UTF-8 error for non-UTF-8 file paths in subscriptions

Sanitize log messages and job fields (description, subtasks, error)
before sending over WebSocket. File paths with non-UTF-8 characters
caused the browser to close the connection with "Could not decode a
text frame as UTF-8." Invalid bytes are replaced with U+FFFD.

Only the API response layer is affected — underlying stored data is
unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Replace direct ToValidUTF8 calls to new sanitiseWebsocketString function
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2026-04-10 13:42:42 +10:00
WithoutPants
9b5c0b0e48 Match tag names/aliases exactly when testing uniqueness (#6809)
* Add tagStore.FindByAlias method
* Change tag.ByName and ByAlias to use exact queries instead of fuzzy matching
2026-04-08 13:11:12 +10:00
WithoutPants
034ae1a141 Try to create backup directory during migrate. Log warning on failure (#6808) 2026-04-08 11:30:32 +10:00
smith113-p
3af546db92 Let the stash ID pill shrink in tagger (#6807)
* Let the stash ID pill shrink in tagger

On very narrow viewports (e.g. mobile), the stash ID pill will
overflow its container. With this PR, it will instead limit itself
to the width of the container and display with an ellipsis if
necessary.

Fixes #6786
2026-04-08 10:17:57 +10:00
DogmaDragon
3b90e5191a Merge branch 'develop' into docs-normalize-manual-headers 2026-04-07 09:42:40 +03:00
WithoutPants
60ce007c02 Show warning when creating parent tag without remote_site_id (#6805) 2026-04-07 16:34:43 +10:00
WithoutPants
f81053ae7d Reset page when setting filter criteria (#6804)
Fixes sidebar folder filter not resetting page when selecting folders
2026-04-07 16:33:50 +10:00
WithoutPants
98074e3b57 Fix clicking on scene/marker wall item pushing to history twice (#6803) 2026-04-07 16:33:33 +10:00
Gykes
57ddec93e0 Fix: Update Postmigration 84 to Handle De-Duplicate of Folders. (#6792)
* update postmigration to handle deduplicate folders.
* Split post-migration to perform some tasks before the schema migration
* Reparent files and delete duplicate folder if possible
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2026-04-07 16:28:01 +10:00
DogmaDragon
5edd299b10 Clarify scene fingerprint submission details (#6784) 2026-04-07 15:32:53 +10:00
feederbox826
672147deaf fix memory leak (#6796)
* allow channels to passively drain, empty fileQueue, scanner after scanning
* Prevent job executor retention in subscription channels
---------
Co-authored-by: feederbox826 <feederbox826@users.noreply.github.com>
Co-authored-by: Gykes <Gykes@pm.me>
2026-04-07 09:39:30 +10:00
DogmaDragon
6aaf3fe1b7 Add GitHub Sponsors to Contributing.md 2026-04-07 01:35:46 +03:00
DogmaDragon
5b857663f1 Normalize header casing in TroubleshootingMode.md 2026-04-07 01:33:53 +03:00