Nodes/Nova Audio Player/Nova Master Identity ๐Ÿชช
ComfyUI Node

Nova Master Identity ๐Ÿชช

Release metadata, and an archive name that isn't FINAL_v3

By NovaFemmeยทCreated about a month agoยทUpdated 6 days agoยท 1
Nova Master Identity ๐Ÿชช
    • identity_json
    • fingerprint_json
    • archive_name
    โ—„report_jsonโ–บ
    โ—„artist_nameโ–บ
    โ—„track_titleโ–บ
    โ—„artist_initialsโ–บ
    โ—„track_number1โ–บ
    โ—„versionMasterโ–บ
    โ—„album_titleโ–บ
    โ—„catalog_numberโ–บ
    โ—„isrcโ–บ
    โ—„publisherโ–บ
    โ—„labelโ–บ
    โ—„mastering_engineerโ–บ
    โ—„mastering_companyNova Audio Masterโ–บ
    โ—„copyright_ownerโ–บ
    โ—„release_year2026โ–บ
    โ—„composerโ–บ
    โ—„producerโ–บ
    โ—„mix_engineerโ–บ
    โ—„project_nameโ–บ
    โ—„territoryโ–บ
    โ—„languageโ–บ
    โ—„explicit_flagfalseโ–บ
    โ—„upc_eanโ–บ
    โ—„work_idโ–บ
    โ—„client_referenceโ–บ
    โ—„notesโ–บ
    โ—„target_bit_depth24โ–บ
    โ—„target_sample_rate48000โ–บ
    โ—„identity_fields_jsonโ–บ

    Every music folder on every drive has a master_final_v3_ACTUAL.aiff in it. The naming is a symptom: the file carries the identity of a release in its filename, because nothing else in the pipeline knows what it is.

    Nova Master Identity ๐Ÿชช turns a mastering report into release and archive identity - what source, what settings, what came out - and emits a deterministic archive name plus a fingerprint you can validate against later.

    How it works

    You feed it the report_json from Nova Audio Master. It attaches a publication identity to that report: artist, title, track number, version, catalogue number, ISRC, label, credits, territory, language, explicit flag, plus a target format (target_bit_depth of 24 or 16, target_sample_rate of 48000, 44100 or 96000). Then it computes:

    • An archive name, built from track number, artist initials, title, version and target format - sanitised into something filesystem-safe, and deterministic, so re-running produces the same name rather than a new timestamped mess.
    • A fingerprint - a JSON record of the source PCM SHA-256, the master PCM SHA-256, a settings hash, the reproduction fingerprint, a report payload hash, hashes of the recording and publication identities, and a hash of the fingerprint record itself.

    The report also records lineage: a parent report id and a root report id, so a re-master of a re-master can still be traced back to the take it came from.

    Outputs: identity_json (the enriched report), fingerprint_json, and archive_name - which is the one you wire into the validator.

    Inputs

    Required: report_json and artist_name and track_title. Everything else is optional - and "everything else" is about two dozen fields: artist_initials, track_number, version (Master by default), album_title, catalog_number, isrc, publisher, label, mastering_engineer, mastering_company, copyright_owner, release_year, composer, producer, mix_engineer, project_name, territory, language, explicit_flag, upc_ean, work_id, client_reference, notes, and the two target-format combos.

    Do not retype those from a spreadsheet. That's what identity_fields_json is for: wire it from Nova SQLite Reader's identity_json output with that node's column_set set to identity. Every field it carries replaces the widget below it, blanks are ignored, and fields it doesn't mention keep whatever the widgets say. Your catalogue stays the single source of truth and survives a browser reset.

    The coercion is worth trusting here: an integer field gets range-checked, and the two combo fields only accept their exact legal strings - so a database value of 24-bit is reduced to 24 rather than trusted, and an unrecognised value leaves the widget alone instead of breaking the graph. Somebody thought about the fact that a database is not a form.

    Install

    ComfyUI Manager โ†’ Nova Audio Player โ†’ install โ†’ restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/NovaFemme/ComfyUI-NovaAudioPlayer.git
    

    Under โ–ถ๏ธ Nova Audio โ†’ ๐ŸŽ›๏ธ Mastering Process. Nothing to install, nothing to download - it's all string, hash and dict work over a report you already have.

    Where it fits

    Nova Audio Master ๐Ÿงพ โ”€โ”€ report_json โ”€โ”€โ–ถ Nova Master Identity ๐Ÿชช
                                                  โ”‚ identity_json
    Nova SQLite Reader ๐Ÿ—ƒ๏ธ โ”€โ”€ identity_json โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                  โ”‚ archive_name
                                                  โ–ผ
                                       Nova Final Master Validator
    

    That last wire is the point. The archive folder is full of working names, and filenames lie; the validator matches on identity recorded inside each report instead. Give it the archive name and a selector and it can find the right reference without anyone maintaining a naming convention by hand.

    If you're making one track for yourself, this node is overkill. If you're shipping anything - to a distributor, a client, or just to yourself in six months - it's the difference between an archive and a pile.

    Categoryโ–ถ๏ธ Nova Audio/๐ŸŽ›๏ธ Mastering Process

    Inputs (29)

    NameTypeDefaultDescription
    report_jsonSTRINGNova Audio Master's report_json. The identity and the fingerprints are bound to this report.
    artist_nameSTRINGArtist or band name, as it should appear on the release.
    track_titleSTRINGTitle of this track. Also used in the archive file name.
    artist_initialsoptSTRINGShort form of the artist name for the archive file name, e.g. NA. Empty: derived from artist_name.
    track_numberoptINT11โ€“999Position on the album. Leads the archive file name as two digits, e.g. 02.
    versionoptSTRINGMasterWhich version this is, e.g. Master, Radio Edit, Instrumental. Part of the archive file name.
    album_titleoptSTRINGAlbum or release title.
    catalog_numberoptSTRINGYour label's catalogue number for the release, e.g. NOVA-001.
    isrcoptSTRINGInternational Standard Recording Code: 12 characters, e.g. US-S1Z-26-00001. Hyphens are optional.
    publisheroptSTRINGMusic publisher, if any.
    labeloptSTRINGRecord label, if any.
    mastering_engineeroptSTRINGWho mastered the track.
    mastering_companyoptSTRINGNova Audio MasterStudio or tool credited with the mastering.
    copyright_owneroptSTRINGOwner of the sound recording copyright (the name only, without the year or the symbol).
    release_yearoptINT20261900โ€“2200Year of release, four digits.
    composeroptSTRINGWho wrote the music. Separate several names with commas.
    produceroptSTRINGWho produced the track.
    mix_engineeroptSTRINGWho mixed the track.
    project_nameoptSTRINGYour own name for the project or session this master belongs to.
    territoryoptSTRINGWhere the release is cleared for, e.g. Worldwide, or a list of country codes.
    languageoptSTRINGLanguage of the lyrics, e.g. English, or an ISO code such as en. Empty for an instrumental.
    explicit_flagoptBOOLEANfalseOn when the lyrics are explicit. Recorded in the identity; nothing is changed in the audio.
    upc_eanoptSTRINGBarcode of the release: a 12-digit UPC or a 13-digit EAN, digits only, e.g. 012345678905.
    work_idoptSTRINGIdentifier of the composition, e.g. an ISWC such as T-123.456.789-0.
    client_referenceoptSTRINGThe client's own reference or job number, if you master for someone else.
    notesoptSTRINGFree text kept with the identity record, e.g. a mastering note.
    target_bit_depthoptCOMBO24The bit depth the release is meant to have. Recorded only: this node converts nothing. The save node decides what is written.
    target_sample_rateoptCOMBO48000The sample rate the release is meant to have, in Hz. Recorded only: this node does not resample.
    identity_fields_jsonoptSTRINGField values from a database, as a JSON object. Wire Nova SQLite Single Row Filter's single_row_json (rows from Nova Dynamic SQLite Browser), or the deprecated Nova SQLite Reader's identity_json. Columns are matched by name: Title, Artist, Album, ISRC and so on, or this node's own field names. Every field it carries replaces the widget of the same name, so the catalogue stays the single source of truth and nothing has to be retyped after a browser reset. Blank values are ignored, and fields it does not mention keep whatever the widgets say.

    Outputs (3)

    NameTypeDescription
    identity_jsonSTRINGโ€”
    fingerprint_jsonSTRINGโ€”
    archive_nameSTRINGโ€”