Skip to main content

DVTAG

Command-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.

What it does

  • Recursively finds directories whose names include RJxxxxxx, BJxxxxxx, or VJxxxxxx (6 or 8 digits) and treats each as a release.
  • Scrapes metadata from DLSite and refines title/cover details via Chobit when possible.
  • Writes tags for FLAC, M4A, and MP3 (album, date, circle, seiyu, genres, cover, track/disc numbers).
  • Tries to strip numbering prefixes from track titles based on filename patterns.
  • Optional: transcode .wav to .flac or .mp3 using ffmpeg, deleting the source wavs after success.

Requirements

  • Python 3.9+
  • ffmpeg on PATH (only needed when using transcoding flags)
  • Network access to dlsite.com and chobit.cc

Installation

pip install dvtag            # or: pipx install dvtag
pip install --upgrade dvtag  # upgrade (pipx upgrade dvtag)

Quick start

  1. Ensure each release folder name contains a work number (e.g., RJ123456, rj123456 bonus, xxx_RJ01123456).
  2. Run:
dvtag /path/to/your/library        # tag in place
dvtag -w2f /path/to/your/library   # tag + transcode wav -> flac
dvtag -w2m /path/to/your/library   # tag + transcode wav -> mp3 (320k)

CLI reference

usage: dvtag [-h] [-v] [-w2f] [-w2m] dirpath

Doujin Voice Tagging Tool (tagging in place)

positional arguments:
  dirpath        a required directory path

options:
  -h, --help     show this help message and exit
  -v, --version  show program's version number and exit
  -w2f           transcode all wav files to flac [LOSELESS]
  -w2m           transcode all wav files to mp3

How it works (and current quirks)

  • Discovery: walks the given directory; once a folder with a work number is found, tagging happens inside it instead of recursing deeper.
  • 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.
  • 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.
  • 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.
  • Track titles: attempts to remove numeric prefixes from filenames when they follow common track-number patterns; otherwise uses the raw stem.
  • Logging: minimal console logging; improving verbosity/structure is planned.
  • Idempotency: tags are only written when they differ from existing tags, but the gaps above can still cause redundant writes.

Current limitations and ideas

  • 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.
  • Genre/tag comparison: treat genre lists as sets (or configurable) to avoid unnecessary rewrites while preserving source order.
  • Logging and observability: structured logs, progress, and clearer error handling.

License

MIT

Release files for dvtag 0.7.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dvtag 0.7.8
File Size Uploaded
dvtag-0.7.8.tar.gz 9.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dvtag 0.7.8
File Interpreter ABI Platform
dvtag-0.7.8-py3-none-any.whl Python 3 none any Details

Total release size: 20.6 kB

Release files / dvtag-0.7.8.tar.gz

Download URL dvtag-0.7.8.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0d09d9aec4d43ad42f84834e925c50883129ae473300c8cb8c91fcd88b9cb1e9
BLAKE2b-256 checksum
How to use checksums
c3762f96f68f3a7a9cc18062e3b3fba5c2b160c5a6ebe68887052550b4577808
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / dvtag-0.7.8-py3-none-any.whl

Download URL dvtag-0.7.8-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f533876a47bcffb43c2b232427e109214d14ffb8cbb24b098af4891f2ce86c12
BLAKE2b-256 checksum
How to use checksums
9239cf25dcc749baeccaac371dac8eeb4583ce77ca0073a97ea882e8e234c893
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

This release

0.7.8 This release

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.5

2 release files

0.6.4

1 release file

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

1 release file

0.4.4

1 release file

0.4.3

1 release file

0.4.2

2 release files

0.4.1

1 release file

0.4.0

1 release file

0.3.5

1 release file

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page