{"adoption": {"forks": 21, "observed_at": "2026-08-28T04:03:49.588643+00:00", "stars": 1163}, "canonical_url": "https://ross.abutalabs.com/products/typed-ffmpeg", "card": {"archived": false, "artifact_type": "library", "description": "Type-safe FFmpeg bindings for Python & TypeScript — filters, typing, and docs", "domain": ["media", "developer-tools"], "enriched": true, "function": ["video-processing", "audio-processing", "serialization", "developer-tools"], "health_score": 99, "homepage": "https://lucemia.github.io/typed-ffmpeg/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["lucemia/typed-ffmpeg"], "name": "lucemia/typed-ffmpeg", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-23T12:47:26+00:00", "repo": "lucemia/typed-ffmpeg", "stars": 1163, "tags": ["ffmpeg", "type-safe", "filter-graph", "media-processing", "ffprobe", "code-generation", "video", "automation", "typescript", "nodejs"], "topics": ["ffmpeg", "ffmpeg-python", "ffmpeg-wrapper", "media", "media-processing", "multi-media", "python", "typing", "npm", "typescript", "ffmpeg-typescript"], "urls": [], "use_cases": ["build ffmpeg filter graphs with type checking in python", "generate ffmpeg commands programmatically with autocomplete", "serialize and reload ffmpeg filter graphs as", "probe media file metadata with ffprobe from python", "construct complex video/audio filter pipelines without shell strings", "visualize ffmpeg filter graphs for debugging"], "what_it_is": "typed-ffmpeg is a type-safe wrapper library around FFmpeg for Python and TypeScript, providing IDE-friendly construction of media filter graphs with full typing and inline documentation. It supports JSON serialization of filter graphs, graph visualization, validation, and media file analysis via ffprobe.", "when_to_avoid": ["you need to actually decode/encode media inside your process rather than shelling out to ffmpeg", "you need a GUI for video editing", "your project does not use python or typescript"], "when_to_choose": ["you want type-safe, IDE-friendly ffmpeg bindings instead of raw command strings", "you need to build, validate, and reuse complex filter graphs programmatically", "you want zero-dependency python bindings for ffmpeg", "you need multi-version ffmpeg support with per-version packages"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/typed-ffmpeg", "repo": "lucemia/typed-ffmpeg", "role": "main", "score": 94}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "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:03:49.588643+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:49.588643+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:31:34.259903+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88f2840085b2cf99c4d8131e54301f5d4ad6bc6019c7f737fb9d4a958243428b", "fetched_at": "2026-08-28T04:03:49.588643+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lucemia/typed-ffmpeg"}, {"content_hash": "d9810c8eb01166c42f6320205847130230bffb193b3d4c309d7b1413019b6a6a", "fetched_at": "2026-08-29T12:36:04.552548+00:00", "kind": "homepage", "missing": false, "url": "https://lucemia.github.io/typed-ffmpeg/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 72, "rhythm": 99}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1013, "days_push": 10, "days_rel": 11, "gap_med": 4.0, "n_releases_24m": 47}, "score": 94, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}