video-obs-youtube-music
Made by JeffRemux OBS recordings to MP4, add YouTube music, generate intro/outro videos with WebGL shaders, and song credit overlays. Use when preparing screen recordings for YouTube or X/Twitter upload.
Works With
Quality and Utility come from canonical skill metadata. Community ratings appear separately as stars when subscriber reviews exist.
Subscribe to download
Public previews are available, but downloads, CLI sync, and premium content require an active subscription.
Sign In to Subscribe- Full skill content with deterministic versioning
- CLI sync + local search index
- Access to Jeffrey’s premium library
Save to your account
Saved skills live in your cloud list. Run jsm sync on each machine to pull them locally.
What's New with this Skill
2Updates, enhancements, and release notes for this skill.
Enhanced: video-obs-youtube-music, recorder servers that no longer expose files outside the project
Five recording scripts started a local web server that listened on every network interface and followed ../ out of the project folder, so while a recording ran, any machine that could reach the port could read files elsewhere on the disk. The servers now bind to 127.0.0.1 and serve only files inside the project.
- The local server in five recorder scripts followed ../ out of the project folder and listened on every network interface.
- Request paths are resolved against the project root, and anything outside it gets 403, including percent-encoded traversal.
- Servers bind to 127.0.0.1, and the recorders load their pages from 127.0.0.1.
- Query strings are stripped before the file lookup, and 404 responses no longer echo the requested path.
- A raw-socket traversal test passes against all five scripts; the old versions served a planted secret file.
The intro and outro recorders hand the project's HTML to a headless browser through a small Node HTTP server. That server joined the request path onto the project directory with path.join, which resolves .. segments, and it listened on all interfaces. While a recording ran, a request containing ../ segments, sent from any machine that could reach the port, returned files from outside the project folder.
New: OBS → YouTube, remux MKV to MP4, add WebGL-shader intros, replace audio with YouTube tracks
OBS records to MKV (resilient to crashes); YouTube and X want MP4. The skill is the full pipeline: ffmpeg remux with -c:v copy so the video isn't re-encoded when no intro is added, optional WebGL-shader intro/outro videos (FloquetTopoCA, smeared_life, SpinGlassCA), audio replaced with downloaded YouTube tracks via yt-dlp, animated song-credit cards overlaid at track boundaries, and platform-specific encodes for YouTube vs X.
- -c:v copy for the plain remux: video bytes pass through unchanged and only the audio stream is encoded
- yt-dlp pipeline: yt-dlp -x --audio-format mp3 "ytsearch1:Song Name" downloads the top match for a song name and converts to mp3 in one call
- Optional WebGL intro/outro shaders: FloquetTopoCA, smeared_life, SpinGlassCA. Each renders to MP4 and concatenates into the final output for a consistent intro
- Animated song-credit cards overlay at track boundaries so viewers see what's playing without leaving the video
- Remote rendering for shader frames: split frame ranges across machines, then move remaining frames off slow machines to faster ones
- Platform-specific encodes: YouTube keeps full resolution with +faststart; X gets a 1920-wide H.264 + AAC encode under its 25 Mbps and 512MB limits
- Audio starts at intro time zero, not when the screen recording starts; viewers hear music from the first frame rather than after a silent intro
The base case is one ffmpeg command: -i recording.mkv -i song.mp3 -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4. With -c:v copy the video bytes pass through unchanged and only the audio stream is encoded, so a remux takes seconds.
The pipeline extends from there. Probe duration with ffprobe, download the music tracks via yt-dlp -x --audio-format mp3 "ytsearch1:Song Name", confirm music covers the video duration, optionally generate intro/outro videos with WebGL shaders, optionally generate animated song-credit cards, and optionally split frame rendering