Coder Social home page Coder Social logo

marzzzello / mpv_thumbnail_script Goto Github PK

View Code? Open in Web Editor NEW

This project forked from theamm/mpv_thumbnail_script

260.0 260.0 18.0 2.81 MB

A Lua script to show preview thumbnails in mpv's OSC seekbar, sans external dependencies (fork)

License: GNU General Public License v3.0

Makefile 0.17% Python 7.67% Lua 91.67% Shell 0.49%
mpv thumbnail-generator thumbnails

mpv_thumbnail_script's People

Contributors

djdv avatar ento avatar ftk avatar gourlaysama avatar laichiaheng avatar marzzzello avatar nicolasmaniotto avatar nottsunami avatar olifre avatar po5 avatar public-void-ryan avatar semperperitus avatar soulofmischief avatar theamm avatar vlnka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mpv_thumbnail_script's Issues

Failed

It failed to generate the thumbnails and says that the output file is missing. How do I fix this?

Possible to put the thumbnails in the video's directory?

Instead of having all the thumbnails saved into one directory, is it possible to save them in a ".thumbnails" subdirectory in the same directory the video is loaded from? Either with the config file or by editing the script code? I tried cache_directory=./.thumbnails but it puts the ".thumbnails" in my home directory.
Thanks

Thumbnailing command failed & Command 'escape-ass' not found

Description of the bug
Thumbnailing command failed & Command 'escape-ass' not found

To Reproduce

  1. Ran mpv up.mp4
  2. See error:

[mpv_thumbnail_script_server] Thumbnailing command failed!
[mpv_thumbnail_script_server] mpv process error: nil
[mpv_thumbnail_script_server] Process stdout: nil
[mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/up-520584567/000063.bgra.log
[mpv_thumbnail_script_server] Output file missing! /tmp/mpv_thumbs_cache/up-520584567/000063.bgra
[mpv_thumbnail_script_client_osc] Command 'escape-ass' not found.

Expected behavior
The video is thumbnailed.

Debug log

Log

mpv --msg-level=mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug,ytdl_hook=debug up.mp4
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[ytdl_hook] loading @ytdl_hook.lua
[ytdl_hook] reading options for ytdl_hook 
[ytdl_hook] script-opts/ytdl_hook.conf not found. 
[ytdl_hook] lua-settings/ytdl_hook.conf not found. 
[mpv_thumbnail_script_client_osc] Loading lua script /Users/lochips/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_server] Loading lua script /Users/lochips/.config/mpv/scripts/mpv_thumbnail_script_server.lua...
[mpv_thumbnail_script_client_osc] loading mp.defaults
[mpv_thumbnail_script_server] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading file /Users/lochips/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[mpv_thumbnail_script_server] loading file /Users/lochips/.config/mpv/scripts/mpv_thumbnail_script_server.lua
[mpv_thumbnail_script_server] reading options for mpv_thumbnail_script 
[mpv_thumbnail_script_server] Opened config file script-opts/mpv_thumbnail_script.conf. 
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script 
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf. 
[mpv_thumbnail_script_client_osc] reading options for osc 
[mpv_thumbnail_script_client_osc] script-opts/osc.conf not found. 
[mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found. 
[ytdl_hook] ytdl:// hook 
[ytdl_hook] not a ytdl:// url 
[ytdl_hook] playlist hook 
[mpv_thumbnail_script_client_osc] osc_init 
[mpv_thumbnail_script_client_osc] osc_init 
 (+) Video --vid=1 (*) (h264 1920x1080 59.985fps)
 (+) Audio --aid=1 (*) (aac 2ch 48000Hz)
[mpv_thumbnail_script_server] Announcing self to master... 
Using hardware decoding (videotoolbox).
[mpv_thumbnail_script_server] Announcing self to master... 
AO: [coreaudio] 48000Hz stereo 2ch floatp
[mpv_thumbnail_script_server] Announcing self to master... 
VO: [libmpv] 1920x1080 videotoolbox[nv12]
[mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server 
[mpv_thumbnail_script_client_osc] Gathering video/thumbnail state 
[mpv_thumbnail_script_server] Successfully registered with master 
[mpv_thumbnail_script_client_osc] Thumbnailer.state: {"finished_thumbnails" = 0, "thumbnail_delta" = 5, "thumbnail_template" = "/tmp/mpv_thumbs_cache/up-520584567/%06d.bgra", "thumbnail_directory" = "/tmp/mpv_thumbs_cache/up-520584567", "worker_extra" = {}, "available" = true, "thumbnail_count" = 102, "thumbnail_size" = {"w" = 300, "h" = 168}, "thumbnails" = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, "ready" = true} 
[mpv_thumbnail_script_client_osc] Creating thumbnail directory /tmp/mpv_thumbs_cache/up-520584567 
[mpv_thumbnail_script_client_osc] Splitting 102 thumbnails amongst 1 worker(s) 
[mpv_thumbnail_script_client_osc] Giving workers state: {"enabled":true,"finished_thumbnails":0,"worker_input_path":"up.mp4","thumbnail_delta":5,"thumbnail_template":"/tmp/mpv_thumbs_cache/up-520584567/%06d.bgra","thumbnail_directory":"/tmp/mpv_thumbs_cache/up-520584567","worker_extra":[],"available":true,"thumbnail_count":102,"thumbnail_size":{"w":300,"h":168},"thumbnails":[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],"ready":true} 
[mpv_thumbnail_script_client_osc] Assigning job to mpv_thumbnail_script_server [64,32,96,16,48,80,8,24,40,56,72,88,4,12,20,28,36,44,52,60,68,76,84,92,100,2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99,101] 
[mpv_thumbnail_script_client_osc] osc_init 
[mpv_thumbnail_script_server] Handling given job 
[mpv_thumbnail_script_server] Generating 102 thumbnails @ 300x168 for "up.mp4" 
[mpv_thumbnail_script_server] Starting work on thumbnail 63 
[mpv_thumbnail_script_server] Thumbnailing command failed! 
[mpv_thumbnail_script_server] mpv process error: nil 
[mpv_thumbnail_script_server] Process stdout: nil 
[mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/up-520584567/000063.bgra.log 
[mpv_thumbnail_script_server] Output file missing! /tmp/mpv_thumbs_cache/up-520584567/000063.bgra 
[mpv_thumbnail_script_server] Changing files, subprocess killed 
[mpv_thumbnail_script_client_osc] osc_init 
[mpv_thumbnail_script_client_osc] Command 'escape-ass' not found.
[mpv_thumbnail_script_client_osc] Command 'escape-ass' not found.
[mpv_thumbnail_script_client_osc] Command 'escape-ass' not found.

Environment

  • OS: MacOS
  • mpv version: 0.37.0
  • mpv_thumbnail_script version: 0.4.8
  • other scripts or special config that might be relevant: SmartCopyPaste

Additional context
None.

Most recent version causes MPV.net to lose focus

Description of the bug
The script "opens" and closes after opening a video, which causes MPV to lose focus. This does not happen with the previous version of the script (v0.5.2)

To Reproduce
Steps to reproduce the behavior:

  1. Put scripts into scripts folder
  2. Open video file with MPV.net
  3. MPV.net opens, but immediately loses focus from script running

Expected behavior
In the previous version of the script (v0.5.2), the MPV.net window does not lose focus.

Environment

  • OS: Windows 11
  • mpv version: MPV.net v6.0.4.0-stable
  • mpv_thumbnail_script version: v0.5.3
  • other scripts or special config that might be relevant: No other scripts running

Additional context
This script doesn't currently work with MPV.net 7.1.0.0 but the same issue happens where the window loses focus. I have noticed that when running just normal MPV it runs the scripts before opening, so it might have something to do with MPV.exe needing to be run after MPVnet.exe is started. Regardless, this issue wasn't present on the previous version of this script with MPV.net, so I think it's worth looking in to. I'm not too code-savvy so I'm not that good at figuring out exactly what's wrong so I apologize for that.

Specify $HOME in mpv_thumbnail_script.conf

In ~/.config/mpv/script-opts/mpv_thumbnail_script.conf, I tried to define the following option, but it doesn't work. Is there a way to specify HOME variable?

cache_directory=(os.getenv('HOME'))..'/.cache/thumbnails/mpv-osc-thumbnail'

Instead of storing it in /tmp folder is it better to store it somewhere else as the cache can be reused? Or the thumbnails are regenerated after every play?

No OSC on new mpv-git

Description of the bug
No OSC or thumbnails appear when playing a video on mpv after a commit made between 2023-11-12 (7cab30c) and 2023-11-26 (6898d57). OSC works normally on shinchiro mpv build (recommended build for Windows as per https://mpv.io/installation/) based on mpv up to commit 7cab30c and doesn't work the build of mpv up to 6898d57 and later builds.

To Reproduce
Steps to reproduce the behavior:

  1. Open any video in mpv
  2. No OSC when moving the cursor around

Expected behavior
OSC appears together with thumbnails when cursor is moved around the screen

Debug log

Log
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[mpv_thumbnail_script_client_osc] Loading lua script D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_server] Loading lua script D:/Programs/mpv/scripts/mpv_thumbnail_script_server.lua...
[mpv_thumbnail_script_client_osc] loading mp.defaults
[mpv_thumbnail_script_server] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading file D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[ytdl_hook] loading @ytdl_hook.lua
[mpv_thumbnail_script_server] loading file D:/Programs/mpv/scripts/mpv_thumbnail_script_server.lua
[ytdl_hook] reading options for ytdl_hook
[ytdl_hook] script-opts/ytdl_hook.conf not found.
[ytdl_hook] lua-settings/ytdl_hook.conf not found.
'uname' is not recognized as an internal or external command,
operable program or batch file.
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] script-opts/osc.conf not found.
[mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found.
[mpv_thumbnail_script_client_osc]
[mpv_thumbnail_script_client_osc] stack traceback:
[mpv_thumbnail_script_client_osc]       D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4509: in main chunk
[mpv_thumbnail_script_client_osc]       [C]: at 0x7ff6b7201830
[mpv_thumbnail_script_client_osc]       [C]: at 0x7ff6b7200f30
[mpv_thumbnail_script_client_osc] Lua error: D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4466: attempt to call field 'shared_script_property_set' (a nil value)
[mpv_thumbnail_script_client_osc] Exiting...
'uname' is not recognized as an internal or external command,
operable program or batch file.
[mpv_thumbnail_script_server] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_server] Opened config file script-opts/mpv_thumbnail_script.conf.
[ytdl_hook] ytdl:// hook
[ytdl_hook] not a ytdl:// url
[ytdl_hook] playlist hook
 (+) Video --vid=1 (*) (hevc 3840x2160 23.976fps)
 (+) Audio --aid=1 --alang=eng (*) 'TrueHD Atmos 7.1' (truehd 8ch 48000Hz)
     Audio --aid=2 --alang=eng 'AC-3 5.1' (ac3 6ch 48000Hz)
     Subs  --sid=1 --slang=eng (f) 'English (Forced)' (hdmv_pgs_subtitle)
     Subs  --sid=2 --slang=eng 'English' (hdmv_pgs_subtitle)
     Subs  --sid=3 --slang=eng 'English (SDH) (UHD)' (hdmv_pgs_subtitle)
     Subs  --sid=4 --slang=eng 'English (SDH) (BD)' (hdmv_pgs_subtitle)
     Subs  --sid=5 --slang=ara 'Arabic' (hdmv_pgs_subtitle)
     Subs  --sid=6 --slang=bul 'Bulgarian' (hdmv_pgs_subtitle)
     Subs  --sid=7 --slang=chi 'Chinese (Cantonese)' (hdmv_pgs_subtitle)
     Subs  --sid=8 --slang=chi 'Chinese (Mandarin Traditional)' (hdmv_pgs_subtitle)
     Subs  --sid=9 --slang=hrv 'Croatian' (hdmv_pgs_subtitle)
     Subs  --sid=10 --slang=cze 'Czech' (hdmv_pgs_subtitle)
     Subs  --sid=11 --slang=dan 'Danish' (hdmv_pgs_subtitle)
     Subs  --sid=12 --slang=dut 'Dutch' (hdmv_pgs_subtitle)
     Subs  --sid=13 --slang=est 'Estonian' (hdmv_pgs_subtitle)
     Subs  --sid=14 --slang=fin 'Finnish' (hdmv_pgs_subtitle)
     Subs  --sid=15 --slang=fre 'French (Canadian)' (hdmv_pgs_subtitle)
     Subs  --sid=16 --slang=fre 'French (Parisian)' (hdmv_pgs_subtitle)
     Subs  --sid=17 --slang=ger 'German' (hdmv_pgs_subtitle)
     Subs  --sid=18 --slang=ger 'German (SDH)' (hdmv_pgs_subtitle)
     Subs  --sid=19 --slang=gre 'Greek' (hdmv_pgs_subtitle)
     Subs  --sid=20 --slang=heb 'Hebrew' (hdmv_pgs_subtitle)
     Subs  --sid=21 --slang=hin 'Hindi' (hdmv_pgs_subtitle)
     Subs  --sid=22 --slang=hun 'Hungarian' (hdmv_pgs_subtitle)
     Subs  --sid=23 --slang=ind 'Indonesian' (hdmv_pgs_subtitle)
     Subs  --sid=24 --slang=ita 'Italian' (hdmv_pgs_subtitle)
     Subs  --sid=25 --slang=kor 'Korean' (hdmv_pgs_subtitle)
     Subs  --sid=26 --slang=may 'Malay' (hdmv_pgs_subtitle)
     Subs  --sid=27 --slang=nor 'Norwegian' (hdmv_pgs_subtitle)
     Subs  --sid=28 --slang=pol 'Polish' (hdmv_pgs_subtitle)
     Subs  --sid=29 --slang=por 'Portuguese (Brazilian)' (hdmv_pgs_subtitle)
     Subs  --sid=30 --slang=por 'Portuguese (Iberian)' (hdmv_pgs_subtitle)
     Subs  --sid=31 --slang=rus 'Russian' (hdmv_pgs_subtitle)
     Subs  --sid=32 --slang=spa 'Spanish (Castilian)' (hdmv_pgs_subtitle)
     Subs  --sid=33 --slang=spa 'Spanish (Latin American)' (hdmv_pgs_subtitle)
     Subs  --sid=34 --slang=swe 'Swedish' (hdmv_pgs_subtitle)
     Subs  --sid=35 --slang=tha 'Thai' (hdmv_pgs_subtitle)
     Subs  --sid=36 --slang=tur 'Turkish' (hdmv_pgs_subtitle)
     Subs  --sid=37 --slang=ukr 'Ukrainian' (hdmv_pgs_subtitle)
     Subs  --sid=38 --slang=vie 'Vietnamese' (hdmv_pgs_subtitle)
File tags:
 Title: Pearl (2022)
[mpv_thumbnail_script_server] Announcing self to master...
[file] Cannot open file 'auto': No such file or directory
Failed to open auto.
Using hardware decoding (d3d11va).
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[ao/wasapi] No suitable audio format found
AO: [openal] 44100Hz stereo 2ch float
[mpv_thumbnail_script_server] Announcing self to master...
VO: [gpu-next] 3840x2160 d3d11[p010]
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Thumbnail worker registering timed out
AV: 00:00:08 / 01:41:58 (0%) A-V: -0.002 DS: 6/2

Environment

  • OS: Windows 11
  • mpv version: mpv-git 6898d57 and later versions (probably even earlier commits after 7cab30c)
  • mpv_thumbnail_script version: 0.5.3, reproducible regardless of configuration on my machine

Delete thumbnail

You can add a script to automatically delete the thumbnails of a few days ago, thanks!

Script relies on `shared-script-properties` deprecated in mpv release 0.37.0

The script relies on shared-script-properties deprecated in mpv release 0.37.0. This causes a failure to launch and thus no OSC or thumbnails in the player. mpv throws this error message:

Lua error: mpv_thumbnail_script_client_osc.lua:4466: attempt to call field 'shared_script_property_set' (a nil value)

Example full log where this occurs:

Log
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[mpv_thumbnail_script_client_osc] Loading lua script D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_server] Loading lua script D:/Programs/mpv/scripts/mpv_thumbnail_script_server.lua...
[mpv_thumbnail_script_client_osc] loading mp.defaults
[mpv_thumbnail_script_server] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading file D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[ytdl_hook] loading @ytdl_hook.lua
[mpv_thumbnail_script_server] loading file D:/Programs/mpv/scripts/mpv_thumbnail_script_server.lua
[ytdl_hook] reading options for ytdl_hook
[ytdl_hook] script-opts/ytdl_hook.conf not found.
[ytdl_hook] lua-settings/ytdl_hook.conf not found.
'uname' is not recognized as an internal or external command,
operable program or batch file.
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] script-opts/osc.conf not found.
[mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found.
[mpv_thumbnail_script_client_osc]
[mpv_thumbnail_script_client_osc] stack traceback:
[mpv_thumbnail_script_client_osc]       D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4509: in main chunk
[mpv_thumbnail_script_client_osc]       [C]: at 0x7ff6b7201830
[mpv_thumbnail_script_client_osc]       [C]: at 0x7ff6b7200f30
[mpv_thumbnail_script_client_osc] Lua error: D:/Programs/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4466: attempt to call field 'shared_script_property_set' (a nil value)
[mpv_thumbnail_script_client_osc] Exiting...
'uname' is not recognized as an internal or external command,
operable program or batch file.
[mpv_thumbnail_script_server] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_server] Opened config file script-opts/mpv_thumbnail_script.conf.
[ytdl_hook] ytdl:// hook
[ytdl_hook] not a ytdl:// url
[ytdl_hook] playlist hook
 (+) Video --vid=1 (*) (hevc 3840x2160 23.976fps)
 (+) Audio --aid=1 --alang=eng (*) 'TrueHD Atmos 7.1' (truehd 8ch 48000Hz)
File tags:
 Title: Pearl (2022)
[mpv_thumbnail_script_server] Announcing self to master...
[file] Cannot open file 'auto': No such file or directory
Failed to open auto.
Using hardware decoding (d3d11va).
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[ao/wasapi] No suitable audio format found
AO: [openal] 44100Hz stereo 2ch float
[mpv_thumbnail_script_server] Announcing self to master...
VO: [gpu-next] 3840x2160 d3d11[p010]
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Thumbnail worker registering timed out

YouTube thumbnails not working

I'm using MPV to watch YouTube,
The script is working on network paths ( \\ ) but not on YouTube,
Log on MPV:

[ 10.033][e][mpv_thumbnail_script_server] Thumbnailing command failed!
[ 10.033][e][mpv_thumbnail_script_server] mpv process error: nil
[ 10.033][e][mpv_thumbnail_script_server] Process stdout:
[ 10.033][e][mpv_thumbnail_script_server] Debug log: C:\Users\GITHUBISSUE\AppData\Local\Temp\mpv_thumbs_cache\watchviViNcWNfYBs-0\000000.bgra.log
[ 10.033][e][mpv_thumbnail_script_server] Output file missing! C:\Users\GITHUBISSUE\AppData\Local\Temp\mpv_thumbs_cache\watchviViNcWNfYBs-0\000000.bgra

Log on temp:

[ 0.028][v][demux] Detected file format: Edit decision list
[ 0.028][v][demux] Stream is not seekable.
[ 0.028][e][demux] EDL parsing failed.
[ 0.028][e][demux] Error in EDL.

My settings:

local thumbnailer_options = {
-- The thumbnail directory
cache_directory = join_paths(default_cache_base, "mpv_thumbs_cache"),

------------------------
-- Generation options --
------------------------

-- Automatically generate the thumbnails on video load, without a keypress
autogenerate = true,

-- Only automatically thumbnail videos shorter than this (seconds)
autogenerate_max_duration = 3600, -- 1 hour

-- SHA1-sum filenames over this length
-- It's nice to know what files the thumbnails are (hence directory names)
-- but long URLs may approach filesystem limits.
hash_filename_length = 128,

-- Use mpv to generate thumbnail even if ffmpeg is found in PATH
-- ffmpeg does not handle ordered chapters (MKVs which rely on other MKVs)!
-- mpv is a bit slower, but has better support overall (eg. subtitles in the previews)
prefer_mpv = true,

-- Explicitly disable subtitles on the mpv sub-calls
mpv_no_sub = true,
-- Add a "--no-config" to the mpv sub-call arguments
mpv_no_config = false,
-- Add a "--profile=<mpv_profile>" to the mpv sub-call arguments
-- Use "" to disable
mpv_profile = "",
-- Output debug logs to <thumbnail_path>.log, ala <cache_directory>/<video_filename>/000000.bgra.log
-- The logs are removed after successful encodes, unless you set mpv_keep_logs below
mpv_logs = true,
-- Keep all mpv logs, even the succesfull ones
mpv_keep_logs = false,

-- Disable the built-in keybind ("T") to add your own
disable_keybinds = true,

---------------------
-- Display options --
---------------------

-- Move the thumbnail up or down
-- For example:
--   topbar/bottombar: 24
--   rest: 0
vertical_offset = 24,

-- Adjust background padding
-- Examples:
--   topbar:       0, 10, 10, 10
--   bottombar:   10,  0, 10, 10
--   slimbox/box: 10, 10, 10, 10
pad_top   = 10,
pad_bot   =  0,
pad_left  = 10,
pad_right = 10,

-- If true, pad values are screen-pixels. If false, video-pixels.
pad_in_screenspace = true,
-- Calculate pad into the offset
offset_by_pad = true,

-- Background color in BBGGRR
background_color = "000000",
-- Alpha: 0 - fully opaque, 255 - transparent
background_alpha = 80,

-- Keep thumbnail on the screen near left or right side
constrain_to_screen = true,

-- Do not display the thumbnailing progress
hide_progress = true,

-----------------------
-- Thumbnail options --
-----------------------

-- The maximum dimensions of the thumbnails (pixels)
thumbnail_width = 200,
thumbnail_height = 200,

-- The thumbnail count target
-- (This will result in a thumbnail every ~10 seconds for a 25 minute video)
thumbnail_count = 150,

-- The above target count will be adjusted by the minimum and
-- maximum time difference between thumbnails.
-- The thumbnail_count will be used to calculate a target separation,
-- and min/max_delta will be used to constrict it.

-- In other words, thumbnails will be:
--   at least min_delta seconds apart (limiting the amount)
--   at most max_delta seconds apart (raising the amount if needed)
min_delta = 5,
-- 120 seconds aka 2 minutes will add more thumbnails when the video is over 5 hours!
max_delta = 90,


-- Overrides for remote urls (you generally want less thumbnails!)
-- Thumbnailing network paths will be done with mpv

-- Allow thumbnailing network paths (naive check for "://")
thumbnail_network = true,
-- Override thumbnail count, min/max delta
remote_thumbnail_count = 60,
remote_min_delta = 15,
remote_max_delta = 120,

-- Try to grab the raw stream and disable ytdl for the mpv subcalls
-- Much faster than passing the url to ytdl again, but may cause problems with some sites
remote_direct_stream = true,

}

No thumbnails in youtube videos

0.4.8 doesn't show thumbnails for youtube videos with mpv 0.34.1 or 0.33.1. Local files work. I commented out my mpv.conf to make sure it is not caused by something in there. Pressing T shows “Thumbnailing unavailable”.

% mpv --osc=no 'https://www.youtube.com/watch?v=aqz-KE-bpKQ'
 (+) Video --vid=1 (*) (vp9 1920x1080 60.000fps)
 (+) Audio --aid=1 (*) (aac 6ch 48000Hz)
File tags:
 Uploader: Blender
 Channel_URL: https://www.youtube.com/channel/UCSMOQeBJ2RAnuFungnQOxLg
AO: [pulse] 48000Hz 5.1 6ch float
VO: [gpu] 1920x1080 yuv420p
AV: 00:00:03 / 00:10:34 (1%) A-V:  0.000 Dropped: 7 Cache: 3.6s/1MB

% mpv --version
mpv 0.34.1 Copyright © 2000-2021 mpv/MPlayer/mplayer2 projects
 built on UNKNOWN
FFmpeg library versions:
   libavutil       56.70.100
   libavcodec      58.134.100
   libavformat     58.76.100
   libswscale      5.9.100
   libavfilter     7.110.100
   libswresample   3.9.100
FFmpeg version: 4.4.1

% yt-dlp --version
2022.04.08

857: bad argument #1 to 'max' (number expected, got nil)

Description of the bug

Sometimes I get this error:

[mpv_thumbnail_script_client_osc]
[mpv_thumbnail_script_client_osc] stack traceback:
[mpv_thumbnail_script_client_osc]       [string "/etc/mpv/scripts/mpv_thumbnail_script_client_..."]:857: in function 'on_thumb_progress'
[mpv_thumbnail_script_client_osc]       [string "/etc/mpv/scripts/mpv_thumbnail_script_client_..."]:1061: in function 'handler'
[mpv_thumbnail_script_client_osc]       mp.defaults:380: in function 'handler'
[mpv_thumbnail_script_client_osc]       mp.defaults:510: in function 'call_event_handlers'
[mpv_thumbnail_script_client_osc]       mp.defaults:555: in function 'dispatch_events'
[mpv_thumbnail_script_client_osc]       mp.defaults:503: in function <mp.defaults:502>
[mpv_thumbnail_script_client_osc]       [C]: at 0x5577b85ca4b0
[mpv_thumbnail_script_client_osc]       [C]: at 0x5577b85cb000
[mpv_thumbnail_script_client_osc] Lua error: [string "/etc/mpv/scripts/mpv_thumbnail_script_client_..."]:857: bad argument #1 to 'max' (number expected, got nil)

That line is here.

It may only be caused when going through a playlist of videos. Could you fallback to 0 if self.state.thumbnails[index] gives nil?

To Reproduce
Steps to reproduce the behavior:

  1. Run playlist and skip videos with enter
  2. See error

Expected behavior

Should not error.

Debug log
None yet.

Log

Environment

  • OS: Linux
  • mpv version: 0.34.1
  • mpv_thumbnail_script version: 0.4.8

Script does not work with network videos on latest version of mpv

(Bug report template based on Red Hat Bugzilla's)

Description of problem

After updating to the latest version of mpv, 0.34.0, mpv_thumbnail script stopped working.

Version-Release number of selected component (if applicable)

mpv-0.34.0-1.fc35.x86_64 (from RPMFusion)
mpv_thumbnail_script 0.4.4

How reproducible

This issue only occurs with streaming videos. Local files are not effected. Here is my local configuration in case that is relevant:

mpv.conf:

hwdec=vaapi
no-keepaspect-window
#ytdl-format="bestvideo[height<=1080][vcodec!=vp9]+bestaudio/best"
sub-auto=fuzzy
sub-scale=0.75
slang=en,en-US,eng,en*
save-position-on-quit
# Use yt-dlp instead of youtube-dl
script-opts=ytdl_hook-ytdl_path=yt-dlp
# Needed for mpv_thumbnail_script
osc=no

mpv_thumbnail_script.conf:

# Use mpv to generate thumbnail even if ffmpeg is found in PATH
# ffmpeg is slightly faster than mpv but lacks support for ordered chapters in MKVs,
# which can break the resulting thumbnails. You have been warned.
# Defaults to yes (don't use ffmpeg)
prefer_mpv=no

# Allow thumbnailing network paths (naive check for "://")
# Defaults to no
thumbnail_network=yes

# The maximum dimensions of the thumbnails, in pixels
# Defaults to 200 and 200
thumbnail_width=400
thumbnail_height=400

Steps to Reproduce

  1. mpv 'https://youtu.be/siEIKFy1Q0I' -- any other YouTube video would work too.

Expected results

Script to generate thumbnails

Actual results

  1. Thumbnailing failed, check console for details message printed

Output:

$ mpv 'https://youtu.be/siEIKFy1Q0I' --no-resume-playback
 (+) Video --vid=1 (*) (vp9 1920x1080 30.000fps)
 (+) Audio --aid=1 --alang=eng (*) (opus 2ch 48000Hz)
File tags:
 Uploader: Brodie Robertson
 Channel_URL: https://www.youtube.com/channel/UCld68syR8Wi-GY_n4CaoJGA
[ffmpeg] AVHWDeviceContext: Failed to query surface attributes: 20 (the requested function is not implemented).
[vo/gpu/vaapi-egl] failed to retrieve libavutil frame constraints
Using hardware decoding (vaapi).
AO: [pulse] 48000Hz stereo 2ch float
VO: [gpu] 1920x1080 vaapi[nv12]
AV: 00:00:00 / 00:13:12 (0%) A-V:  0.000 Cache: 6.7s/871KB
[mpv_thumbnail_script_client_osc] Using playlist workaround due to long source path 
[mpv_thumbnail_script_server] Thumbnailing remote path, falling back on mpv. 
[mpv_thumbnail_script_server_2] Thumbnailing remote path, falling back on mpv. 
AV: 00:00:01 / 00:13:12 (0%) A-V:  0.000 Cache: 16s/3MB
[mpv_thumbnail_script_server] Thumbnailing command failed! 
[mpv_thumbnail_script_server] mpv process error: nil 
[mpv_thumbnail_script_server] Process stdout:  
[mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/siEIKFy1Q0I-0/000000.bgra.log 
[mpv_thumbnail_script_server] Output file missing! /tmp/mpv_thumbs_cache/siEIKFy1Q0I-0/000000.bgra 
AV: 00:00:01 / 00:13:12 (0%) A-V:  0.000 Cache: 16s/3MB
[mpv_thumbnail_script_server_2] Thumbnailing command failed! 
[mpv_thumbnail_script_server_2] mpv process error: nil 
[mpv_thumbnail_script_server_2] Process stdout:  
[mpv_thumbnail_script_server_2] Debug log: /tmp/mpv_thumbs_cache/siEIKFy1Q0I-0/000032.bgra.log 
[mpv_thumbnail_script_server_2] Output file missing! /tmp/mpv_thumbs_cache/siEIKFy1Q0I-0/000032.bgra

Additional info

Here are the debug logs:

000000.bgra.log
000032.bgra.log

webms and gifs don't work

Description of the bug
Thumbnails don't generate for webm/gif files.

To Reproduce

Open any file in .webm or .gif format, notice the endless CPU spike and an infinite log file being written.

Expected behavior
No thumbnail generation whatsoever for short webms and gifs, working thumbnail generation otherwise.

Environment

  • happens in the original script as well
  • OS: Linux
  • mpv, mpv_thumbnail_script versions: happens for as long as i remember

Does not seem to work.

I don't know why it's not working. It clearly shows the thumbnail when seeking, but not what is in it. Just a green square in a corner.
Is it a drag & drop (Drag & drop the two script in the scripts folder) or is there something more to do to make it work please?

Thanks!

Feature Request: Store thumbnails in the same folder as the video

Is it possible to store thumbnails at a location relative to a video?

For example, I would like the script to create a folder such as thumbnail in the location of the video and store all of it inside that folder. So that, the script uses that location for playing the thumbnails.

This is useful for me as I store only one video per folder.

mpv-android?

Can anyone test mpv-android? Gui frontend and osc is different

Thumbnailing failed, check console for details.

Description of the bug
Fails to start the thumbnailing process everytime.

Expected behavior
Thumbnailing.

Environment

  • OS: Windows 10 Pro
  • mpv version: 0.34.0
  • mpv_thumbnail_script version: v0.4.9

Additional context
It doesn't work no matter what...
197045927-07100f62-4aaa-487b-884e-0b00292740f7

`mpv av://v4l2:/dev/video0`: `ERROR: Unable to handle request: Unsupported url scheme: "av" (urllib)`

Debug log

Log
$ mpv --msg-level=mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug,ytdl_hook=debug av://v4l2:/dev/video0

Warning: option --status-msg was replaced with --term-status-msg and might be removed in the future.
Warning: option --display-fps was replaced with --override-display-fps and might be removed in the future.
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[mpv_thumbnail_script_server] Loading lua script /home/al/.config/mpv/scripts/mpv_thumbnail_script_server.lua...
[mpv_thumbnail_script_client_osc] Loading lua script /home/al/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_server] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading mp.defaults
[ytdl_hook] loading @ytdl_hook.lua
[mpv_thumbnail_script_server] loading file /home/al/.config/mpv/scripts/mpv_thumbnail_script_server.lua
[mpv_thumbnail_script_client_osc] loading file /home/al/.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[ytdl_hook] reading options for ytdl_hook
[ytdl_hook] Opened config file script-opts/ytdl_hook.conf.
[mpv_thumbnail_script_server] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_server] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] script-opts/osc.conf not found.
[mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found.
[ytdl_hook] full hook
[mpv_thumbnail_script_client_osc] osc_init
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server
[mpv_thumbnail_script_server] Successfully registered with master
Not seekable, but enabling seeking on user request.
 (+) Video --vid=1 (rawvideo 640x480 30.000fps)
[mpv_thumbnail_script_client_osc] osc_init
[autoconvert] Converting yuyv422 -> yuv422p
[autoconvert] Converting yuyv422 -> yuv422p
VO: [gpu] 640x480 yuv422p
Time: 00:00:00 / 00:00:00 0%
[mpv_thumbnail_script_client_osc] Gathering video/thumbnail state
[mpv_thumbnail_script_client_osc] thumb size550 412
[mpv_thumbnail_script_client_osc] Thumbnailer.state: {"worker_extra" = {}, "ready" = true, "available" = false, "is_remote" = 3, "thumbnail_directory" = "/var/tmp/al_mpv_thumbnails/ddd1a66bb45e60621e98da1d15b67df7369985fd-0", "thumbnail_template" = "/var/tmp/al_mpv_thumbnails/ddd1a66bb45e60621e98da1d15b67df7369985fd-0/%06d.bgra", "thumbnail_size" = {"h" = 412, "w" = 550}, "finished_thumbnails" = 0, "thumbnails" = {}, "thumbnail_count" = 0}
[mpv_thumbnail_script_client_osc] Trying to get storyboard info...
[mpv_thumbnail_script_client_osc] osc_init
Time: 00:00:00 / 00:00:00 53%
[mpv_thumbnail_script_client_osc] [debug] Command-line config: ['--format', 'sb0', '--dump-json', '--no-playlist', '--extractor-args', 'youtube:skip=hls,dash,translated_subs', '--', 'av://v4l2:/dev/video0']
[mpv_thumbnail_script_client_osc] [debug] System config "/etc/yt-dlp.conf": ['-vU', '-vvv', '--format-sort', 'res,codec:codec:h264,codec:av1,codec:vp9', '--format-sort-force', '--sub-format', 'ass/srt/best', '--concurrent-fragments', '32', '--no-write-comments', '--no-post-overwrites', '--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36']
[mpv_thumbnail_script_client_osc] [debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8 (No ANSI), error utf-8 (No ANSI), screen utf-8 (No ANSI)
[mpv_thumbnail_script_client_osc] [debug] yt-dlp version [email protected] [a0b19d319]
Time: 00:00:00 / 00:00:00 56%
[mpv_thumbnail_script_client_osc] [debug] Python 3.11.6 (CPython x86_64 64bit) - Linux-6.6.1-x86_64-11th_Gen_Intel-R-_Core-TM-_i9-11950H_@_2.60GHz-with-glibc2.37 (OpenSSL 3.0.11 19 Sep 2023, glibc 2.37)
Time: 00:00:00 / 00:00:00 59%
[mpv_thumbnail_script_client_osc] [debug] exe versions: ffmpeg 4.4.4 (fdk,setts), ffprobe 4.4.4, phantomjs broken, rtmpdump 2.4
[mpv_thumbnail_script_client_osc] [debug] Optional libraries: brotlicffi-1.1.0.0, certifi-2022.12.07, pycrypto-3.19.0, requests-2.31.0, secretstorage-3.3.3, sqlite3-3.43.2, urllib3-1.26.16
[mpv_thumbnail_script_client_osc] [debug] Proxy map: {}
[mpv_thumbnail_script_client_osc] [debug] Request Handlers: urllib
Time: 00:00:00 / 00:00:00 61%
[mpv_thumbnail_script_client_osc] [debug] Loaded 1915 extractors
[mpv_thumbnail_script_client_osc] [debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Time: 00:00:00 / 00:00:00 74%
[mpv_thumbnail_script_client_osc] Latest version: [email protected] from yt-dlp/yt-dlp
[mpv_thumbnail_script_client_osc] yt-dlp is up to date ([email protected])
Time: 00:00:00 / 00:00:01 83%
[mpv_thumbnail_script_client_osc] [generic] Extracting URL: av://v4l2:/dev/video0
[mpv_thumbnail_script_client_osc] [generic] video0: Downloading webpage
[mpv_thumbnail_script_client_osc] ERROR: Unable to handle request: Unsupported url scheme: "av" (urllib)
[mpv_thumbnail_script_client_osc] Traceback (most recent call last):
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1570, in wrapper
[mpv_thumbnail_script_client_osc]     return func(self, *args, **kwargs)
[mpv_thumbnail_script_client_osc]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1705, in __extract_info
[mpv_thumbnail_script_client_osc]     ie_result = ie.extract(url)
[mpv_thumbnail_script_client_osc]                 ^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line 715, in extract
[mpv_thumbnail_script_client_osc]     ie_result = self._real_extract(url)
[mpv_thumbnail_script_client_osc]                 ^^^^^^^^^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/extractor/generic.py", line 2439, in _real_extract
[mpv_thumbnail_script_client_osc]     full_response = self._request_webpage(url, video_id, headers=filter_dict({
[mpv_thumbnail_script_client_osc]                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line 847, in _request_webpage
[mpv_thumbnail_script_client_osc]     return self._downloader.urlopen(self._create_request(url_or_request, data, headers, query))
[mpv_thumbnail_script_client_osc]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 4055, in urlopen
[mpv_thumbnail_script_client_osc]     return self._request_director.send(req)
[mpv_thumbnail_script_client_osc]            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[mpv_thumbnail_script_client_osc]   File "/usr/lib/python3.11/site-packages/yt_dlp/networking/common.py", line 127, in send
[mpv_thumbnail_script_client_osc]     raise NoSupportingHandlers(unsupported_errors, unexpected_errors)
[mpv_thumbnail_script_client_osc] yt_dlp.networking.exceptions.NoSupportingHandlers: Unable to handle request: Unsupported url scheme: "av" (urllib)
[mpv_thumbnail_script_client_osc]
Time: 00:00:01 / 00:00:01 81%
Saving state.
Not seekable, or time unknown - not saving position.
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor

Exiting... (Quit)
[ytdl_hook] Exiting...
[mpv_thumbnail_script_server] Exiting...
[mpv_thumbnail_script_client_osc] Exiting...

Environment

  • OS: Gentoo GNU/Linux
  • mpv version: 0.36
  • mpv_thumbnail_script version: 0.5.3

Transparent box is misaligned when using syncplay

This version works great, except while using mpv with syncplay. The background box is above the actual thumbnail in that situation. This only happens when chat is enabled in syncplay. In any case thanks a lot for this, this is such a useful script! ^^

playing the file normally:
mpv without syncplay

playing it via syncplay:
mpv with syncplay

Syncplay 1.7.0 Beta 1
mpv 0.34.0

not working

not workign for me :
image

i have treid teh readme.md things u said .

os win 11
terminal window-terminal

Thumbnails are too small on HiDPI Screens

Problem

When using a 4k screen the thumbnails are too small.
disney

Solution

The simplest possible solution would be to scale up the generated thumbnails by a constant factor, defined in the config file of the script. Maybe there is another simple and more flexible solution.

Alternative Solution

Setting the thumbnail_width or thumbnail_height to 600 did not result in bigger thumbnails (on a 1080p Video), but even if it did I don't really want to generate bigger thumbnails, because that could potentially take longer and fill up my /tmp directory. I would rather have small thumbnails that get scaled up (bilinearly?) to the desired size.

Thanks for maintaining the project ❤️

Thumbnails for wrong file may be used if files from different URLs are played

Description of the bug
Using for example ani-cli with mpv, URLs with patterns such as:

https://video.somewhere/video/somehash/1080p/mp4/file.mp4

will be played, differing by "hash" for different episodes. Playing two such URLs means the thumbnails from the first file are used for the second.

To Reproduce

  1. Play to different URLs with same "filename part".
  2. Observe thumbnails being reused for the second file.

Expected behavior
Thumnails to be recreated for the second file.

Debug log

Environment

  • OS: Gentoo Linux
  • mpv version: 0.35.1
  • mpv_thumbnail_script version: 0.5.2

Additional context
As expected, a subdirectory:

/tmp/mpv_thumbs_cache/file-0

is created and reused for all episodes.

Checking MPVs properties reveals:

$ echo '{ "command": ["get_property", "filename/no-ext"] }' | socat - ~/.mpv/ipc  
{"data":"file","request_id":0,"error":"success"}
$ echo '{ "command": ["get_property", "filename"] }' | socat - ~/.mpv/ipc  
{"data":"file.mp4","request_id":0,"error":"success"}
$ echo '{ "command": ["get_property", "path"] }' | socat - ~/.mpv/ipc  
{"data":"https://video.somewhere/video/somehash/1080p/mp4/file.mp4","request_id":0,"error":"success"}

So one way to fix this would be to use the property path in all cases where self.state.is_remote is true.

Failure to locate mpv binary on macOS/Homebrew MPV installation (with workaround)

Description of the bug
Thumbnailer job will fail to invoke mpv on macOS which causes the entire job to fail. Relevant log output is:

[   2.100][e][mpv_thumbnail_script_server] Thumbnailing command failed!
[   2.100][e][mpv_thumbnail_script_server] mpv process error: init
[   2.100][e][mpv_thumbnail_script_server] Process stdout:
[   2.100][e][mpv_thumbnail_script_server] Debug log: /tmp/mpv_thumbs_cache/test-file/000000.bgra.log
[   2.101][e][mpv_thumbnail_script_server] Output file missing! /tmp/mpv_thumbs_cache/test-file/000000.bgra

To Reproduce
Steps to reproduce the behavior:

  • On macOS, install MPV via Homebrew
  • Add Homebrew bin dir to $PATH
  • Set up thumbnail scripts and launch a video with autogenerate=true in your conf file.
  • Observe the error "Thumbnailing failed, check console for errors" in MPV
  • Check log file for output

Expected behavior
Thumbnailing job completes normally

Environment

  • OS: macOS Monterey 12.6
  • mpv version: 0.34.1
  • mpv_thumbnail_script version: 0.4.9

The Workaround
I noticed that the issue did not occur when I ran mpv on the CLI. Through some testing according to #16, I verified that the issue is that the mpv_command built by the script fails to invoke mpv. I worked around this by modifying the relevant line in the server to use the absolute path to mpv and everything works as expected. Either the homebrew bin path (which is a symlink to the application bundle, below) or the path to the binary in the app bundle worked just fine.

$ ls -l `which mpv`
lrwxr-xr-x 1 me admin 40 Oct  9 13:04 /opt/homebrew/bin/mpv -> /Applications/mpv.app/Contents/MacOS/mpv

As shown above, the Homebrew path /opt/homebrew/bin is on my user's $PATH. Adding the appropriate path to /etc/paths before starting MPV had no effect.

Recommendations
From a look through the code, it seems as though the server ExecutableFinder, which loads the user's environment to search for ffmpeg, could be used to find mpv as well.

Glitched drop shadow

Description of the bug
Glitched drop-shadow
To Reproduce
Use script, and watch at the thumbnail

Expected behavior
No weird drop- shadow

Debug log
Run mpv with mpv --msg-level=mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug,ytdl_hook=debug 'file path or URL'

I don't know how to get this working.

Environment

mpv version: v0.36.0 and git x86 64-v3 "20230806"
Platform and Version: Windows 7 Build 7601 Service Pack 1
Source of the mpv binary: https://sourceforge.net/projects/mpv-player-windows/files/
script version: v0.5.2

Screenshot
How to fix this?
drop shadow

Separate autogenerate options for local and network videos

As a user, I want to be able to autogenerate thumbnails for local videos, while still being able to generate thumbnails for network videos with the T key, but not having it done automatically for network videos. Currently, it seems that autogenerate toggles all autogeneration, and thumbnail_network=no disables all network thumbnailing, so there is no current combination of options that allows the functionality I want.

Option to clear thumbnails cache

The cached thumbnails directory can grow to several hundreds of MBs or even GBs very fast. It is currently recommended to manually keep it clean, but I think this script could handle it itself.

I have a quick, dirty solution that works for me on GNU/Linux by deleting a video thumbnail directory on "end-file":

diff --git a/src/thumbnailer_shared.lua b/src/thumbnailer_shared.lua
index 37390e7..f53d774 100644
--- a/src/thumbnailer_shared.lua
+++ b/src/thumbnailer_shared.lua
@@ -71,6 +71,13 @@ function Thumbnailer:on_start_file()
     self:clear_state()
 end
 
+function Thumbnailer:on_end_file()
+    local path = self.state.thumbnail_directory
+    if path and path_exists(path) then
+        os.execute('rm -r "'..path..'"')
+    end
+end
+
 function Thumbnailer:on_video_change(params)
     -- Gather a new state when we get proper video-dec-params and our state is empty
     if params then
@@ -503,3 +510,4 @@ function Thumbnailer:start_worker_jobs()
 end
 
 mp.register_event("start-file", function() Thumbnailer:on_start_file() end)
+mp.register_event("end-file", function() Thumbnailer:on_end_file() end)

but as I said it's quick and dirty, it doesn't work on Windows and probably other stuff I didn't think about. Since keeping the cache could also have its benefits, it might be a good idea to have this controlled by an option.

"The syntax of the command is incorrect"

Whenever I try to grab the thumbnails from a long-duration video, I get an error that says "Thumbnailing failed, check console for details", and when I do these are the error messages that show on the console in the following order:

[mpv_thumbnail_script_server] Thumbnail worker registering timed out
[mpv_thumbnail_script_client_osc] The syntax of the command is incorrect.
[mpv_thumbnail_script_server] Thumbnailing command failed!
[mpv_thumbnail_script_server] mpv process error: nil
[mpv_thumbnail_script_server]  Process stdout:
[mpv_thumbnail_script_server]  Debug log: /tmp/my_mpv_thumbnails/...
[mpv_thumbnail_script_server] Output file missing! /tmp/my_mpv_thumbnails/...

Thumbnail previews broken in latest version of mpv

Description of the bug
A clear and concise description of what the bug is.
Thumbnails aren't loading anymore I guess it has something to do with latest mpv version perhaps?

To Reproduce
Steps to reproduce the behavior:

  1. Go to try play any video
  2. Ran the command clicked video to play or commandline doesn't matter fails.
  3. See error

Expected behavior
Expected to see seekbar and thumbnail previews in the video

Debug log
Run mpv with mpv --msg-level=mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug

Log
➜ mpv --msg-level=mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug /home/ntldr/JAY\ 𓃦\ 🔜\ FC\ ☀️\ -\ How\ the\ FUCK\ did\ they\ put\ this\ shit\ in\ like\ ultra\ 4K\ HD,\ why\ does\ it\ look\ so\ good??\ 😳\ \[1614465171946369029\].mp4
[mpv_thumbnail_script_server] Loading lua script /etc/mpv/scripts/mpv_thumbnail_script_server.lua...
[mpv_thumbnail_script_client_osc] Loading lua script /etc/mpv/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_server] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading file /etc/mpv/scripts/mpv_thumbnail_script_client_osc.lua
[mpv_thumbnail_script_server] loading file /etc/mpv/scripts/mpv_thumbnail_script_server.lua
[mpv_thumbnail_script_server] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_server] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] script-opts/osc.conf not found.
[mpv_thumbnail_script_client_osc] lua-settings/osc.conf not found.
[mpv_thumbnail_script_client_osc2]
[mpv_thumbnail_script_client_osc2] stack traceback:
[mpv_thumbnail_script_client_osc2] 	.../.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4465: in main chunk
[mpv_thumbnail_script_client_osc2] 	[C]: at 0x62a10410da70
[mpv_thumbnail_script_client_osc2] 	[C]: at 0x62a10410e120
[mpv_thumbnail_script_client_osc2] Lua error: .../.config/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4424: attempt to call field 'shared_script_property_set' (a nil value)
[mpv_thumbnail_script_client_osc]
[mpv_thumbnail_script_client_osc] stack traceback:
[mpv_thumbnail_script_client_osc] 	/etc/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4465: in main chunk
[mpv_thumbnail_script_client_osc] 	[C]: at 0x62a10410da70
[mpv_thumbnail_script_client_osc] 	[C]: at 0x62a10410e120
[mpv_thumbnail_script_client_osc] Lua error: /etc/mpv/scripts/mpv_thumbnail_script_client_osc.lua:4424: attempt to call field 'shared_script_property_set' (a nil value)
[mpv_thumbnail_script_client_osc] Exiting...
 (+) Video --vid=1 (*) (h264 1024x576 54.682fps)
 (+) Audio --aid=1 (*) (aac 2ch 44100Hz)
[mpv_thumbnail_script_server] Announcing self to master...
AO: [pulse] 44100Hz stereo 2ch float
VO: [gpu] 1024x576 yuv420p
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Announcing self to master...
[mpv_thumbnail_script_server] Thumbnail worker registering timed out
[mpv_thumbnail_script_server2] Thumbnail worker registering timed out
Exiting... (Quit)
[mpv_thumbnail_script_server] Exiting...

Environment

  • OS: [Arch Linux]
  • mpv version: [e.g. 1:0.38.0-2 ]
  • mpv_thumbnail_script version: [e.g. v0.5.3]
  • other scripts or special config that might be relevant

Additional context
Add any other context about the problem here.

(1:0.38.0-2 => 1:0.37.0-3) I downgraded my package to that one and thumbnails are working correctly. After updating to the latest version they stop working.

Thumbnailing fails on newer mpv commits

Description of the bug
I typically use Scoop to install mpv on Windows, with Scoop's mpv-git (git builds) and mpv (release builds) installers using shinchiro's mpv-player-windows builds.

Thumbnailing fails on the latest version of the git build (version 20220626, built from mpv commit 3a2838c). The error is the same as in #16 (comment), and the suggested fix in #16 (comment) of symlinking mpv or editing the path in the script does not resolve the issue.

Conversely, thumbnailing works as expected on the 0.34.0 release build with the same configs and scripts.

To Reproduce
Steps to reproduce the behavior:

  1. Play a video with the latest mpv-player-windows git build (or perhaps just play a video from mpv commit 3a2838c?)
  2. Receive error Thumbnailing failed, check console for details

Expected behavior
The script should successfully generate thumbnails.

Debug log

Log (git build version 20220626)
mpv --msg-level='mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug,ytdl_hook=debug' 'video.mp4'
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[ytdl_hook] loading @ytdl_hook.lua
[mpv_thumbnail_script_client_osc] Loading lua script ~/scoop/apps/mpv-git/current/portable_config/scripts/mpv_thumbnail_script_client_osc.lua...
[ytdl_hook] reading options for ytdl_hook
[mpv_thumbnail_script_client_osc] loading mp.defaults
[ytdl_hook] script-opts/ytdl_hook.conf not found.
[ytdl_hook] lua-settings/ytdl_hook.conf not found.
[mpv_thumbnail_script_client_osc] loading file ~/scoop/apps/mpv-git/current/portable_config/scripts/mpv_thumbnail_script_client_osc.lua
[sub_select] script-opts/sub_select.conf:3 unknown key 'force-prediction', ignoring
[sub_select] script-opts/sub_select.conf:5 unknown key 'observer_audio_switches', ignoring
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] Opened config file script-opts/osc.conf.
[ytdl_hook] ytdl:// hook
[mpv_thumbnail_script_client_osc] osc_init
[ytdl_hook] not a ytdl:// url
[mpv_thumbnail_script_client_osc] osc_init
 (+) Video --vid=1 (*) (h264 1080x1920 18.530fps)
[mpv_thumbnail_script_client_osc] osc_init
Using hardware decoding (d3d11va).
VO: [gpu] 1080x1920 d3d11[nv12]
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 400, 0) -> ArialMT, 0, ArialMT
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 700, 0) -> Arial-BoldMT, 0, Arial-BoldMT
V: 00:00:00 / 00:00:26 (0%)
[mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server_1
[mpv_thumbnail_script_client_osc] Gathering video/thumbnail state
[mpv_thumbnail_script_client_osc] Thumbnailer.state: {"thumbnail_delta" = 5, "thumbnail_count" = 6, "finished_thumbnails" = 0, "thumbnails" = {-1, -1, -1, -1, -1, -1}, "thumbnail_directory" = "~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482", "is_remote" = false, "thumbnail_size" = {"h" = 300, "w" = 168}, "ready" = true, "available" = true, "worker_extra" = {}, "thumbnail_template" = "~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\%06d.bgra"}
[mpv_thumbnail_script_client_osc] Splitting 6 thumbnails amongst 1 worker(s)
[mpv_thumbnail_script_client_osc] Giving workers state: {"thumbnail_delta":5,"thumbnail_count":6,"finished_thumbnails":0,"thumbnails":[-1,-1,-1,-1,-1,-1],"worker_input_path":"video.mp4","thumbnail_directory":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482","is_remote":false,"worker_extra":[],"thumbnail_size":{"h":300,"w":168},"ready":true,"available":true,"enabled":true,"thumbnail_template":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482\\%06d.bgra"}
V: 00:00:00 / 00:00:26 (0%)
[mpv_thumbnail_script_client_osc] Assigning job to mpv_thumbnail_script_server_1 [1,5,3,2,4,6]
[mpv_thumbnail_script_client_osc] osc_init
V: 00:00:03 / 00:00:26 (13%)
[mpv_thumbnail_script_server_1] Thumbnailing command failed!
[mpv_thumbnail_script_server_1] mpv process error: nil
[mpv_thumbnail_script_server_1] Process stdout:
[mpv_thumbnail_script_server_1] Debug log: ~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\000000.bgra.log
[mpv_thumbnail_script_server_1] Output file missing! ~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\000000.bgra
V: 00:00:16 / 00:00:26 (61%)
[mpv_thumbnail_script_client_osc] Splitting 6 thumbnails amongst 1 worker(s)
[mpv_thumbnail_script_client_osc] Giving workers state: {"thumbnail_delta":5,"thumbnail_count":6,"finished_thumbnails":0,"thumbnails":[0,-1,-1,-1,-1,-1],"worker_input_path":"video.mp4","thumbnail_directory":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482","is_remote":false,"worker_extra":[],"thumbnail_size":{"h":300,"w":168},"ready":true,"available":true,"enabled":true,"thumbnail_template":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482\\%06d.bgra"}
[mpv_thumbnail_script_client_osc] Assigning job to mpv_thumbnail_script_server_1 [1,5,3,2,4,6]
V: 00:00:16 / 00:00:26 (61%)
VO: [gpu] 666x1184 d3d11[nv12]
V: 00:00:16 / 00:00:26 (62%)
[mpv_thumbnail_script_client_osc] osc_init
[mpv_thumbnail_script_client_osc] osc_init
V: 00:00:19 / 00:00:26 (72%)
[mpv_thumbnail_script_server_1] Thumbnailing command failed!
[mpv_thumbnail_script_server_1] mpv process error: nil
[mpv_thumbnail_script_server_1] Process stdout:
[mpv_thumbnail_script_server_1] Debug log: ~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\000000.bgra.log
[mpv_thumbnail_script_server_1] Output file missing! ~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\000000.bgra
V: 00:00:26 / 00:00:26 (100%)

Exiting... (End of file)
[ytdl_hook] Exiting...
[mpv_thumbnail_script_client_osc] Exiting...
Log (release build version 0.34.0)
mpv --msg-level='mpv_thumbnail_script_server=debug,mpv_thumbnail_script_client_osc=debug,ytdl_hook=debug' 'video.mp4'
[ytdl_hook] Loading lua script @ytdl_hook.lua...
[ytdl_hook] loading mp.defaults
[ytdl_hook] loading @ytdl_hook.lua
[ytdl_hook] reading options for ytdl_hook
[ytdl_hook] script-opts/ytdl_hook.conf not found.
[ytdl_hook] lua-settings/ytdl_hook.conf not found.
[mpv_thumbnail_script_client_osc] Loading lua script ~/scoop/apps/mpv/current/portable_config/scripts/mpv_thumbnail_script_client_osc.lua...
[mpv_thumbnail_script_client_osc] loading mp.defaults
[mpv_thumbnail_script_client_osc] loading file ~/scoop/apps/mpv/current/portable_config/scripts/mpv_thumbnail_script_client_osc.lua
[sub_select] script-opts/sub_select.conf:3 unknown key 'force-prediction', ignoring
[sub_select] script-opts/sub_select.conf:5 unknown key 'observer_audio_switches', ignoring
[mpv_thumbnail_script_client_osc] reading options for mpv_thumbnail_script
[mpv_thumbnail_script_client_osc] Opened config file script-opts/mpv_thumbnail_script.conf.
[mpv_thumbnail_script_client_osc] reading options for osc
[mpv_thumbnail_script_client_osc] Opened config file script-opts/osc.conf.
[ytdl_hook] ytdl:// hook
[ytdl_hook] not a ytdl:// url
[mpv_thumbnail_script_client_osc] osc_init
 (+) Video --vid=1 (*) (h264 1080x1920 18.530fps)
[mpv_thumbnail_script_client_osc] osc_init
Using hardware decoding (d3d11va).
VO: [gpu] 1080x1920 d3d11[nv12]
V: 00:00:00 / 00:00:26 (0%)
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 400, 0) -> ArialMT, 0, ArialMT
[osd/libass] fontselect: Using default font family: (Source Sans Pro, 700, 0) -> Arial-BoldMT, 0, Arial-BoldMT
[mpv_thumbnail_script_client_osc] Registered worker mpv_thumbnail_script_server_1
[mpv_thumbnail_script_client_osc] Gathering video/thumbnail state
[mpv_thumbnail_script_client_osc] Thumbnailer.state: {"thumbnail_count" = 6, "finished_thumbnails" = 0, "available" = true, "thumbnail_size" = {"h" = 300, "w" = 168}, "is_remote" = false, "thumbnail_template" = "~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482\%06d.bgra", "worker_extra" = {}, "ready" = true, "thumbnails" = {-1, -1, -1, -1, -1, -1}, "thumbnail_delta" = 5, "thumbnail_directory" = "~\AppData\Local\Temp\mpv_thumbs_cache\video-5242482"}
[mpv_thumbnail_script_client_osc] Splitting 6 thumbnails amongst 1 worker(s)
[mpv_thumbnail_script_client_osc] Giving workers state: {"thumbnail_count":6,"thumbnails":[-1,-1,-1,-1,-1,-1],"finished_thumbnails":0,"available":true,"thumbnail_size":{"h":300,"w":168},"is_remote":false,"thumbnail_template":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482\\%06d.bgra","worker_input_path":"video.mp4","worker_extra":[],"ready":true,"enabled":true,"thumbnail_delta":5,"thumbnail_directory":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482"}
[mpv_thumbnail_script_client_osc] Assigning job to mpv_thumbnail_script_server_1 [1,5,3,2,4,6]
[mpv_thumbnail_script_client_osc] osc_init
V: 00:00:16 / 00:00:26 (61%)
[mpv_thumbnail_script_client_osc] Splitting 6 thumbnails amongst 1 worker(s)
[mpv_thumbnail_script_client_osc] Giving workers state: {"thumbnail_count":6,"thumbnails":[1,1,1,1,1,1],"finished_thumbnails":6,"available":true,"thumbnail_size":{"h":300,"w":168},"is_remote":false,"thumbnail_template":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482\\%06d.bgra","worker_input_path":"video.mp4","worker_extra":[],"ready":true,"enabled":true,"thumbnail_delta":5,"thumbnail_directory":"~\\AppData\\Local\\Temp\\mpv_thumbs_cache\\video-5242482"}
[mpv_thumbnail_script_client_osc] Assigning job to mpv_thumbnail_script_server_1 [1,5,3,2,4,6]
V: 00:00:16 / 00:00:26 (61%)
VO: [gpu] 666x1184 d3d11[nv12]
V: 00:00:16 / 00:00:26 (62%)
[mpv_thumbnail_script_client_osc] osc_init
[mpv_thumbnail_script_client_osc] osc_init
V: 00:00:26 / 00:00:26 (100%)

Exiting... (End of file)
[ytdl_hook] Exiting...
[mpv_thumbnail_script_client_osc] Exiting...

Environment

  • OS: Windows 10
  • mpv version: mpv-player-windows version 20220626, built from mpv commit 3a2838c
  • mpv_thumbnail_script version: 0.4.8
  • other scripts or special config that might be relevant: N/A I think

Additional context
I'm opening this issue as I'm not sure if the newest commits of mpv have introduced breaking changes (which will require me to add new config settings or will require this script to be updated) or if they have introduced some kind of regression which will require a fix at some point.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.