{"adoption": {"forks": 762, "observed_at": "2026-08-28T04:09:44.880582+00:00", "stars": 6521}, "canonical_url": "https://ross.abutalabs.com/products/podcastfy", "card": {"archived": false, "artifact_type": "library", "description": "An Open Source Python alternative to NotebookLM's podcast feature: Transforming Multimodal Content into Captivating Multilingual Audio Conversations with GenAI", "domain": ["artificial-intelligence", "large-language-models", "developer-tools"], "enriched": true, "function": ["llm-inference", "tts", "speech-recognition", "nlp", "cli", "sdk"], "health_score": 78, "homepage": "https://www.podcastfy.ai", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["souzatharsis/podcastfy"], "name": "souzatharsis/podcastfy", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-05-04T14:49:10+00:00", "repo": "souzatharsis/podcastfy", "stars": 6521, "tags": ["notebooklm-alternative", "podcast-generation", "audio-conversations", "multimodal", "genai", "elevenlabs", "gemini", "openai", "text-to-speech", "multilingual", "audio", "natural-language-processing", "docker"], "topics": ["elevenlabs", "gemini", "genai", "notebooklm", "openai", "podcast"], "urls": [], "use_cases": ["generate podcast-style audio conversations from PDFs and websites", "open source alternative to NotebookLM audio overviews", "convert YouTube videos into multilingual audio discussions", "programmatically generate AI podcasts at scale", "turn images and documents into audio dialogue", "create custom AI-generated audio content via API"], "what_it_is": "Podcastfy is an open-source Python package and CLI that transforms multimodal content (websites, PDFs, images, YouTube videos, topics) into engaging multilingual audio conversations using GenAI models like Gemini and OpenAI, with TTS via ElevenLabs. It serves as a programmatic, customizable alternative to NotebookLM's podcast feature.", "when_to_avoid": ["you need a polished no-code web interface like NotebookLM", "you cannot use paid third-party APIs (LLM and TTS providers)", "you need fully offline generation without cloud services"], "when_to_choose": ["you need programmatic, API-driven podcast generation rather than a UI tool", "you want customization of voices, languages, and conversation style", "you need to process diverse multimodal inputs (PDFs, images, URLs, videos)", "you want to integrate audio conversation generation into your own pipeline"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/podcastfy", "repo": "souzatharsis/podcastfy", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "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:44.880582+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:44.880582+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:44:25.646025+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e5f4a8fed05a929aac89732c67194ed02300ab59d3fcd4272c2b4556930878d5", "fetched_at": "2026-08-28T04:09:44.880582+00:00", "kind": "readme", "missing": false, "url": "https://github.com/souzatharsis/podcastfy"}, {"content_hash": "bfc29fe917eb5407e1566647b4ea7350a8684b8d72bde8c099915f46cfea9427", "fetched_at": "2026-08-29T08:40:45.988371+00:00", "kind": "homepage", "missing": false, "url": "https://www.podcastfy.ai"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 80, "longevity": 50, "rhythm": 40}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 702, "days_push": 121, "days_rel": 655, "gap_med": 0, "n_releases_24m": 20}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}