{"adoption": {"forks": 293, "observed_at": "2026-08-28T04:09:52.814930+00:00", "stars": 7017}, "canonical_url": "https://ross.abutalabs.com/products/mediabunny", "card": {"archived": false, "artifact_type": "library", "description": "Pure TypeScript media toolkit for reading, writing, and converting video and audio files, directly in the browser.", "domain": ["media", "web-development"], "enriched": true, "function": ["video-processing", "audio-processing", "serialization"], "health_score": 100, "homepage": "https://mediabunny.dev/", "language": "TypeScript", "license": "MPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["Vanilagy/mediabunny"], "name": "Vanilagy/mediabunny", "platform": ["browser", "cross-platform"], "pushed_at": "2026-08-26T11:51:48+00:00", "repo": "Vanilagy/mediabunny", "stars": 7017, "tags": ["webcodecs", "muxing", "demuxing", "transcoding", "mp4", "webm", "typescript", "zero-dependency", "tree-shakable", "ffmpeg-alternative", "video", "audio", "web-server", "nodejs"], "topics": ["audio", "decoding", "demuxing", "encoding", "media", "mp3", "mp4", "muxing", "ogg", "video", "wav", "webcodecs", "webm", "typescript", "library", "npm"], "urls": [], "use_cases": ["convert video files to mp4 or webm in the browser", "extract metadata like duration and resolution from a media file", "read individual video frames from an mp4 with frame-accurate timing", "trim or compress a video client-side without uploading to a server", "mux canvas recordings into a video file", "resize, crop, or rotate video in a web app", "resample or downmix audio tracks in the browser", "build a browser-based video editor"], "what_it_is": "Mediabunny is a pure TypeScript, zero-dependency library for reading, writing, and converting video and audio files (MP4, WebM, MP3, WAV, OGG, HLS) directly in the browser, built on the WebCodecs API. It provides lazy, frame-accurate reading, fine-grained muxing/demuxing control, and a high-level conversion API for transcoding, trimming, resizing, and more.", "when_to_avoid": ["you need server-side or native media processing outside the browser", "you require codecs or container formats not supported by WebCodecs", "you need a full-featured CLI like FFmpeg with its broad codec ecosystem"], "when_to_choose": ["you need client-side media processing without a server or FFmpeg", "you want fine-grained control over muxing, demuxing, and track timing", "bundle size matters and you want tree-shakable, zero-dependency code", "you need to handle large files efficiently via lazy reading or streaming output"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mediabunny", "repo": "Vanilagy/mediabunny", "role": "main", "score": 85}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:52.814930+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:40:41.805135+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3d9216cda1a3c76aa751f52ba68a7386b102f685563fc6e88a048b13f5011b78", "fetched_at": "2026-08-28T04:09:52.814930+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Vanilagy/mediabunny"}, {"content_hash": "df725eccc9dfedceb3ce0a896cd598139414ffb504790cce17c3237e246cd35b", "fetched_at": "2026-08-29T08:36:48.163700+00:00", "kind": "homepage", "missing": false, "url": "https://mediabunny.dev/"}, {"content_hash": "a628c7653c7b928eab843f29bfddbb8765616ee970c016c78d9fe5d583608481", "fetched_at": "2026-08-29T08:36:48.166859+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/reading-media-files"}, {"content_hash": "28aab122e0842be730af02c5a820f42dd65ba94ceb99a84881a35e93f37c2b95", "fetched_at": "2026-08-29T08:36:48.169676+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/writing-media-files"}, {"content_hash": "ad42565983d8ad1bacc530a2904e880a7099e5e69147130712b3f0b4501994cf", "fetched_at": "2026-08-29T08:36:48.171986+00:00", "kind": "site_page", "missing": false, "url": "https://mediabunny.dev/guide/converting-media-files"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 52, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 731, "days_push": 7, "days_rel": 7, "gap_med": 1, "n_releases_24m": 162}, "score": 85, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}