ScriptPlayer+ v0.2.3 — Playback, FIT & Subtitle Update

ScriptPlayer+ v0.2.3 — Feedback Patch

v0.2.3 is now available.

This update is less about adding major new features like v0.2.2, and more about fixing the annoying issues people kept reporting through the community and feedback page.

A lot of this patch focuses on things like:

  • playlist refresh issues

  • autoplay failing

  • idle section auto-skip not working

  • FIT mode cropping videos

  • subtitle detection problems

  • general usability annoyances

So compared to the previous release, this one is much more of a “stability / usability cleanup” patch.


:repeat_button: Playlist Refresh Fixes

Fixed cases where the file list would not refresh correctly.

Previously:

  • deleted files could remain in the list

  • newly added files sometimes wouldn’t appear properly

  • refresh behavior could become inconsistent

The refresh logic has been cleaned up to behave more reliably.

:backhand_index_pointing_right: File additions/removals should now update much more consistently.


:play_button: Autoplay Fixes

Fixed several cases where videos would fail to autoplay after loading.

This mostly happened when:

  • no script was attached

  • device connection states changed

  • playback initialization timing got desynced

Playback flow handling has been adjusted to reduce these issues.

:backhand_index_pointing_right: Videos should now continue playing more reliably after opening.


:next_track_button: Idle Section Auto-Skip Fixes

Fixed auto-skip not triggering correctly during sections with no movements.

Also improved handling for long empty sections near the end of scripts.

:backhand_index_pointing_right: Less time staring at nothing during inactive sections.


:clapper_board: FIT Mode Improvements

Fixed an issue where FIT mode could crop the top portion of videos in windowed mode.

This was caused by incorrect calculations involving timeline/UI height.

Additional improvements:

  • remember previous FIT state

  • keep FIT settings when opening new videos

  • optional aspect-ratio based auto FIT

:backhand_index_pointing_right: FIT behavior should feel noticeably better in this version.


:compass: Timeline Visibility Fixes

Fixed cases where the default timeline visibility setting was ignored.

Previously, videos with scripts could force the timeline open regardless of user settings.

:backhand_index_pointing_right: Timeline behavior should now respect configuration properly.


:speech_balloon: Expanded Subtitle Detection

Subtitle matching is no longer limited mostly to .srt.

The following formats are now included in automatic matching:

  • .ass

  • .ssa

  • .smi

  • .sami

  • .txt

This improves subtitle file detection/matching only.

It does not mean full ASS effect rendering or complete SMI tag support at player level.

:backhand_index_pointing_right: Non-SRT subtitles should now be detected much more reliably.


:puzzle_piece: Script Matching Improvements

Improved script matching for setups where script variants are stored inside media-named folders.

The script discovery range has been expanded to make matching more flexible.

:backhand_index_pointing_right: Organized folder structures should work better now.


:satellite_antenna: Better Handy Upload Error Guidance

Improved guidance for:

Upload error: TypeError: Failed to fetch

In many cases this is caused by:

  • network issues

  • VPNs

  • firewalls

  • DNS problems

  • Handy server connectivity

rather than the app itself.

The error messaging now provides better explanations to help users troubleshoot more easily.


:counterclockwise_arrows_button: Update Checker Added

Added built-in update checking inside the app.

  • checks GitHub Releases

  • manual check available in settings

:backhand_index_pointing_right: You can now check for updates directly from the app.


:desktop_computer: Default Window Size Adjustments

Adjusted the default window size to reduce UI clipping issues.

Previously some controls could become partially hidden, especially:

  • fullscreen button near FIT

  • status message area

:backhand_index_pointing_right: First launch UI layout should feel less cramped now.


:puzzle_piece: Other Changes

  • minor text/UI fixes

  • improved refresh timing

  • cleanup for various usability reports since v0.2.2

This release is mostly focused on polishing existing functionality rather than introducing major new systems.

A lot of the work here was simply making already-implemented features behave properly in real-world usage.


:link: Links

GitHub
https://github.com/sioaeko/scriptplayer-plus

Release
https://github.com/sioaeko/scriptplayer-plus/releases/tag/v0.2.3

Feedback
https://sioaeko.github.io/scriptplayer-plus-feedback/index.html

Hmm I do not see this option?

For videos that are 4:3 for example, and I use the fit function (on a 16:9 monitor)
The video will get zoomed in to fill the screen and the video will be cut off at the bottom. But it would be nice to have an option to just maximize the 4:3 video in the viewable window space.

I see this setting, but it doesn’t work for the above scenario

Thanks again for listening for feedback and updating your app!

Thanks for the feedback!

You were right, the old FIT behavior was a bit confusing because it was actually acting more like “fill/crop” in some cases.

I’ve changed this for the next version by separating the video display modes:

  • FIT: maximizes the video inside the visible player area without cropping
  • FILL: fills the entire video area and may crop the image if the aspect ratio does not match

So for 4:3 videos on a 16:9 screen, FIT should now keep the whole video visible while making it as large as possible.

This change will be included in the next release.

1 Like

I want to leave feedback here instead of the official site to avoid logging in, on linux.

  1. If I fullscreen scriptplayer+ and move my mouse to a second monitor to the left of the main one, the popup implemented in this version stays open. It can be avoided by first moving the mouse while not in fullscreen and then making it fullscreen, but it’s bothersome.
  2. Another important thing is some perfectly valid files aren’t being played in scriptplayer, the issue is more that they do “play” script and audio are there, but the video is entirely black and even the preview is black. It is not a file name issue, nor a size issue, because videos that are much bigger do play. I couldn’t find out why this happens.

Even with these issues, thanks for taking the time to implement this for linux as well. The first Scriptplayer is kinda broken with wine and unusable on linux(as far as I know).

Thanks for reporting this here, and no worries about not using the official feedback site.

The fullscreen popup issue on Linux multi-monitor setups sounds like a real UI bug.
It is probably caused by the fullscreen hover/popup state not being cleared when the cursor leaves the fullscreen window toward a monitor placed on the left side. I’ll adjust the fullscreen mouse-leave / focus handling so the popup closes reliably even on multi-monitor Linux setups.

For the black video issue, that one may be related to Electron/Chromium video decoding on Linux.
If the audio and script play but the video frame and preview are both black, the file may be using a codec/profile or hardware decoding path that Electron does not handle correctly on that system.

If possible, could you send one of these?

  • Linux distro
  • GPU model
  • X11 or Wayland
  • ScriptPlayer+ version
  • The video codec info from ffprobe
  • If possible, a short sample file that reproduces the issue

A command like this would help:

ffprobe -hide_banner -i "your-video-file.mkv"

OS: cachyOS
KDE Plasma Version: 6.6.5
KDE Frameworks Version: 6.26.0
Ot Version: 6.11.1
Kernel Version: 7.0.8-1-cachyos-bore (64-bit)

GPU: 7900XTX

Graphics Platform: Wayland

V 0.2.3 (happened on previous versions too)

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘AgapilordFullspeed.mp4’:
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2025-03-05T09:50:17.000000Z
Duration: 01:08:51.63, start: 0.000000, bitrate: 19903 kb/s
Stream #0:00x1: Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 19710 kb/s, 60 fps, 60 tbr, 60k tbn (default)
Metadata:
creation_time : 2025-03-05T09:50:19.000000Z
handler_name : Mainconcept MP4 Video Media Handler
Stream #0:10x2: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
Metadata:
creation_time : 2025-03-05T09:50:19.000000Z
handler_name : Mainconcept MP4 Sound Media Handler

In davinci resolve, I saw the exact same issue with this sample video and ChatGPT said it’s because I used HEVC encoding while capturing. After converting the video, I saw it in the davinci resolve timeline and it rendered properly. Maybe something similar is happening with scriptplayer+? The reason given by chatgpt is licensing, idk how it works though, but it feels kinda dumb.

Thanks for the detailed info.

Yes, this looks very likely related to HEVC/H.265 playback on Electron/Chromium under Linux, especially with Wayland/GPU hardware decoding. Since the audio and script playback work but the video frame and preview are black, ScriptPlayer+ is probably loading the file, but the video decoder path fails or outputs black frames.

The codec info you shared shows hevc (hvc1), and that matches the kind of file that can behave differently depending on OS, GPU driver, Chromium/Electron codec support, and hardware decoding.

In the next version, I added a Video Compatibility Mode setting that lets users try disabling GPU video decode / hardware acceleration paths. That may help some Linux black-video cases.

However, if the issue is actual HEVC codec support rather than only GPU decoding, converting the file to H.264/AAC MP4 is still the most reliable workaround for now.

Recommended format:

  • H.264 video
  • yuv420p
  • AAC audio
  • MP4 container

Thanks again for the sample details. This helps a lot because it confirms the issue is likely codec/decoder compatibility rather than filename, file size, or script loading.

Hey, thanks for trying to implement a fix.
however, currently it’s not working. the items in the dropdown menu cannot be selected.

Thanks for checking it.

Looks like the fullscreen popup fix is currently too aggressive.
It probably closes the menu when the mouse leaves the app/drawer area, so the dropdown disappears before an item can actually be selected.

I’ll change the behavior so the popup does not close while interacting with dropdowns/menus, and make it close only after the interaction is finished or when clicking outside.

So yes, this is a bug from the recent fullscreen popup fix, not intended behavior.