How do I watermark a batch of promo copies?
Use the batch script with a recipient list: it embeds a distinct ID in each copy, names the files after the master and recipient, and writes a private recipients.json mapping IDs, names, filenames and SHA-256 hashes. The manifest also records the watermark key, so treat it like the promos; averaging copies from several recipients still defeats recovery.
How Aureal handles it
The script reads a WAV master, embeds one payload per recipient and writes a WAV copy for each. By default it picks random IDs; --start-id pins a sequential range, which is easier to guess and ties the numbers to the order of the list. The manifest records the master metadata, band, strength, key (or null when the default was used), keyDefault, startId and a recipients array with id, name, filename and sha256. The key is in the manifest because an audit needs it to re-derive the spreading sequence. Keep the manifest offline and out of the distribution folder that recipients can browse.
Common failure mode
“Publish recipients.json so every recipient can check their own ID.”
Why it fails: The manifest contains the key and the full ID-to-recipient mapping. Anyone who has it can embed a matching ID in another file, and the whole distribution is exposed. Recipients do not need the manifest; they need their copy and, at most, their own ID.
Verified example
Tag the batch with a private key and keep the manifest offline:
node scripts/batch_distribute.js master.wav --recipients "A, B" --out-dir ./promos --key "$AUREAL_KEY"
sha256sum ./promos/*.wav > promos.sha256
# Store recipients.json and the key separately from the promos.
# Encode delivery formats afterwards, then re-test detection.
Example only. Validate against your own audio, codec and processing chain.
Scope and limits
- The manifest is private: it contains the key and the mapping.
- Averaging copies from several recipients defeats recovery.
- The batch script reads and writes WAV; re-test after encoding.
- An ID maps to a recipient record, not to a person or a proven leak.
Frequently asked questions
Random or sequential IDs?
Random is the default because sequential IDs are guessable and follow the order of the recipient list. Use --start-id only when you need a pinned range, and still keep the manifest private.
Can every recipient get the same ID?
You can, but then a match cannot distinguish recipients. The point of per-recipient IDs is to narrow a leaked copy to one distribution record.
Related topics
Test the actual delivery chain. A fixture result is a starting point, not a guarantee for your material.
Open the Studio →