{"adoption": {"forks": 221, "observed_at": "2026-08-28T04:03:31.664574+00:00", "stars": 1085}, "canonical_url": "https://ross.abutalabs.com/products/fanficfare", "card": {"archived": false, "artifact_type": "cli-tool", "description": "FanFicFare is a tool for making eBooks from stories on fanfiction and other web sites.", "domain": ["files", "developer-tools"], "enriched": true, "function": ["web-scraping", "cli", "pdf"], "health_score": 100, "homepage": null, "language": "Python", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["JimmXinu/FanFicFare"], "name": "JimmXinu/FanFicFare", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2026-08-25T13:48:43+00:00", "repo": "JimmXinu/FanFicFare", "stars": 1085, "tags": ["fanfiction", "ebook", "epub", "calibre-plugin", "downloader", "automation"], "topics": ["fanfiction", "epub", "ebook", "downloader", "python", "calibre-plugin", "cli"], "urls": [], "use_cases": ["download fanfiction stories as epub ebooks", "update existing epub with new chapters only", "convert web fiction stories to ebook format", "calibre plugin to fetch fanfic into library", "download stories with images and cover art", "batch download fanfic from multiple supported sites"], "what_it_is": "FanFicFare is a Python tool that downloads stories from over 100 fanfiction and web fiction sites and converts them into EPUB (and HTML) eBook files. It is available both as a command-line CLI package and as a Calibre plugin, and can incrementally update previously downloaded EPUBs with only new chapters.", "when_to_avoid": ["you need a hosted web service - the web version was shut down in 2019", "you want to download from sites not on the supported list", "you need formats other than EPUB/HTML without converting via Calibre"], "when_to_choose": ["you read fanfiction on an e-reader and want clean EPUB files", "you use Calibre and want automatic story downloading and updating", "you need incremental updates that only fetch new chapters", "you want support for a wide range of fanfiction sites in one tool"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/fanficfare", "repo": "JimmXinu/FanFicFare", "role": "main", "score": 98}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "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:31.664574+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:31.664574+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:49:41.102730+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "695ae6465257a2cc69759c75864e12d91fa2e11a62ed0d8ee72d14d32e24fc9f", "fetched_at": "2026-08-28T04:03:31.664574+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JimmXinu/FanFicFare"}, {"content_hash": "b747cb6f6e40bf622b080275cdf91bd7e63c140d10c99741285e392e6056688e", "fetched_at": "2026-08-29T12:52:40.731061+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/fanficfare/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 95}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4172, "days_push": 8, "days_rel": 32, "gap_med": 30.0, "n_releases_24m": 23}, "score": 98, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}