{"id":49974457,"url":"https://github.com/rickycodes/mister_rastercast","last_synced_at":"2026-05-18T10:13:39.770Z","repository":{"id":357178041,"uuid":"1235763388","full_name":"rickycodes/mister_rastercast","owner":"rickycodes","description":"Stream local video files from a PC to MiSTerFPGA over plain HTTP, using ffmpeg   and mplayer","archived":false,"fork":false,"pushed_at":"2026-05-11T16:29:26.000Z","size":8,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T18:31:47.640Z","etag":null,"topics":["crt","ffmpeg","framebuffer","h264","http-streaming","mister","misterfpga","mpeg-ts","mplayer","retro-gaming","shell-script","video-streaming"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rickycodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T16:22:41.000Z","updated_at":"2026-05-11T17:46:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rickycodes/mister_rastercast","commit_stats":null,"previous_names":["rickycodes/mister_rastercast"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rickycodes/mister_rastercast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickycodes%2Fmister_rastercast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickycodes%2Fmister_rastercast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickycodes%2Fmister_rastercast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickycodes%2Fmister_rastercast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rickycodes","download_url":"https://codeload.github.com/rickycodes/mister_rastercast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rickycodes%2Fmister_rastercast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33174092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"ssl_error","status_checked_at":"2026-05-18T09:27:28.300Z","response_time":71,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crt","ffmpeg","framebuffer","h264","http-streaming","mister","misterfpga","mpeg-ts","mplayer","retro-gaming","shell-script","video-streaming"],"created_at":"2026-05-18T10:13:37.964Z","updated_at":"2026-05-18T10:13:39.760Z","avatar_url":"https://github.com/rickycodes.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rastercast\n\n[![ShellCheck](https://github.com/rickycodes/mister_rastercast/actions/workflows/shellcheck.yml/badge.svg?branch=main)](https://github.com/rickycodes/mister_rastercast/actions/workflows/shellcheck.yml?query=branch%3Amain)\n\nWhat if [mister_plex](https://github.com/mrchrisster/mister_plex) without the plex?\n\nrastercast is a lightweight video streaming path for MiSTerFPGA CRT setups.\n\nIt replaces the old Plex/XML workflow with a direct file-to-stream flow:\n\n- the PC transcodes a local video file with `ffmpeg`\n- the PC serves the stream over plain HTTP\n- the MiSTer opens that stream with `mplayer`\n\nThis keeps the control path simple and avoids Plex, XML URLs, and SAM/Attract Mode dependencies.\n\n## Current shape\n\n- `bin/rastercast.sh` runs on the PC\n- `mister/rastercast.sh` runs on the MiSTer\n\nThe implementation uses a continuous MPEG-TS stream with H.264 video and MP2 audio. The default video bitrate is 1000 kbps, matching the `maxVideoBitrate=1000` setting used by `mister_plex`; source FPS is preserved unless overridden.\n\n## CRT target\n\nThe intended MiSTer framebuffer mode is:\n\n```ini\nvideo_mode=320,240,60\nvga_scaler=1\nfb_terminal=1\ncomposite_sync=1\n```\n\n## Requirements\n\nPC side:\n\n- `ffmpeg`\n- `python3`\n- `yt-dlp` for YouTube inputs\n\nMiSTer side:\n\n- `mplayer` with framebuffer support\n\n## Install on MiSTer\n\nCopy the MiSTer launcher to the scripts folder:\n\n```bash\nscp mister/rastercast.sh root@mister:/media/fat/Scripts/rastercast.sh\nssh root@mister 'chmod +x /media/fat/Scripts/rastercast.sh'\n```\n\nThe default MiSTer SSH login is usually `root` with password `1`; SSH will prompt if you have not configured keys.\n\n## Usage\n\n### Local Video\n\nServe a local video from the PC and launch playback on MiSTer:\n\n```bash\nbin/rastercast.sh /path/to/video.mkv\n```\n\n### Local Queue\n\nQueue multiple videos for back-to-back playback:\n\n```bash\nbin/rastercast.sh /path/to/one.mkv /path/to/two.mkv /path/to/three.mkv\n```\n\n### Shell Expansion\n\nQueue a directory of episodes with shell expansion:\n\n```bash\nbin/rastercast.sh /path/to/season/*.mkv\n```\n\n### Shell Array\n\nIf paths contain spaces, use a shell array:\n\n```bash\nepisodes=(/path/to/season/*.mkv)\nbin/rastercast.sh \"${episodes[@]}\"\n```\n\n### YouTube Video\n\nStream a YouTube URL through `yt-dlp`:\n\n```bash\nbin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\n```\n\n### YouTube Queue\n\nQueue multiple YouTube URLs:\n\n```bash\nbin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID_1\" \"https://www.youtube.com/watch?v=VIDEO_ID_2\"\n```\n\n### YouTube Playlist\n\nExpand a YouTube playlist URL:\n\n```bash\nbin/rastercast.sh \"https://www.youtube.com/playlist?list=PLAYLIST_ID\"\nRASTERCAST_YTDLP_PLAYLIST_ITEMS=1:5 bin/rastercast.sh \"https://www.youtube.com/playlist?list=PLAYLIST_ID\"\n```\n\n### Direct Media URL\n\nDirect HTTP(S) media URLs are passed to `ffmpeg` without `yt-dlp`:\n\n```bash\nbin/rastercast.sh \"https://pc-host/video.mp4\"\n```\n\nThat command:\n\n- creates a temporary MPEG-TS stream\n- starts a local HTTP server\n- prints the playback URL once the stream file has data\n- deploys the MiSTer launcher if needed\n- starts playback on `mister` over SSH\n\nThe first run can take a moment because ffmpeg has to produce initial stream data before playback starts.\n\nBy default, rastercast connects to `root@mister`. SSH will prompt normally if you have not configured keys.\n\nAutomatic playback uses an interactive SSH TTY so keyboard controls can reach `mplayer`. Press `space` or `p` to pause, and `q` to quit playback and stop the PC stream.\n\nTo serve only and copy the printed URL yourself:\n\n```bash\nRASTERCAST_MISTER_AUTO=0 bin/rastercast.sh /path/to/video.mkv\n```\n\nThen open that URL with the MiSTer launcher:\n\n```bash\n/media/fat/Scripts/rastercast.sh \"http://pc-host:8090/stream.ts\"\n```\n\nFor automatic launch, rastercast checks whether `/media/fat/Scripts/rastercast.sh` exists and is executable on the MiSTer. If it is missing, rastercast deploys `mister/rastercast.sh` with `scp`, marks it executable, then starts playback.\n\nIf your MiSTer uses a different host, SSH user, script path, or deploy behavior:\n\n```bash\nRASTERCAST_MISTER_HOST=192.168.9.240 \\\nRASTERCAST_MISTER_USER=root \\\nRASTERCAST_MISTER_SCRIPT=/media/fat/Scripts/rastercast.sh \\\nRASTERCAST_MISTER_DEPLOY=auto \\\nRASTERCAST_MISTER_TTY=1 \\\nbin/rastercast.sh /path/to/video.mkv\n```\n\nIf the PC chooses the wrong address for the printed URL, force it:\n\n```bash\nRASTERCAST_HOST_IP=192.168.9.237 bin/rastercast.sh /path/to/video.mkv\n```\n\n## Options\n\nPC streaming:\n\n- `RASTERCAST_BIND_ADDR` sets the HTTP bind address, default `0.0.0.0`.\n- `RASTERCAST_HOST_IP` sets the host/IP printed in the playback URL; auto-detected by default.\n- `RASTERCAST_PORT` sets the HTTP port, default `8090`.\n- `RASTERCAST_STARTUP_TIMEOUT` sets how long to wait for initial stream data, default `30`.\n\nVideo output:\n\n- `RASTERCAST_VIDEO_BITRATE` sets the video bitrate, default `1000k`.\n- `RASTERCAST_VIDEO_SIZE` sets the PC transcode size as `WIDTHxHEIGHT`, default `320x240`.\n- `RASTERCAST_DISPLAY_ASPECT` sets the intended display shape, for example `4:3`; default `auto`.\n- `RASTERCAST_FPS` optionally forces output FPS, for example `30000/1001`.\n- `RASTERCAST_VIDEO_FIT` sets sizing: `auto`, `contain`, or `cover`; default `auto`.\n- `RASTERCAST_VIDEO_EFFECT` sets comma-separated effect presets: `none`, `acid`, `trails`, `edges`, `ghost`, `matrix`, `rgbshift`, `negative`, `warp`, `wobble`, `feedback`, `scanwarp`, `avs-feedback`, `avs-grid`, `avs-crt`, or `avs-neon`; default `none`.\n- `RASTERCAST_WATERMARK_TEXT` draws a text watermark in the lower right; default unset.\n- `RASTERCAST_WATERMARK_IMAGE` overlays a watermark image in the lower right; PNG, WebP, or SVG recommended.\n- `RASTERCAST_WATERMARK_X` sets the watermark X position as an ffmpeg expression; default is bottom-right.\n- `RASTERCAST_WATERMARK_Y` sets the watermark Y position as an ffmpeg expression; default is bottom-right.\n- `RASTERCAST_WATERMARK_SCALE` scales an image watermark from `0.0` to `1.0`; default `1`.\n- `RASTERCAST_WATERMARK_SIZE` sets watermark font size; default `18`.\n- `RASTERCAST_WATERMARK_MARGIN` sets watermark edge margin; default `8`.\n- `RASTERCAST_WATERMARK_OPACITY` sets watermark opacity from `0.0` to `1.0`; default `0.65` for text and image watermarks.\n- `RASTERCAST_VIDEO_SPEED` sets playback speed from `0.5` to `2.0`, default `1`.\n- `RASTERCAST_VISUALIZER` replaces source video with an audio visualizer: `none`, `waves`, `spectrum`, `cqt`, `vectorscope`, `freqs`, `spatial`, `histogram`, `bits`, or `projectm`; default `none`.\n- `RASTERCAST_PROJECTM` sets the ProjectM helper path when `RASTERCAST_VISUALIZER=projectm`; default `~/projects/rastercast-projectm/rastercast-projectm`.\n- `RASTERCAST_PROJECTM_PRESETS` sets the ProjectM preset directory; default `/usr/share/projectM/presets`.\n- `RASTERCAST_PROJECTM_PRESET` locks ProjectM to one preset file; default unset.\n- `RASTERCAST_PROJECTM_FPS` sets the ProjectM helper frame rate; default is `RASTERCAST_FPS` or `30`.\n- `RASTERCAST_PROJECTM_QUEUE_SIZE` sets ffmpeg queue size for ProjectM pipes; default `1024`.\n- `RASTERCAST_AUDIO_EFFECT` sets an audio effect preset: `none`, `echo`, `robot`, `radio`, `deep`, or `chipmunk`; default `none`.\n\nYouTube and other `yt-dlp` inputs:\n\n- `RASTERCAST_YTDLP` controls URL handling: `auto`, `1`, or `0`; default `auto`.\n- `RASTERCAST_YTDLP_FORMAT` sets the requested format; by default rastercast prefers progressive muxed HTTP video at 480p or lower.\n- `RASTERCAST_YTDLP_COOKIES_FROM_BROWSER` passes browser cookies, for example `brave`, `firefox`, or `chrome`.\n- `RASTERCAST_YTDLP_COOKIES` passes an exported cookies file.\n- `RASTERCAST_YTDLP_JS_RUNTIME` enables a JavaScript runtime for extraction, for example `node`.\n- `RASTERCAST_YTDLP_REMOTE_COMPONENTS` allows remote yt-dlp components, for example `ejs:github`.\n- `RASTERCAST_YTDLP_PLAYLIST_ITEMS` limits YouTube playlist expansion, for example `1:10`.\n- `RASTERCAST_QUEUE_SKIP_UNAVAILABLE` skips private/deleted queue items when set to `1`, default `0`.\n\nMiSTer auto-launch:\n\n- `RASTERCAST_MISTER_AUTO` enables automatic SSH launch: `1` or `0`; default `1`.\n- `RASTERCAST_MISTER_HOST` sets the MiSTer host/IP, default `mister`.\n- `RASTERCAST_MISTER_USER` sets the SSH user, default `root`.\n- `RASTERCAST_MISTER_SCRIPT` sets the remote script path, default `/media/fat/Scripts/rastercast.sh`.\n- `RASTERCAST_MISTER_DEPLOY` controls script deployment: `auto`, `always`, or `never`; default `auto`.\n- `RASTERCAST_MISTER_TTY` controls whether playback gets an interactive TTY: `1` or `0`; default `1`.\n- `RASTERCAST_MISTER_DETACH` starts MiSTer playback with `nohup` and lets SSH close immediately: `1` or `0`; default `0`.\n\nMiSTer playback:\n\n- `RASTERCAST_MPLAYER_VO` optionally sets the `mplayer` video output, for example `fbdev` or `fbdev2`.\n- `RASTERCAST_CACHE_KB` sets the `mplayer` cache size in KiB, default `8192`.\n- `RASTERCAST_CACHE_MIN` sets the percent cache fill before playback starts, default `10`.\n- `RASTERCAST_MPLAYER_AUTOSYNC` optionally sets `mplayer -autosync`, for example `30`.\n- `RASTERCAST_MPLAYER_FRAMEDROP` enables `mplayer -framedrop` when set to `1`, default `0`.\n\nOptional tuning:\n\n```bash\nRASTERCAST_VIDEO_BITRATE=1000k bin/rastercast.sh /path/to/video.mkv\nRASTERCAST_VIDEO_SIZE=640x480 RASTERCAST_VIDEO_BITRATE=2500k bin/rastercast.sh /path/to/video.mkv\nRASTERCAST_VIDEO_SIZE=512x240 RASTERCAST_DISPLAY_ASPECT=4:3 bin/rastercast.sh /path/to/video.mkv\nRASTERCAST_FPS=30000/1001 bin/rastercast.sh /path/to/video.mkv\nRASTERCAST_VIDEO_FIT=cover bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_FIT=contain bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=acid bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=trails bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=matrix bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=wobble bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=scanwarp bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_EFFECT=matrix,scanwarp,trails bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_WATERMARK_TEXT=MUCH bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_WATERMARK_IMAGE=/path/to/logo.png bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_WATERMARK_X=20 RASTERCAST_WATERMARK_Y=20 bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_WATERMARK_SCALE=0.25 RASTERCAST_WATERMARK_IMAGE=/path/to/logo.png bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_SPEED=0.75 bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=spectrum bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=vectorscope bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=spatial bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=bits bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=projectm RASTERCAST_FPS=30 bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=projectm RASTERCAST_PROJECTM_PRESETS=/usr/share/projectM/presets bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=projectm RASTERCAST_PROJECTM_PRESET=\"/usr/share/projectM/presets/Geiss - Swirlie 2.milk\" bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VISUALIZER=projectm RASTERCAST_PROJECTM_QUEUE_SIZE=2048 bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_AUDIO_EFFECT=echo bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_AUDIO_EFFECT=radio bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_YTDLP=1 bin/rastercast.sh \"https://example.com/video-page\"\nRASTERCAST_YTDLP_FORMAT='best[height\u003c=480][protocol^=http][vcodec!=none][acodec!=none]/best[protocol^=http][vcodec!=none][acodec!=none]' bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_YTDLP_COOKIES_FROM_BROWSER=firefox bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_YTDLP_COOKIES=/path/to/cookies.txt bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_YTDLP_JS_RUNTIME=node bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_YTDLP_REMOTE_COMPONENTS=ejs:github bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nbin/rastercast.sh \"https://www.youtube.com/playlist?list=PLAYLIST_ID\"\nRASTERCAST_YTDLP_PLAYLIST_ITEMS=1:5 bin/rastercast.sh \"https://www.youtube.com/playlist?list=PLAYLIST_ID\"\nRASTERCAST_QUEUE_SKIP_UNAVAILABLE=1 bin/rastercast.sh \"https://www.youtube.com/playlist?list=PLAYLIST_ID\"\n```\n\n`RASTERCAST_VIDEO_FIT=auto` is the default. It uses letterboxing for local files and direct media URLs, but center-crops `yt-dlp` inputs to fill the 320x240 CRT frame.\n`RASTERCAST_VIDEO_SIZE` changes the PC-side stream size. MiSTer video mode and BVM support still need to match the resolution you choose. `RASTERCAST_DISPLAY_ASPECT=4:3` can correct geometry when a wide 240p mode like `512x240` is displayed as a 4:3 raster.\n`RASTERCAST_VIDEO_EFFECT` defaults to `none`; available effects are `acid`, `trails`, `edges`, `ghost`, `matrix`, `rgbshift`, `negative`, `warp`, `wobble`, `feedback`, `scanwarp`, `avs-feedback`, `avs-grid`, `avs-crt`, and `avs-neon`. Multiple effects can be layered with commas; order matters.\n`RASTERCAST_VIDEO_SPEED` changes video and audio speed together. `RASTERCAST_AUDIO_EFFECT` can add `echo`, `robot`, `radio`, `deep`, or `chipmunk` processing.\n`RASTERCAST_VISUALIZER` replaces the source video with generated visuals from the audio stream. The built-in ffmpeg visualizers run inside ffmpeg. `RASTERCAST_VISUALIZER=projectm` uses the external `rastercast-projectm` helper to render MilkDrop/projectM frames from raw PCM and feed them back into the stream.\n\nAge-restricted YouTube videos require authenticated cookies. Use `RASTERCAST_YTDLP_COOKIES_FROM_BROWSER` with a browser profile that is signed in to YouTube, or export cookies and pass the file with `RASTERCAST_YTDLP_COOKIES`.\nIf YouTube signature solving fails, set `RASTERCAST_YTDLP_JS_RUNTIME=node`; newer `yt-dlp` builds may also need `RASTERCAST_YTDLP_REMOTE_COMPONENTS=ejs:github`.\nQueued YouTube playback resolves media URLs before starting ffmpeg and expects one progressive muxed media URL per video. HLS manifests and separate video/audio URLs are rejected because they are unreliable inside ffmpeg's concat demuxer. If needed, force a muxed progressive format with `RASTERCAST_YTDLP_FORMAT='best[height\u003c=480][protocol^=http][vcodec!=none][acodec!=none]/best[protocol^=http][vcodec!=none][acodec!=none]'`. Use `RASTERCAST_QUEUE_SKIP_UNAVAILABLE=1` to skip private or deleted queue entries.\n\nIf MiSTer reports `Cache empty`, increase the player cache or reduce bitrate:\n\n```bash\nRASTERCAST_CACHE_KB=16384 RASTERCAST_CACHE_MIN=20 /media/fat/Scripts/rastercast.sh \"http://pc-host:8090/stream.ts\"\nRASTERCAST_CACHE_KB=2048 RASTERCAST_CACHE_MIN=1 RASTERCAST_MPLAYER_AUTOSYNC=30 RASTERCAST_MPLAYER_FRAMEDROP=1 bin/rastercast.sh \"https://www.youtube.com/watch?v=VIDEO_ID\"\nRASTERCAST_VIDEO_BITRATE=700k bin/rastercast.sh /path/to/video.mkv\n```\n\n## Notes\n\n- Thanks to [mister_plex](https://github.com/mrchrisster/mister_plex) for the MiSTer playback and CRT setup guidance this project builds on.\n- YouTube input relies on `yt-dlp`; keep it updated and only stream content you are authorized to access this way.\n- MiSTer playback uses an 8192 KiB mplayer cache by default to avoid network starvation.\n- The framebuffer centering issue from the current setup is still expected to need calibration work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frickycodes%2Fmister_rastercast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frickycodes%2Fmister_rastercast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frickycodes%2Fmister_rastercast/lists"}