WithoutPants
5b3785f164
Revert stashIDCriterionHandler changes. Reimplement stashIDsCriterionHandler to not use stringCriterionHandler ( #6496 )
2026-01-16 10:21:15 +11:00
sashapp
ed3a239366
Implement stash_ids_endpoint for the SceneFilterType ( #6401 )
...
* Implement stash_ids_endpoint for the SceneFilterType
* Reduce code duplication by calling the stashIDsCriterionHandler from the stashIDCriterionHandler
* Mark stash_id_endpoint in SceneFilterType, StudioFilterType, and PerformerFilterType as deprecated
2026-01-14 14:53:40 +11:00
moonrise-outshoot
2a5b59a96a
Fix duplicate file detection in zip archives ( #6493 )
...
When scanning a zip archive duplicate images are being detected as renames rather than duplicates.
This is because in `scanJob.getFileFS` the size of the inner file (`my_archive.zip/001.png`) was being passed to `OpenZip` rather than the size of the zip archive (`my_archive.zip`), causing it to fail when opening the archive. This caused `handleRename` to incorrectly detect it as a rename.
The effects of that are:
- no info on duplicates in the file data
- the file will take the name/path of the final duplicate scanned rather than the first
2026-01-14 14:52:50 +11:00
WithoutPants
d7d7530c78
Add non-binary gender icon and colour transgender icons ( #6489 )
...
* Add data-gender to gender icon and color transgender gender icons
* Upgrade fontawesome to 7.1
* Add non-binary icon and fix title not showing
2026-01-14 14:28:44 +11:00
RyanAtNight
211f06963e
Add Invert Selection feature to list toolbars ( #6491 )
2026-01-14 14:20:07 +11:00
Gykes
0fa132cf60
FR: Add Delete Button For Scene Covers ( #6444 )
2026-01-14 14:13:41 +11:00
Gykes
77d0008c6d
FR: Save & New Button on Objects ( #6438 )
2026-01-14 14:06:21 +11:00
Valkyr-JS
b4969add27
Plugin API - recommendation row components ( #6492 )
...
* Patched RecommendationRow component
* Patched @ant-design/react-slick library to ReactSlick
* Patched GalleryRecommendationRow component
* Patched GroupRecommendationRow component
* Patched ImageRecommendationRow component
* Patched PerformerRecommendationRow component
* Patched SceneRecommendationRow component
* Patched SceneMarkerRecommendationRow component
* Patched StudioRecommendationRow component
* Patched TagRecommendationRow component
2026-01-14 09:29:57 +11:00
Valkyr-JS
6049b21d22
Plugin API - card grid components ( #6482 )
...
* SceneCardsGrid plugin API patch
* GalleryCardGrid plugin API patch
* GroupCardGrid plugin API patch
* ImageGridCard plugin API patch
* PerformerCardGrid plugin API patch
* ImageGridCard name corrected
* SceneMarkerCardsGrid plugin API patch
* StudioCardGrid plugin API patch
* TagCardGrid plugin API patch
* GalleryGridCard.tsx renamed to GalleryCardGrid.tsx
* ImageGridCard renamed to ImageCardGrid
* SceneCardsGrid renamed to SceneCardGrid
* SceneMarkerCardsGrid renamed to SceneMarkerCardGrid
2026-01-13 15:49:50 +11:00
ghuds540
deada580e5
fix: align card images to center ( #6481 )
2026-01-12 11:17:41 +11:00
CJ
95b1bce917
fix(dlna): improve activity tracking accuracy and efficiency ( #6483 )
...
* fix(dlna): improve activity tracking accuracy and efficiency
- Remove play duration tracking: DLNA clients buffer aggressively and
don't report playback position, making duration estimates unreliable.
Saving inaccurate values corrupts analytics.
- Combine database transactions: Resume time and view count updates
now happen in a single transaction for atomicity and performance.
- Keep resume time tracking: While imprecise, it provides useful
"continue watching" hints. The cost of being wrong is low (user
just seeks).
* remove elasped time check
2026-01-12 11:12:03 +11:00
RyanAtNight
579fc66275
Add checkbox controls to Wall View and Tagger for Scenes, Scene Markers, Images, and Galleries ( #6476 )
2026-01-12 11:06:57 +11:00
funntime
c9fa3b76d9
Update chromedp and cdproto dependencies ( #6486 )
2026-01-12 10:46:50 +11:00
Valkyr-JS
cf3489efdc
Plugin API - React Font Awesome library ( #6487 )
...
* ReactFontAwesome added to plugin API libraries
* ReactFontAwesome added to plugin API export
2026-01-11 18:07:53 +11:00
CJ
9b709ef614
Perf: Add lightweight ListGroupData fragment for groups list ( #6478 )
...
Create a new ListGroupData fragment that excludes expensive recursive
count fields (scene_count_all, sub_group_count_all, etc. with depth: -1).
These fields cause 10+ second queries on large databases when loading
the groups list page.
The full GroupData fragment is preserved for detail views where the
recursive counts are needed.
2026-01-06 11:48:16 +11:00
CJ
c0260781a5
fix(scraper): handle base64 data URIs in processImageField ( #6480 )
...
Add check to skip HTTP fetch for non-HTTP URLs in processImageField(),
matching the existing behavior in setPerformerImage() and setStudioImage().
This allows scrapers to return base64 data URIs (e.g.,
`data:image/jpeg;base64,...`) directly without triggering an HTTP fetch
error. Previously, processImageField() would attempt to create an HTTP
request with the data URI as the URL, causing "Could not set image using
URL" warnings.
2026-01-06 11:47:32 +11:00
hckrman101
fa80454891
Resume after scrubbing, hide player UI faster ( #6336 )
2026-01-06 11:46:29 +11:00
Valkyr-JS
1e6bf74385
Plugin API more patchable components ( #6463 )
...
* StudioDetailsPanel
* StudioCard
* GridCard
* ImageGridCard
* ImageCard
* GroupCard
* SceneMarkerCard.Popovers
* SceneMarkerCard.Details
* SceneMarkerCard.Image
* SceneMarkerCard
2026-01-06 11:14:48 +11:00
CJ
3b5e1db2aa
feat(ui): make CustomFieldsInput patchable via PluginApi ( #6468 )
...
Wrap the CustomFieldsInput component with PatchComponent to allow
plugins to modify custom field input behavior. This enables plugins
to inject default fields, modify the onChange handler, or customize
the component rendering.
2026-01-06 11:12:59 +11:00
feederbox826
6eed5390e1
specify URL for stash ID endpoint ( #6464 )
2026-01-06 11:12:03 +11:00
Gykes
81e8ccb5a9
FR: Autopopulate Stash-ID Search Box ( #6447 )
2026-01-05 17:34:43 +11:00
Gykes
45dc892a54
FR: Hide Already Installed Plugins or Scrapers ( #6443 )
2026-01-05 17:04:28 +11:00
Gykes
dc7ebadb16
FR: Update Tray Notification to Include Port ( #6448 )
2026-01-05 16:37:18 +11:00
Gykes
956af44a29
FR: Sort Scenes and Images by Resolution ( #6441 )
2026-01-05 16:36:21 +11:00
Gykes
09ba41b2bb
Chore: Update htmlQuery and Xpath dependencies ( #6434 )
2026-01-05 16:21:55 +11:00
Gykes
91e1ec520f
FR: Allow Marker Screenshot Generation Unconditionally ( #6433 )
2026-01-05 16:20:01 +11:00
ayaya
56822dbdc5
Fix hardware decoding detection for 10-bit videos on rkmpp ( #6420 )
2026-01-05 16:12:44 +11:00
bob12224
39d3e63cbf
Remove hiding the age in SFW mode ( #6450 )
2026-01-05 16:11:42 +11:00
CJ
66ceceeaf1
feat(dlna): add activity tracking for DLNA playback ( #6407 )
...
Adds time-based activity tracking for scenes played via DLNA, enabling
play count, play duration, and resume time tracking similar to the
web frontend.
Key features:
- Uses existing 'trackActivity' UI setting (no new config needed)
- Time-based tracking (elapsed session time / video duration)
- 5-minute session timeout to handle aggressive client buffering
- Minimum thresholds before saving (1% watched or 5 seconds)
- Respects minimumPlayPercent setting for play count increment
Implementation:
- New ActivityTracker in internal/dlna/activity.go
- Session management with automatic expiration
- Integration via DLNA service initialization
Limitations:
- Cannot detect actual playback position (only elapsed time)
- Cannot detect seeking or pause state
- Designed for upstream compatibility (no complex dependencies)
2026-01-05 16:10:52 +11:00
sezzim
65e82a0cf6
Performer merge ( #5910 )
...
* Implement merging of performers
* Make the tag merge UI consistent with other types of merges
* Add merge action in scene menu
---------
Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
2026-01-05 15:54:19 +11:00
WithoutPants
d962247016
Custom favicon and title ( #6366 )
...
* Load favicon if provided
* Add custom title setting
2026-01-05 11:30:31 +11:00
WithoutPants
08b87431c3
Safely handle panic in scan queue goroutine ( #6431 )
2026-01-05 11:28:00 +11:00
WithoutPants
b23b0267ad
Merge remote-tracking branch 'upstream/master' into develop
2025-12-18 14:57:33 +11:00
WithoutPants
772c69c359
Update changelog for 0.30.1
2025-12-18 14:54:46 +11:00
WithoutPants
e9f5e7d6b4
Fix handy not working correctly ( #6425 )
2025-12-18 14:52:42 +11:00
WithoutPants
af11189718
Set organised flag in gallery create ( #6418 )
2025-12-17 17:13:03 +11:00
WithoutPants
5b62cc66d4
Initialise IsDesktop early to avoid confusion due to ffmpeg checks ( #6417 )
2025-12-17 13:42:42 +11:00
WithoutPants
857e673d3e
Codeberg weblate ( #6416 )
...
* Translated using Weblate (Czech)
Currently translated at 100.0% (1250 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/cs/
* Translated using Weblate (Japanese)
Currently translated at 82.0% (1026 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/ja/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 69.1% (864 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/pt_BR/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 69.1% (864 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/pt_BR/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1250 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/zh_Hans/
* Translated using Weblate (Indonesian)
Currently translated at 48.3% (604 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/id/
* Translated using Weblate (Estonian)
Currently translated at 100.0% (1251 of 1251 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/et/
* Translated using Weblate (French)
Currently translated at 100.0% (1251 of 1251 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
---------
Co-authored-by: NymeriaCZ <nymeriacz@noreply.codeberg.org>
Co-authored-by: hirokazuk <hirokazuk@noreply.codeberg.org>
Co-authored-by: BimboStarsFan <bimbostarsfan@noreply.codeberg.org>
Co-authored-by: icaro <icaro@noreply.codeberg.org>
Co-authored-by: wql219 <wql219@noreply.codeberg.org>
Co-authored-by: koukyoukoku <koukyoukoku@noreply.codeberg.org>
Co-authored-by: Zesty6249 <zesty6249@noreply.codeberg.org>
Co-authored-by: doodoo <doodoo@noreply.codeberg.org>
2025-12-17 10:02:35 +11:00
WithoutPants
b2df819283
Update changelog
2025-12-17 09:28:46 +11:00
WithoutPants
f71d0ac2dd
Fix scrape result row showing when results are same ( #6415 )
2025-12-17 08:19:45 +11:00
WithoutPants
b23c3cd618
Perform hardware codec checks on separate go routine ( #6414 )
...
Warn if tests are taking a long time
Add WaitDelay to try to kill process if hanging
2025-12-15 14:57:00 +11:00
WithoutPants
1691280d1b
Fix excludes handling in performer studio filter ( #6413 )
2025-12-15 11:49:30 +11:00
WithoutPants
7a8a2c7687
Send inner props to CheckboxSelect Option ( #6411 )
...
Fixes onChange handler not being called
2025-12-15 08:45:28 +11:00
WithoutPants
f64cd5bfac
Add sfw label for o-count in stats page ( #6410 )
2025-12-15 08:16:58 +11:00
WithoutPants
65327a6102
Add useInitialState to studio in search result ( #6409 )
2025-12-15 08:16:46 +11:00
WithoutPants
62babfb332
Add more patchable components ( #6404 )
2025-12-15 07:28:58 +11:00
WithoutPants
67b1dd8dd0
Add tag stash ids filter criterion ( #6403 )
...
* Add stash id filter to tag filter
* Add tag stash id criterion in UI
2025-12-12 08:54:57 +11:00
WithoutPants
25fdf676d2
Handle linking tags in non-stash-box environment ( #6402 )
2025-12-12 07:49:07 +11:00
WithoutPants
1580cf9bd9
Provide more information when scraper loadURL fails
2025-12-12 07:17:41 +11:00
WithoutPants
badebfd8f9
Codeberg weblate ( #6399 )
...
* Translated using Weblate (Swedish)
Currently translated at 100.0% (1233 of 1233 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/sv/
* Translated using Weblate (French)
Currently translated at 100.0% (1236 of 1236 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (1236 of 1236 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Update translation files
Updated by "Cleanup translation files" add-on in Weblate.
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/
* Update translation files
Updated by "Cleanup translation files" add-on in Weblate.
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/
* Translated using Weblate (French)
Currently translated at 100.0% (1242 of 1242 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (1242 of 1242 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/es/
* Translated using Weblate (Estonian)
Currently translated at 100.0% (1242 of 1242 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/et/
* Translated using Weblate (Korean)
Currently translated at 100.0% (1242 of 1242 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/ko/
* Translated using Weblate (Korean)
Currently translated at 100.0% (1243 of 1243 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/ko/
* Translated using Weblate (Dutch)
Currently translated at 78.6% (978 of 1243 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/nl/
* Translated using Weblate (Swedish)
Currently translated at 100.0% (1243 of 1243 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/sv/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1243 of 1243 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/zh_Hans/
* Translated using Weblate (French)
Currently translated at 100.0% (1243 of 1243 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (1245 of 1245 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Translated using Weblate (Hindi)
Currently translated at 5.3% (67 of 1245 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/hi/
* Translated using Weblate (Korean)
Currently translated at 100.0% (1245 of 1245 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/ko/
* Translated using Weblate (German)
Currently translated at 98.0% (1221 of 1245 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/de/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (1245 of 1245 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/es/
* Translated using Weblate (Estonian)
Currently translated at 100.0% (1250 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/et/
* Translated using Weblate (French)
Currently translated at 100.0% (1250 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/fr/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 99.9% (1249 of 1250 strings)
Translation: stash/stash
Translate-URL: https://translate.codeberg.org/projects/stash/stash/zh_Hans/
---------
Co-authored-by: AlpacaSerious <alpacaserious@noreply.codeberg.org>
Co-authored-by: doodoo <doodoo@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: donlothario <donlothario@noreply.codeberg.org>
Co-authored-by: Zesty6249 <zesty6249@noreply.codeberg.org>
Co-authored-by: yec <yec@noreply.codeberg.org>
Co-authored-by: PhilipWaldman <philipwaldman@noreply.codeberg.org>
Co-authored-by: wql219 <wql219@noreply.codeberg.org>
Co-authored-by: asasin235 <asasin235@noreply.codeberg.org>
Co-authored-by: lugged9922 <lugged9922@noreply.codeberg.org>
Co-authored-by: upstairs <upstairs@noreply.codeberg.org>
2025-12-11 14:12:07 +11:00