Skip to content

Make the OSD a full custom progress bar and highlight media segments on the progress bar#786

Draft
VTRunner wants to merge 6 commits intojellyfin:masterfrom
VTRunner:master
Draft

Make the OSD a full custom progress bar and highlight media segments on the progress bar#786
VTRunner wants to merge 6 commits intojellyfin:masterfrom
VTRunner:master

Conversation

@VTRunner
Copy link
Contributor

Make the OSD a full custom progress bar and highlight media segments on the progress bar

Changes

This pull request includes:

  • For VideoPlayerView turn off the system UI.
  • Implement a full function custom progress bar based on the existing OSD.
  • Highlight media segments on the progress bar so that the user can see the location of commercials, intros, outros, etc.
  • Always use custom trickplay functionality.
  • Remove the setting to force display of custom trickplay (since custom trickplay is now always used.)
  • Use the existing jellyfin roku spinner as a buffering spinner during video loading, and add a progress percent based on the system provided bufferingStatus["percentage"].
  • During initial video buffering display the video's graphic (or description if no graphic) and season/episode in the upper left.
  • For Live TV make the progress bar display clock time based e.g. show the beginning of the rewind interval and where you have fast forwarded/rewound to but not started play as a clock time instead of an offset from the start of play.
  • In the existing clock module add the ability to return seconds to support this need when using the custom progress bar for Live TV.

This started as only a desire to highlight media segments on the progress bar, but when I discovered that it was not possible to reliably and exactly locate the system progress bar for different resolutions the rabbit hole became much deeper. In particular Live TV was a challenge with it's changing duration and shifting buffer window (based on the system provided pauseBufferEnd) as the rewind limit was reached, so a focus on help with testing this would be appreciated as I only have a HDHR tuner to test Live TV.

I'm creating this as a draft pull request to request code feedback and additional assistance with testing given the extent of potential impact. I'm anticipating that this additional control of the progress bar will also enable future enhancements that would not be possible with the system provided progress bar.

Issues Addressed

  • Resize the skip media segment button so that when "Skip commercial" is displayed in the button it is not truncated.
  • The system provided progress bar in the past would not always appear at the same location as the OSD at certain resolutions.

@Pentaphon
Copy link

Any screenshots?

@VTRunner
Copy link
Contributor Author

VTRunner commented Mar 13, 2026

@Pentaphon The Roku developer interface won't show the actual video, just the interface, so you made me hunt down my video capture card I had misplaced. Of course this change is about the controls interacting with the video and moving around in the interface, so if you can give it a build and try it out!

New buffering/loading screen:
Buffer Loading

Seeking with left/right keys to a point not in a commercial, but haven't yet pressed "ok" or "play" to start viewing from that position:
Progress Bar 2

Fast forwarding at x2 speed, with the seek currently in a commercial:
Progress Bar 1

Whatever happened to currently be on Live TV, with seek ahead of the current view location and the one hour buffer not yet full. If you rewind to the beginning after the one hour buffer is full then it will show a message and automatically start play from the limit of the one hour rewind:
Progress Bar 3

@VTRunner
Copy link
Contributor Author

I realized that with this change, since we now have access to the fastforward/rewind speed delta, we now can have a custom trickplay image display similar to the roku system ui trickplay image display. I've done a rough local proof of concept that is in the snapshot below. Thoughts? I might be able to make it a system setting to allow which trickplay image display the user wants.

Alternate Trickplay Images

@michaelcresswell
Copy link
Contributor

First off, combining the scrubbing display and the main OSD is a huge UX improvement.

A few things I've seen while trying this out:

  1. There is something showing in the progress bar at the end of most of my TV Shows. The videos direct play and I have not watched anything near the end so not sure why its there.
image
  1. The watched duration, remaining duration, and 'current' position in the progress bar are all static. They do not update if the OSD is kept open. These values update in real time in the current release.
image
  1. In Live TV, the times are sometimes off. It seems like when the current local time and current UTC time are in different days?
image
  1. I can't tell if there's any specific meaning to the empty portion of the progress bar after 9:17:39 in the earlier Live TV screenshot. This should probably be a future enhancement but when guide data is available using the show start and end times as the ends of the progress bar would be a nice improvement too. It'd show how much time is left and which portions of the episode are available or missing. A quick mock-up of what I mean:
image

@VTRunner
Copy link
Contributor Author

VTRunner commented Mar 15, 2026

@michaelcresswell Thank you for taking time to look at this! Please see the following and let me know your thoughts:

  1. I'm pretty confident that what you are seeing at the end of the progress bar is the system provided 30 second outro media segment. In the current production release there is no visualization of media segments, so you wouldn't "see" it. However, in the currently production release, if you fast forward to just before only 30 seconds left in the show and let it play I believe you will get the "Skip Outro" button as you enter the time of the (not visually represented) media segment. There is a Jellyfin Roku setting under Settings->Playback->Media Segment Actions. You would only get the Outro button if the you have "Outro Segments" set to "Ask to skip".

  2. Thank you for finding this. I'll work to correct this issue.

  3. Wow, this is a good one and I'm so glad you found it. I suspect you are right about this being a time zone issue, and I'll work to fix it.

  4. Live TV is very complex and dynamic, and interacting with it is a "worth a thousand words" experience, but I'll try with words knowing that it will be a challenging.

For Live TV I needed a way to represent the current watching position (the partially transparent round marker), the seeking position (the opaque round marker), the time of the rewind limit (the left time stamp) , the 60 minute max for buffering (the full length of the bar), and the amount of video that has been buffered since Live TV was started (the purple bar.)

The dark area after the purple bar shows how much additional time can be buffered, but isn't yet full. It won't let you fast forward beyond the end of the purple bar, and the purple bar will increase over time as you are on Live TV until the progress bar is fully purple. Once you have been in Live TV for over an hour and the buffer is full, then time at the far left (9:07am in my screen shot) will start to increase to represent the moving limit to which you can rewind. Would adding current time to the right end of the Live TV progress bar help to make this clearer?

I think your idea of representing show times in Live TV has merit, but I'm seeing significant discussion needed about how it would work. Live TV is more of "watching a channel" than "watching a show". For example, how would it work when rewinding results in crossing multiple shows, and how would the one hour rewind buffer be represented? I agree that I'd like to look at this as a future enhancement. There is a lot of complexity with the constantly shifting video buffer of Live TV.

Thank you again for the feedback!

@michaelcresswell
Copy link
Contributor

  1. Ahh, the outro segment. Makes sense.
  2. I see that one hour limit in the new code so the remainder in the progress bar is what you have subtracted from the limit. Understood now.

I agree 100% that Live TV seems similar to other media types until you look closely at the details. I'm already convinced adding any Live TV guide episode information to the progress bar should be handled in a separate pull request.

@VTRunner
Copy link
Contributor Author

VTRunner commented Mar 17, 2026

A fix has been implemented for the progress bar watched time, remaining time, and position not updating when the progress bar is visible but not seeking.

I reproduced the Live TV progress bar showing UTC time instead of the local time. 1. In the Jellyfin Roku app play a live TV station 2. Press the home button to hard exit the Jellyfin Roku app without a clean app shutdown 3. Start the Jellyfin Roku app again, go to the guide, and on the same station from step 1 press "Ok" and then "View Channel". (Now I have to figure out how to fix this.)

@VTRunner
Copy link
Contributor Author

A fix has been put in place for the Live TV start and progress times showing UTC instead of local time under certain conditions.

@michaelcresswell
Copy link
Contributor

Confirmed, I don’t see 2. or 3. anymore

…t single/moving or five image trickplay display
@VTRunner
Copy link
Contributor Author

I've added the option to have the trickplay display use five images, similar to how the Roku system ui shows trickplay. I've also added a setting to select which trickplay display to use - the single moving trickplay image is still available. I made the default to use the five image display because in the current production jellyfin roku release it only uses the single image trickplay if the five image display is not available.

I'm trying to make this custom progress bar at least fully functional equivalent with the system ui progress bar. Please let me know where there are more function gaps or if additional issues are found.

Multiple Trickplay Image Settings Five Trickplay Image Display

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants