Two Windows blockers in v0.2.0: `-vsync` removed in ffmpeg 9, and cp1252 crash on non-latin1 titles
Hit both of these on a clean Windows 11 install of watch v0.2.0. Each one is a hard failure, not a degradation. Patches for both are one-liners.
Environment:
- Windows 11 Pro (26200)
- Python 3.12
- ffmpeg 9.0-full_build (
Gyan.FFmpegvia winget) - yt-dlp 2026.07.04
1. -vsync is rejected by ffmpeg 9 — all frame extraction fails
Every frame-extraction path dies immediately:
ffmpeg keyframe extraction failed: Unrecognized option 'vsync'.
Error splitting the argument list: Option not found-vsync was deprecated in favour of -fps_mode back in ffmpeg 5.1 and is now gone. frames.py still passes it in two places — v0.2.0 lines 256 and 615:
"-vsync", "vfr",Fix, both sites:
"-fps_mode", "vfr",-fps_mode has been available since 5.1, so this shouldn't need a version guard for any ffmpeg users are realistically running.
This affects every detail mode except transcript — the skill is effectively unusable on a current ffmpeg without it.
2. UnicodeEncodeError on any title outside cp1252
Windows Python defaults stdout to cp1252, so printing the title crashes the whole run. A YouTube Short with an emoji in the title:
File "watch.py", line 275, in main
print(f"- **Title:** {info['title']}")
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f62d' in position 52:
character maps to <undefined>Note where this lands: the download and caption fetch have already completed successfully, and the report has started printing. The run is thrown away at the last step over a display-only concern.
Emoji in titles are common, but the wider problem is that any non-latin1 title or transcript kills the run — Hebrew, Arabic, Greek, Cyrillic, CJK. I ran into it on my first real video.
PYTHONUTF8=1 works around it, but that requires the user to know. Fix at the top of watch.py, after the sys.path setup:
for _stream in (sys.stdout, sys.stderr):
try:
_stream.reconfigure(encoding="utf-8", errors="replace")
except (AttributeError, ValueError):
passWorth noting SKILL.md already handles the python3 vs python split for Windows, so Windows looks like a supported target — these two are the remaining gaps.
Minor: the chmod 600 warning is unactionable on Windows
setup.py checks st_mode & 0o044 and prints:
[watch] WARNING: C:\Users\...\.config\watch\.env is readable by other users.
Run: chmod 600 C:\Users\...\.config\watch\.envOn Windows os.chmod only toggles the read-only bit and st_mode reports 0o666 regardless of the real ACL, so this fires on every run and the suggested command doesn't exist. The file's actual ACL was already correctly restricted to the current user. Probably worth skipping the check on sys.platform == "win32", or checking the ACL instead.
Happy to send a PR for the first two if useful.
Source: bradautomates/claude-video