### ✨ New Features

* Markers now have an optional end time ([#5311](https://github.com/stashapp/stash/pull/5311), [#5633](https://github.com/stashapp/stash/pull/5633))
* Marker times now have sub-second precision ([#5431](https://github.com/stashapp/stash/pull/5431))
* Added Grid view for Markers. ([#5443](https://github.com/stashapp/stash/pull/5443))
* Scene markers can now be filtered and sorted by their duration. ([#5472](https://github.com/stashapp/stash/pull/5472))
* Added custom fields for Performers. ([#5487](https://github.com/stashapp/stash/pull/5487), [#5632](https://github.com/stashapp/stash/pull/5632))
* Added Sort Name to Tags. ([#5531](https://github.com/stashapp/stash/pull/5531))
* Added Image scraping. ([#5562](https://github.com/stashapp/stash/pull/5562))
* It is now possible to configure an API key for a stash scraper source. ([#5474](https://github.com/stashapp/stash/pull/5474))

### 🎨 Improvements

* Changed modifier buttons to be selectable options in object filter selectors. ([#5203](https://github.com/stashapp/stash/pull/5203))
* Changed Group Details images to be a flippable front/back rather than showing both at once. ([#5367](https://github.com/stashapp/stash/pull/5367))
* Performer select now shows the performer age based on the date field. ([#5110](https://github.com/stashapp/stash/pull/5110))
* Stash IDs now have an Updated At field. ([#5259](https://github.com/stashapp/stash/pull/5259))
* Performer Death Date is now fetched from stash-box. ([#5653](https://github.com/stashapp/stash/pull/5653))
* Batch Performer Update now handles Performers merged on stash-box. ([#5664](https://github.com/stashapp/stash/pull/5664))
* ETA is now shown for tasks. ([#5535](https://github.com/stashapp/stash/pull/5535))
* Scene Updated At field is now updated when Interactive Heatmap is generated. ([#5401](https://github.com/stashapp/stash/pull/5401))
* Handy now resyncs automatically. ([#5581](https://github.com/stashapp/stash/pull/5581))
* It is now possible to query by scene name in a stash scraper. ([#5722](https://github.com/stashapp/stash/pull/5722))
* Added Scene Code sort by option. ([#5708](https://github.com/stashapp/stash/pull/5708))

### 🐛 Bug fixes

* **[0.28.1]** Fixed scene not playing from sub-second marker position when navigating from markers page. ([#5744](https://github.com/stashapp/stash/pull/5744))
* **[0.28.1]** Fixed URL not being excluded correctly in Studio tagger. ([#5743](https://github.com/stashapp/stash/pull/5743))
* **[0.28.1]** Fixed UI crash when loading saved filter with timestamp criteria. ([#5742](https://github.com/stashapp/stash/pull/5742))
* Fixed errors when scraping stash-box performers with null birthdates. ([#5428](https://github.com/stashapp/stash/pull/5248))
* Fixed video files with identical phashes being merged during scan. ([#5461](https://github.com/stashapp/stash/pull/5461))
* Fixed scraped tags showing the scraped tag name rather than the matched tag name. ([#5462](https://github.com/stashapp/stash/pull/5462))
* Fixed unmatched scraped tags appearing in the Tag field when scraping groups. ([#5522](https://github.com/stashapp/stash/pull/5522))
* Fixed issue where creating a new tag from the Tag selector would not update the tags field. ([#5522](https://github.com/stashapp/stash/pull/5522))
* Invalid tagger blacklist entries now show an error message instead of crashing the UI. ([#5497](https://github.com/stashapp/stash/pull/5497))
* Fixed Performer aliases not being excluded when updating from tagger. ([#5566](https://github.com/stashapp/stash/pull/5566)
* Fixed scene scrubber not working correctly in Tagger view. ([#5507](https://github.com/stashapp/stash/pull/5507))
* Fixed Handy script not playing after revisiting scene. ([#5578](https://github.com/stashapp/stash/pull/5578))
* Fixed various Handy playback issues. ([#5576](https://github.com/stashapp/stash/pull/5576))
* Fixed incorrect image being shown in the lightbox when clicking on Group or Performer images in the applicable detail pages. ([#5659](https://github.com/stashapp/stash/pull/5659))
* Saved Filters are now included in full export/import. ([#5465](https://github.com/stashapp/stash/pull/5465))
* Fixed issue where entering text into the setup input fields would defocus the fields. ([#5459](https://github.com/stashapp/stash/pull/5459))
* Fixed race condition when registering plugin custom routes. ([#5523](https://github.com/stashapp/stash/pull/5523))
* Fixed scraping multiple URLs using the mapped scrapers. ([#5677](https://github.com/stashapp/stash/pull/5677))
* Fixed excluded tags not being excluded when identifying scenes. ([#5686](https://github.com/stashapp/stash/pull/5686))
* Fixed database locked error messages after migrating. ([#5723](https://github.com/stashapp/stash/pull/5723))
* Fixed issue where scraped tags that resolve to the same tag would result in no scraped tags being shown. ([#5733](https://github.com/stashapp/stash/pull/5733))
* Fixed Image Wall Margin setting not working correctly. ([#5496](https://github.com/stashapp/stash/pull/5496))
* Fixed scraper errors when scraping from a stash instance. ([#5474](https://github.com/stashapp/stash/pull/5474))
* Fixed duplicate Groups Scene filter criterion option. ([#5504](https://github.com/stashapp/stash/pull/5504))
* Fixed back button returning to non-existing tag after merging. ([#5712](https://github.com/stashapp/stash/pull/5712))
