{"id":37076300,"url":"https://github.com/nobekanai/dvtag","last_synced_at":"2026-01-14T08:58:37.692Z","repository":{"id":41061287,"uuid":"410778645","full_name":"NobeKanai/dvtag","owner":"NobeKanai","description":"A command-line tool designed to tag your doujin voice library. Support mp3/m4a/flac.","archived":false,"fork":false,"pushed_at":"2025-04-29T02:35:26.000Z","size":44,"stargazers_count":55,"open_issues_count":1,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-31T01:22:00.294Z","etag":null,"topics":["audio","dlsite","python","tagger","tagging-tool"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NobeKanai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-09-27T07:09:56.000Z","updated_at":"2025-10-18T20:21:27.000Z","dependencies_parsed_at":"2024-04-15T12:57:20.658Z","dependency_job_id":"6b77060f-6739-4b40-9189-a8c1605f9a1c","html_url":"https://github.com/NobeKanai/dvtag","commit_stats":{"total_commits":36,"total_committers":1,"mean_commits":36.0,"dds":0.0,"last_synced_commit":"59c3ae2e642d4cee79c8f1450612d14ba6ff93d0"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NobeKanai/dvtag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NobeKanai%2Fdvtag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NobeKanai%2Fdvtag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NobeKanai%2Fdvtag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NobeKanai%2Fdvtag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NobeKanai","download_url":"https://codeload.github.com/NobeKanai/dvtag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NobeKanai%2Fdvtag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","dlsite","python","tagger","tagging-tool"],"created_at":"2026-01-14T08:58:37.109Z","updated_at":"2026-01-14T08:58:37.684Z","avatar_url":"https://github.com/NobeKanai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DVTAG\n\nCommand-line tagger for doujin voice libraries. Point it at a folder tree that contains DLSite work numbers (RJ/BJ/VJ) in folder names and it will fetch metadata, write tags, and optionally transcode wav files.\n\n## What it does\n- Recursively finds directories whose names include `RJxxxxxx`, `BJxxxxxx`, or `VJxxxxxx` (6 or 8 digits) and treats each as a release.\n- Scrapes metadata from DLSite and refines title/cover details via Chobit when possible.\n- Writes tags for FLAC, M4A, and MP3 (album, date, circle, seiyu, genres, cover, track/disc numbers).\n- Tries to strip numbering prefixes from track titles based on filename patterns.\n- Optional: transcode `.wav` to `.flac` or `.mp3` using ffmpeg, deleting the source wavs after success.\n\n## Requirements\n- Python 3.9+\n- ffmpeg on PATH (only needed when using transcoding flags)\n- Network access to dlsite.com and chobit.cc\n\n## Installation\n\n```bash\npip install dvtag            # or: pipx install dvtag\npip install --upgrade dvtag  # upgrade (pipx upgrade dvtag)\n```\n\n## Quick start\n1) Ensure each release folder name contains a work number (e.g., `RJ123456`, `rj123456 bonus`, `xxx_RJ01123456`).\n2) Run:\n\n```bash\ndvtag /path/to/your/library        # tag in place\ndvtag -w2f /path/to/your/library   # tag + transcode wav -\u003e flac\ndvtag -w2m /path/to/your/library   # tag + transcode wav -\u003e mp3 (320k)\n```\n\n## CLI reference\n\n```\nusage: dvtag [-h] [-v] [-w2f] [-w2m] dirpath\n\nDoujin Voice Tagging Tool (tagging in place)\n\npositional arguments:\n  dirpath        a required directory path\n\noptions:\n  -h, --help     show this help message and exit\n  -v, --version  show program's version number and exit\n  -w2f           transcode all wav files to flac [LOSELESS]\n  -w2m           transcode all wav files to mp3\n```\n\n## How it works (and current quirks)\n- **Discovery**: walks the given directory; once a folder with a work number is found, tagging happens inside it instead of recursing deeper.\n- **Metadata**: pulls work name, circle, seiyu, genres, sale date, cover from DLSite; Chobit is queried for a potentially shorter title and a square thumbnail if available.\n- **Cover choice**: currently prefers the Chobit square thumbnail, but some releases look better with the standard DLSite cover (usually landscape). A user-selectable preference is a known need.\n- **Genre order**: genres are kept in the order returned by DLSite. The tag comparison logic may still rewrite files when the same genres appear in a different order; smarter equality is on the roadmap.\n- **Track titles**: attempts to remove numeric prefixes from filenames when they follow common track-number patterns; otherwise uses the raw stem.\n- **Logging**: minimal console logging; improving verbosity/structure is planned.\n- **Idempotency**: tags are only written when they differ from existing tags, but the gaps above can still cause redundant writes.\n\n## Current limitations and ideas\n- **Caching**: no cache; repeated runs on large libraries hit DLSite/Chobit every time, slowing execution and adding load. Add a local metadata cache with expiry.\n- **Genre/tag comparison**: treat genre lists as sets (or configurable) to avoid unnecessary rewrites while preserving source order.\n- **Logging and observability**: structured logs, progress, and clearer error handling.\n\n## License\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnobekanai%2Fdvtag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnobekanai%2Fdvtag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnobekanai%2Fdvtag/lists"}