|
Configuration 1 - Centered Positioning, Background Blur, Higher Scaling, No Offset
|
Configuration 2 - Custom Positioning, No Blur, Lower Scaling, Custom Offset
|
https://raw.githubusercontent.com/Fovty/HoverTrailer/master/manifest.json
Recommended companion plugin: install File Transformation (v2.2.1.0+) first. HoverTrailer auto-detects it and injects the client script through it instead of modifying files on disk.
Playback
- Netflix-style hover preview with configurable delay
- Multi-source trailer detection: local files, remote YouTube, and optional theme-video fallback
- Audio on/off with adjustable volume (muted during autoplay until the page has user activation — browser policy)
- Hover progress indicator on the card during the delay
Positioning modes
- Center — preview is centered in the viewport (default)
- Custom — preview is centered on the card with configurable offsets
- Anchor to Card — preview follows the card as the page scrolls (tethered)
Sizing
- Fit to Content (default) — matches the trailer's aspect ratio, scaled by a percentage you choose (50-1500%), clamped to 90% of the viewport
- Manual — fixed width and height in pixels
- Adjustable opacity and corner radius
Background blur
- Off / Full (uniform blur over the page) / Halo (dense blur right next to the preview, fading out over a configurable radius — hides distracting nearby posters without dimming the whole screen)
Behavior options
- Persistent preview — keep playing after the cursor leaves the card; dismiss with click, Escape, or by hovering a different card long enough for a new preview to start
- Focus trigger — keyboard/D-pad focus on a card triggers the preview (for Jellyfin Web in a TV browser or with spatial-navigation overlays). Mouse clicks don't re-trigger.
- Open Jellyfin Admin Dashboard
- Navigate to Plugins → Manage Repositories
- Click + (Add) to add a new repository
- Enter the Manifest URL:
https://raw.githubusercontent.com/Fovty/HoverTrailer/master/manifest.json - Click Save
- Navigate back to Plugins
- Search for "HoverTrailer"
- Click Install
- Restart Jellyfin server to activate the plugin
- Open Plugins → HoverTrailer → Settings to configure (every option has an inline description)
- Download the latest release from GitHub Releases
- Extract the
.dllfile to your Jellyfin plugins directory:- Windows:
%ProgramData%\Jellyfin\Server\plugins\HoverTrailer - Linux:
/var/lib/jellyfin/plugins/HoverTrailer - Docker:
/config/plugins/HoverTrailer
- Windows:
- Restart Jellyfin server
- Touch devices: hover is a pointer-only gesture, so the plugin disables itself on phones and tablets (UA sniff +
(hover: none)). - Native mobile / TV apps: Jellyfin's native mobile and smart-TV apps don't load the web frontend, so the plugin has no effect there. Focus Trigger covers the Jellyfin-Web-in-a-TV-browser case.
- If audio is enabled, the first hover after a fresh page load still plays muted. Chrome and Safari block unmuted autoplay until you interact with the page once — click anywhere and all subsequent hovers have audio.
- YouTube iframe aspect ratio is hardcoded to 16:9. The YouTube iframe is cross-origin so the actual video aspect can't be read.
- Check trailer availability — confirm the movie has a trailer URL or local trailer file in Jellyfin.
- Enable Debug Logging and watch the browser console (F12) for
[HoverTrailer]lines. - Audio: if you expect sound on the first hover, click anywhere in Jellyfin once to grant the page user activation.
- Confirm the plugin appears in the Jellyfin admin panel and is enabled.
- Hard reload the page (Ctrl+Shift+R / Cmd+Shift+R) — the client script is cached by the browser.
- Make sure you're on a desktop browser (phones and tablets skip the plugin by design).
If you see Access to the path '/usr/share/jellyfin/web/index.html' is denied, install the File Transformation plugin (see the recommendation under Manifest URL) — HoverTrailer will detect it and stop touching the web directory.
Manual alternatives if you can't use File Transformation
Fix file permissions:
docker exec -it jellyfin find / -name index.html
docker exec -it --user root jellyfin chown jellyfin:jellyfin /jellyfin/jellyfin-web/index.html
docker restart jellyfinOr bind-mount the file:
docker cp jellyfin:/jellyfin/jellyfin-web/index.html /path/to/jellyfin/config/index.html
# then in docker-compose.yml:
volumes:
- /path/to/jellyfin/config/index.html:/jellyfin/jellyfin-web/index.htmlgit clone https://github.com/Fovty/HoverTrailer.git
cd hovertrailer
# StyleCop warnings are treated as errors in CI; suppress locally:
dotnet build --configuration Release --property:TreatWarningsAsErrors=falseContributions welcome — fork, branch, PR. Match the existing code style, update docs alongside any configuration change, and test across browsers / Jellyfin versions.
This project is licensed under the MIT License - see the LICENSE file for details.
- Jellyfin Team - For the excellent media server platform
- IntroSkipper Plugin - Architecture and CI/CD inspiration
- Jellyscrub Plugin - Configuration UI patterns
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Jellyfin Community: Official Jellyfin Forums
Note: This plugin is not officially affiliated with Jellyfin or Netflix. It's a community-developed enhancement for the Jellyfin media server.




