[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-84146":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":10,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":27,"discoverSource":28},84146,"AnimaDex","zetaneko\u002FAnimaDex","zetaneko","Self-hosted, searchable gallery for Anima AI-generated anime character and artist references. Flask backend, vanilla JS frontend, SQLite storage, zero external dependencies for the core feature set.","http:\u002F\u002Fanimadex.net\u002F",null,"Python",56,9,1,0,2,3,7,48.8,"MIT License",false,"main",true,[],"2026-06-12 04:01:42","# AnimaDex\n\nSelf-hosted, searchable gallery for AI-generated anime character and\nartist references. Flask backend, vanilla JS frontend, SQLite storage,\nzero external dependencies for the core feature set.\n\nBuilt around three datasets:\n\n- **Characters** -- one entry per character with faceted filters\n  (copyright, hair colour, hair length, eye colour, gender), text\n  search, and optional CivitAI LoRA links.\n- **Artists** -- one entry per artist with optional quality scoring\n  (Muinez\u002Fartwork-scorer ConvNeXt model) and hand-curated category\n  filters.\n- **Copyrights** -- a browse view derived from the characters dataset,\n  with 2x2 collage thumbnails per series.\n\n## Quick start\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fyour-username\u002FAnimaDex.git\ncd AnimaDex\n.\u002Finstall.sh       # creates .venv, installs deps, seeds samples\n.\u002Frun.sh           # serves on http:\u002F\u002F127.0.0.1:5000\n```\n\nWindows:\n\n```bat\ngit clone https:\u002F\u002Fgithub.com\u002Fyour-username\u002FAnimaDex.git\ncd AnimaDex\ninstall.bat\nrun.bat\n```\n\nOn first run the installer copies a small sample bundle (~20\ncharacters, ~10 artists, thumbnails only) into your configured\n`data_dir` so the gallery isn't empty. Bring your own CSV + images to\nfill it out -- see `docs\u002Fdata-format.md`.\n\n### Clone the public dataset\n\nYou don't have to build your own dataset — you can pull the live catalogue\nstraight from [animadex.net](https:\u002F\u002Fanimadex.net). Sign in there, open\n**Account → \"Offline dataset export\"**, generate a token, then run the\nimport wizard here:\n\n```bat\nimport.bat         :: Windows\n```\n```bash\n.\u002Fimport.sh         # macOS \u002F Linux\n```\n\nIt downloads the character\u002Fartist metadata + thumbnails (full-res images\noptional) and ingests them locally. First run is a full import; later runs\nfetch only what changed. See **[docs\u002Fimport-from-site.md](docs\u002Fimport-from-site.md)**\nfor the details.\n\nIf you'd rather generate your own images based on the same dataset, note\nthe site uses the Danbooru CSVs from the\n[Huggingface dataset — Laxhar\u002Fnoob-wiki](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FLaxhar\u002Fnoob-wiki).\n\n## Configuration\n\nOne unified file: `config.toml`. The installer creates it from\n`config.toml.example`; edit it to set:\n\n- `[server].secret_key` -- required for sessions. Run\n  `python -m animadex genkey` to get a fresh hex value.\n- `[admin].password` -- only if you want the contact-form admin inbox.\n- `[paths].data_dir` -- where the SQLite DB and image folders live.\n  Defaults to `..\u002Fanimadex-data` so user data stays out of git.\n- `[cache].*` -- HTTP `max-age` per route group. Defaults are 0\n  (instant updates during dev); raise for production.\n\nAny value can also be overridden by an environment variable named\n`ANIMADEX_\u003CSECTION>_\u003CKEY>` (e.g. `ANIMADEX_SERVER_PORT=8080`).\n\nSee `docs\u002Fconfiguration.md` for the full reference.\n\n## Pipeline\n\nThe `python -m animadex pipeline \u003Ccsv>` command processes a CSV\nrow-by-row. For each row it:\n\n1. Upserts the row into SQLite.\n2. Generates the full image via ComfyUI -- if `generation.workflow_file`\n   is set and the file is missing. Otherwise the orchestrator notes the\n   path and moves on, so you can drop your own renders in by hand.\n3. Builds the WebP thumbnail if missing or stale.\n4. Scores the artist (artists only, if `features.scoring_enabled`).\n5. Stamps `image_version` so the web app cache-busts URLs that change.\n\nEach step is idempotent. Re-running on a row that's already fully\nprocessed does no work; delete a thumbnail and re-run to rebuild just\nthat thumbnail.\n\n```bash\n# Process all rows\npython -m animadex pipeline data\u002Fcharacters.csv --mode characters\n\n# Just one row (handy when you re-render one image)\npython -m animadex pipeline data\u002Fcharacters.csv --mode characters \\\n    --rows hatsune_miku\n\n# Preview the plan without writing anything\npython -m animadex pipeline data\u002Fcharacters.csv --mode characters \\\n    --dry-run --limit 5\n```\n\nSee `docs\u002Fpipeline.md` for plugging in your own image generator.\n\n## Optional features\n\nEach ships disabled. Flip the matching `[features]` switch in\n`config.toml` and install the right requirements file:\n\n| Feature | Extra deps | Notes |\n| ------- | ---------- | ----- |\n| Artist scoring | `pip install -r requirements-scoring.txt` | Downloads the artwork-scorer model on first use (~350 MB). |\n| Image generation | `pip install -r requirements-generation.txt` | Needs a running ComfyUI server + your own workflow JSON. |\n| CivitAI LoRA sync | (none) | API key in `[civitai].api_key` raises the rate limit. |\n\n## Architecture\n\n```\nanimadex\u002F                Python package\n  app.py                 Flask factory\n  config.py              TOML loader + env override\n  db.py                  SQLite layer (sqlite3, no ORM)\n  schema.sql             Tables, indices\n  images.py              URL builders, ?v= cache-busting\n  ratelimit.py           Per-IP sliding-window limiter\n  gzip_mw.py             Response compression\n  auth.py \u002F captcha.py   Admin session + contact captcha\n  routes\u002F                One module per blueprint\n    api_gallery.py       \u002Fapi\u002F\u003Cmode>\u002F{facets,facet,search}\n    api_images.py        \u002Fthumb \u002Fimg\n    pages.py             \u002F  \u002Fc\u002F\u003Cslug>\n    sitemap.py           \u002Fsitemap.xml\n    contact.py           \u002Fapi\u002Fcontact*\n    admin.py             \u002Fadmin\u002F*\n  pipeline\u002F              Data ingestion + image work\n    orchestrator.py      Per-row driver\n    ingest.py            CSV -> SQLite upsert\n    thumbnails.py        WebP builds + copyright collages\n    scoring.py           artwork-scorer (optional)\n    loras.py             CivitAI sync\n    generation.py        Shell out to scripts\u002Fgenerate_dataset.py\n  templates\u002F  static\u002F\n\nscripts\u002F                 Standalone scripts (not on the Python path)\n  generate_dataset.py    ComfyUI driver -- replace with your own\n  clean_explicit_tags.py CSV tag-pruning helper\n\nsamples\u002F                 Tiny seed CSVs + thumbnails (committed)\ndocs\u002F                    Configuration + pipeline references\n```\n\nThe Python package is self-contained. Image folders, the SQLite DB,\nand downloaded models all live under `paths.data_dir` -- not inside\nthe repo -- so `git status` stays clean.\n\n## License\n\nMIT. See `LICENSE`.\n","2026-06-11 04:12:24","CREATED_QUERY"]