Tutorials
This section offers detailed, step-by-step tutorials that guide you through using TransparentMeta to embed cryptographically signed metadata into audio files, verify their authenticity, and ensure compliance with AI transparency regulations.
Each tutorial includes in-depth explanations of what happens under the hood, with frequent Python code snippets and commentary to help you fully understand and master the process.
Video tutorials
If you prefer learning by watching, our video tutorials on YouTube provide a comprehensive walkthrough of key TransparentMeta features. These videos cover most of the topics presented in this section and offer practical, hands-on demonstrations of how to integrate and use TransparentMeta effectively.
Watch the full video series here: TransparentMeta YouTube Playlist
Generating a cryptographic key pair
To securely embed transparency metadata into audio files, TransparentMeta relies on cryptographic signing. This requires generating a pair of cryptographic keys:
A private key used to sign metadata before embedding it into audio files.
A corresponding public key used to verify the authenticity of the signed metadata.
Why is this necessary?
The cryptographic signature guarantees that the metadata has not been tampered with and confirms it was generated by a trusted party holding the private key. Without this, anyone could alter or fake transparency metadata, defeating the purpose of transparency and compliance.
Key management best practices
The private key must be kept secret and stored securely, as it is used to sign all metadata. Loss or compromise of the private key could allow malicious actors
to generate forged metadata.The public key is meant to be shared with anyone who needs to verify metadata authenticity, such as platforms, regulators, or consumers.
Centralized verification service
For most users of TransparentMeta, the primary task is writing metadata (i.e., signing with the private key).
Verification of metadata is often done downstream by platforms or services. To simplify
this process, Transparent Audio plans to provide a centralized verification service.
In this future model:
Transparent Audio securely manages private keys for clients.
Platforms query this central service to verify metadata authenticity rather than
contacting each metadata generator individually.This approach ensures higher security and operational efficiency, with a centralized source of truth for metadata verification.
That said, users retain the freedom to generate and manage their own private/public key pairs
if preferred.
Let’s generate a key pair
First, import the necessary functions from TransparentMeta:
import logging
from examples.config import private_key_path, public_key_path
from transparentmeta.crypto.key_management import (
generate_key_pair,
save_private_key_to_pem_file,
save_public_key_to_pem_file,
)
from transparentmeta.logger_config import configure_logging
Next, generate a new Ed25519 private/public key pair. This key pair will be used to sign and verify metadata.
private_key, public_key = generate_key_pair()
generate_key_pair() under the hood uses the cryptography library.
Save the private key to a PEM file. This key must be stored securely, as it is used to cryptographically sign your metadata.
save_private_key_to_pem_file(private_key, private_key_path)
Save the public key to a PEM file. You can distribute this key to platforms or services that will verify your metadata signatures.
save_public_key_to_pem_file(public_key, public_key_path)
After running the above code, your key files will be saved at the configured paths.
Writing metadata to an audio file
This tutorial demonstrates how to embed structured, cryptographically signed metadata into an audio file using TransparentMeta.
Step 1: Prepare the environment and load the private key
First, import necessary modules and configure logging to ensure detailed traceability during the metadata embedding process.
Then, load your Ed25519 private key from a PEM file. This private key will be used to cryptographically sign the metadata.
from datetime import datetime, timezone
from pathlib import Path
from transparentmeta.crypto.key_management import load_private_key_from_pem_file
from transparentmeta.entity.metadata import AIUsageLevel
from transparentmeta.sdk import build_transparent_metadata_writer
private_key = load_private_key_from_pem_file(Path("path/to/your/private_key.pem"))
Step 2: Build the TransparentMetadataWriter instance
Use the loaded private key to instantiate a TransparentMetadataWriter.
This provides the high-level interface for signing and embedding metadata into audio files.
transparent_metadata_writer = build_transparent_metadata_writer(private_key)
Step 3: Define your metadata dictionary
Create a dictionary with all relevant metadata fields you want to embed. Fields include:
Company or entity generating the metadata
Model version or AI system version
Timestamp of metadata creation (use UTC time)
AI usage level from
AIUsageLevelenum (e.g., AI-assisted)Content and user identifiers
Private key ID (for key management)
Optional additional info, such as attribution
metadata = {
"company": "Transparent Audio",
"model": "v2.1",
"created_at": datetime.now(timezone.utc),
"ai_usage_level": AIUsageLevel.AI_ASSISTED,
"content_id": "12345",
"user_id": "user_67890",
"private_key_id": "dummy_private_key_id",
"additional_info": {
"attribution": {
"lyrics": "John Doe",
"composer": "Jane Smith",
"singer": "HAL 9000",
}
},
}
Step 4: Write the signed metadata to the audio file
Use the write method of the metadata writer to embed the signed metadata
into the audio file at the path test_audio_path.
transparent_metadata_writer.write(Path("path/to/my/audio/file"), metadata)
This operation modifies the audio file by embedding your metadata and its
cryptographic signature in two ID3v2 custom tags called transparency and
signature.
The method validates the metadata, creates the signature, and writes both securely into the audio file. It’s very high-level, so you don’t need to care about the underlying details of how the metadata is signed or stored.
When writing fails
The writing process can fail for several reasons, such as:
The audio file does not exist or is not accessible.
The metadata dictionary is invalid or incomplete.
The audio file is not in a supported format.
The audio file is read-only or corrupted.
In these cases, TransparentMeta raises custom exceptions with detailed error messages, and stops execution. You can catch and handle these exceptions as needed to ensure robust error management.
Reading metadata from an audio file
This tutorial explains how to extract and verify transparency metadata embedded in an audio file using TransparentMeta. Verification uses a public Ed25519 key corresponding to the private key that signed the metadata.
Step 1: Prepare the environment and load the public key
Import the necessary modules. Then load your Ed25519 public key from a PEM file. This key will be used to verify the metadata signature. Remember this key must match the private key used to sign the metadata, otherwise verification will fail.
from pathlib import Path
from transparentmeta.crypto.key_management import load_public_key_from_pem_file
from transparentmeta.sdk import build_transparent_metadata_reader
public_key = load_public_key_from_pem_file(Path("path/to/your/public_key.pem"))
Step 2: Build the TransparentMetadataReader instance
Create a TransparentMetadataReader using the loaded public key. This
instance handles reading and verifying metadata from audio files.
TransparentMetadataReader provides a high-level interface for reading and verifying metadata.
transparent_metadata_reader = build_transparent_metadata_reader(public_key)
Step 3: Read and verify metadata from the audio file
Call the read method on your TransparentMetadataReader, passing the path
of the audio file. This returns a ReadResult object that contains:
The extracted metadata (if present and readable)
Verification status of the signature (
Trueif success,Falseif not)Any errors encountered during reading or verification
read_result = transparent_metadata_reader.read(Path("path/to/my/audio/file"))
print(read_result)
The read method performs the following steps under the hood:
Reads the custom ID3v2 tags
transparencyandsignaturefrom the audio file.Verifies the signature against the metadata using the public key.
Returns a
ReadResultobject containing the metadata and verification status.
Again, you don’t need to worry about the low-level details of how the metadata is
signed or verified. The TransparentMetadataReader handles all the complexity for you.
Understanding the ReadResult object
ReadResult encapsulates all relevant information about the reading and
verification operation without raising exceptions on verification failure.
It has the following attributes:
metadata: The extractedMetadataobject orNoneif missing or unreadable.is_success: Boolean flag indicating if the metadata reading and verification process completed successfully (note: a completed process may still have a verification failure).error: Optional error message if reading failed (e.g., file not found).
Signature verification result is reflected within the metadata validity, but verification failure does not raise an exception. This design allows downstream consumers to inspect and handle verification failures gracefully.
When verification fails
Verification can fail due to several reasons:
Metadata doesn’t exist: No metadata embedded in the audio file.
Metadata or signature tampered: The cryptographic signature does not match the metadata, indicating potential corruption or manipulation of the metadata or signature in the audio file.
Unsupported or corrupted file: Audio file cannot be parsed properly.
In all these cases, the ReadResult provides detailed error information to guide handling.
Using the custom TransparentMeta logger
TransparentMeta includes a built-in logger to help you monitor internal SDK operations. Activating this logger provides insight into what the library is doing under the hood, which is invaluable for debugging and auditing your metadata processing.
Why use the TransparentMeta logger?
It reports key events like component initialization, metadata read/write success, and verification results.
It can help diagnose problems by showing detailed traces of internal decisions, serialized data formats, and signature verification steps.
Enables you to track the SDK’s behavior in production or during development without modifying library code.
Logging levels
INFO (default): Shows high-level messages useful for general monitoring — e.g., confirming operations succeeded, components started correctly.
DEBUG: Shows detailed trace information — perfect for debugging or gaining deep insight into the signing, writing, and verification process.
How to enable TransparentMeta logging
If you don’t already have your own logging setup, simply call
configure_logging() at the start of your application to enable
TransparentMeta’s default logger at the INFO level:
from transparentmeta.logger_config import configure_logging
configure_logging()
To enable full debug-level tracing, pass the level argument:
import logging
from transparentmeta.logger_config import configure_logging
configure_logging(level=logging.DEBUG)
Important notes about the logger
If your application already configures logging, you do not need to call
configure_logging(). TransparentMeta logs will propagate through the root logger and be handled by your existing setup.Use the logger to quickly verify your integration is working. For example, loggers in the
transparentmeta.sdk.factorynamespace will output relevant messages when the SDK initializes or performs key operations.