Skip to content

persist credits; new audio tags; sanitize tags; docker dev#140

Closed
sevenrats wants to merge 2 commits intopennydreadful:developfrom
sevenrats:feat/improve_audio_tagging
Closed

persist credits; new audio tags; sanitize tags; docker dev#140
sevenrats wants to merge 2 commits intopennydreadful:developfrom
sevenrats:feat/improve_audio_tagging

Conversation

@sevenrats
Copy link
Copy Markdown

Persist Credits

Before: Editions only stored author info. Non-author contributors like narrators and illustrators from the BookInfo API were discarded.

Now: Editions have a Credits list that captures non-author contributors (narrator, illustrator, editor, etc.) from the BookInfo API. These are stored as JSON in the database and exposed through the API.

Audio tag writing — narrator/illustrator

Before: Audio files had no narrator or illustrator tags.

Now: Narrator and illustrator are read from edition credits and written to all 5 tag formats (ID3v2 TXXX frames, Xiph fields, APE items, ASF descriptors, Apple dash boxes). The Diff method also tracks changes to these fields.

Audio tag writing — cover art atom ordering fix

Before: Cover art was written in the middle of tag assignment, before format-specific tags. In M4B files this put the large covr atom before aART, trkn, ©day, and all ---- dash boxes. Some parsers (ATL) stop reading ilst children after a large covr atom and miss everything after it.

Now: Cover art is written last, after all format-specific tags. The covr atom lands at the end of the ilst container so all metadata atoms precede it.

Audio tag writing — null byte sanitization

Before: String values from the database were written to tags as-is. If a field contained null bytes or other control characters (e.g. Dungeon Crawler Carl's description), they were embedded into the file, corrupting the tag.

Now: All string fields are stripped of null bytes and C0 control characters (except tab/newline/CR) before writing. Empty results become null so nothing is written.

Docker dev build

Before: No way to build a Docker image without host tools. The existing Dockerfile expected pre-built artifacts.

Now: docker/Dockerfile.dev is a multi-stage build (dotnet SDK → node → alpine runtime) that compiles everything inside Docker. Copies .editorconfig and Logo/ which are required for the build but live outside src/.

@sevenrats
Copy link
Copy Markdown
Author

closing in favor of upstream
mono/taglib-sharp#377

@sevenrats sevenrats closed this Mar 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant