{"adoption": {"forks": 212, "observed_at": "2026-09-03T02:15:07.218905+00:00", "stars": 1157}, "canonical_url": "https://ross.abutalabs.com/products/novelforge", "card": {"archived": false, "artifact_type": "application", "description": "AI辅助长篇小说创作，卡片式创作，支持基于 JSON Schema的结构化 AI 生成与上下文引用，可扩展性强。", "domain": ["large-language-models", "developer-tools"], "enriched": true, "function": ["llm-inference", "prompt-engineering", "agent-framework", "editor", "workflow-automation", "templating"], "health_score": 100, "homepage": null, "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["RhythmicWave/NovelForge"], "name": "RhythmicWave/NovelForge", "platform": ["python", "self-hosted", "cross-platform"], "pushed_at": "2026-09-02T05:27:05+00:00", "repo": "RhythmicWave/NovelForge", "stars": 1157, "tags": ["ai-writing", "novel-writing", "card-based-creation", "-schema", "structured-generation", "knowledge-graph", "longform-writing", "fiction", "natural-language-processing", "ai-agents", "creative-writing", "web-server"], "topics": ["ai-writing", "ai-writing-assistant", "creative-writing", "creative-writing-ai", "fiction", "json-schema", "llm", "longform", "novel-writing", "outline", "pydantic", "structured-generation"], "urls": [], "use_cases": ["write a million-word novel with AI assistance", "generate structured story cards like characters and worldbuilding", "maintain character and plot consistency across long fiction", "outline and draft novel chapters with LLM help", "automate repetitive writing workflows with custom workflows", "brainstorm story ideas with an AI agent"], "what_it_is": "NovelForge is an AI-assisted long-form novel writing application built in Python, using a card-based creation model with JSON Schema-driven structured generation and context injection. It includes a knowledge graph for consistency, an inspiration agent, and a code-based workflow system for automating creative processes.", "when_to_avoid": ["you only need a simple markdown editor without AI features", "you require a fully open permissive license (it is AGPL-3.0)", "you need a polished commercial product rather than an actively evolving tool", "you write short-form content where long-form consistency tooling is overkill"], "when_to_choose": ["you need structured, schema-validated AI generation for long fiction", "you want card-based modular worldbuilding and outline management", "you need context injection and knowledge graphs to keep long stories consistent", "you want to automate multi-step creative workflows with LLMs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/novelforge", "repo": "RhythmicWave/NovelForge", "role": "main", "score": 85}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:07.218905+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:35:22.755995+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6cbf4846cd3bacfded8c2f4d5c943154074ab171c58e6f4cb4a8bb1885c3e39f", "fetched_at": "2026-09-03T02:15:07.218905+00:00", "kind": "readme", "missing": false, "url": "https://github.com/RhythmicWave/NovelForge"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 27, "rhythm": 99}, "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": 389, "days_push": 0, "days_rel": 9, "gap_med": 7, "n_releases_24m": 28}, "score": 85, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}