Add Doujin Album Data
Goal
Create a new public/data/<album name>/ entry that matches this repository's existing local-json metadata style, uses verified source-page information, has a stable album ULID, and includes a usable cover.jpg or cover.png.
Workflow
Inspect nearby examples first.
- Search
public/datafor the label, artist, catalog number, and source site ID. - Preserve the established compact style: shared album fields appear on the first track, later tracks omit repeated album-level fields unless they differ.
- Search
Verify the external source directly.
- Prefer the exact URL or ID supplied by the user over search snippets.
- If search results or cached snippets disagree with the page, treat the live page as authoritative and call out the mismatch if it affected the work.
- On Dizzylab, capture at least: album title, label/album artist, release year/date, tags/genre, track titles, track artists/composers, source ID, and cover URL.
- Do not infer a different album from adjacent recommendations, label pages, or stale search results.
Create the data folder.
- Use the exact album title as the folder name unless Windows-forbidden characters must be removed.
- Put files under
public/data/<album title>/. - Add
album.json,metadata.json, andcover.jpgorcover.png. - Run
pnpm album:idand store the resulting unprefixed lowercase ULID inalbum.jsonas{ "id": "..." }. Generate it once and never derive it from or change it with the album or folder name.
Write
metadata.json.- Use JSON array syntax.
- First track should normally include:
titleartistsif the displayed performing artist differs from composer or the existing local style uses artistscomposersfor track creators when source data shows track artist/creatoralbumalbumOrderfor the catalog or source catalog number when presentalbumArtistsgenresyearextraData.links.dizzylabor other supported link IDs
- Later tracks should include only changed or track-specific fields.
- Interpret
artistsfrom the credited roles instead of mechanically copyingcomposers. Ifartistswould otherwise contain only vocalists or featured vocal performers, also include the composers so the musical creators are represented. If the source already credits an arranger or remixer inartists, the original composers do not also need to appear there. - Remove featured-artist credits such as
(feat. Name)fromtitleand place those featured artists first inartists, followed by the other credited artists or composers required by the role rule above. Preserve the remaining track title, including unrelated version or remix labels. - For remixes, put the remix artist or arranger in
artistsand keep the original composer incomposerswhen known. Add the original artist only when the source credits them on the released track.
Download the cover from the source page.
- Use the source page's full-resolution cover URL when visible.
- Keep the file below roughly 2 MB when practical, matching
CONTRIBUTING.md. - Use the extension that matches the downloaded file.
Validate.
- Parse the new
metadata.jsonwith a JSON parser, for example:Get-Content 'public\data\<album>\metadata.json' | ConvertFrom-Json - Run
pnpm buildto validate thealbum.jsonULID format and uniqueness across the catalog. - Confirm cover file exists and has nonzero size.
- For tracks with both
artistsandcomposers, verify the source roles: composers must also appear inartistswhen the remaining artists are only vocalists, but need not be duplicated when an arranger or remixer is already credited. - Run
pnpm run type-checkwhen practical. If sandboxed Corepack/pnpm access fails withEPERM, rerun with normal permissions. - Validate this skill with UTF-8 mode on Windows if any skill file contains Chinese or other non-ASCII text:
The validator importspython -X utf8 'C:\Users\Laevateinn\.codex\skills\.system\skill-creator\scripts\quick_validate.py' '.agents\skills\add-doujin-album-data'yaml, so installPyYAMLfor the active Python first if needed:python -m pip install PyYAML - Check
git status --shortand make sure only the intended album folder was added or changed.
- Parse the new
Dizzylab Notes
extraData.links.dizzylabstores only the album ID, not the full URL.- Dizzylab URLs render as
https://www.dizzylab.net/d/<id>. - The page title and
<h1>may be more reliable than search-result titles when an ID has recently changed or caches are stale. - The cover often appears in HTML as
https://cdn.dizzylab.net/media/cover/<id>.jpg, but read the page instead of assuming the extension.