Skip to main content

Platform Presets

Complete reference for industry platform presets in the DDEX Builder.

Overview​

The DDEX Builder now uses a simplified, transparent preset system that focuses on public specifications and extensible frameworks. This approach ensures honesty, maintainability, and legal safety while providing valuable preset functionality.

Available Presets​

YouTube Presets (Public Specification)​

PresetTypeProfileDDEX VersionSpecification
youtube_albumAlbumContent IDERN 4.3YouTube Public DDEX Spec
youtube_singleSingleContent IDERN 4.3YouTube Public DDEX Spec
youtube_videoVideoContent IDERN 4.3YouTube Public DDEX Spec

Generic DDEX-Compliant Presets​

PresetTypeProfileDDEX VersionSpecification
generic_audio_albumAudio AlbumUniversalERN 4.3DDEX Standard
generic_audio_singleAudio SingleUniversalERN 4.3DDEX Standard
generic_video_singleVideo SingleUniversalERN 4.3DDEX Standard
generic_compilationCompilationUniversalERN 4.3DDEX Standard

Spotify Preset​

Configuration​

// TypeScript
builder.applyPreset('spotify');

// Python
builder.apply_preset('spotify')

Requirements​

Required Fields​

FieldLevelNotes
Release IDReleaseMust be unique within message
TitleReleaseMax 100 characters
ArtistReleasePrimary artist only
LabelReleaseRecord label name required
UPCReleaseValid UPC-A format
Release DateReleaseISO 8601 format (YYYY-MM-DD)
GenreReleaseFrom Spotify genre list
ISRCResourceValid ISRC format
DurationResourceISO 8601 duration (PT3M45S)
Track NumberResourceSequential numbering

Validation Rules​

{
"release_title": {
"type": "length",
"max": 100,
"message": "Release title cannot exceed 100 characters"
},
"upc": {
"type": "format",
"pattern": "^\\d{12}$",
"message": "UPC must be 12 digits"
},
"isrc": {
"type": "format",
"pattern": "^[A-Z]{2}[A-Z0-9]{3}\\d{7}$",
"message": "Invalid ISRC format"
},
"genre": {
"type": "enum",
"values": ["Pop", "Rock", "Hip-Hop", "Electronic", "Country", "..."],
"message": "Genre must be from Spotify approved list"
}
}

Commercial Model​

  • Primary Model: Subscription Streaming
  • Secondary Models: Ad-supported streaming
  • Territories: Worldwide (excluding embargoed territories)
  • Distribution Channel: Internet streaming

Example Usage​

import { DdexBuilder } from 'ddex-builder';

const builder = new DdexBuilder();
builder.applyPreset('spotify');

const release = {
releaseId: 'SPT_REL_001',
releaseType: 'Album',
title: 'My Streaming Album',
artist: 'Artist Name',
label: 'Independent Records',
upc: '123456789012',
releaseDate: '2024-03-15',
genre: 'Pop',
trackIds: ['SPT_TRK_001', 'SPT_TRK_002']
};

builder.addRelease(release);
const xml = await builder.build();
from ddex_builder import DdexBuilder

builder = DdexBuilder()
builder.apply_preset('spotify')

release = {
'release_id': 'SPT_REL_001',
'release_type': 'Album',
'title': 'My Streaming Album',
'artist': 'Artist Name',
'label': 'Independent Records',
'upc': '123456789012',
'release_date': '2024-03-15',
'genre': 'Pop',
'track_ids': ['SPT_TRK_001', 'SPT_TRK_002']
}

builder.add_release(release)
xml = await builder.build()

Apple Music Preset​

Configuration​

// TypeScript
builder.applyPreset('apple_music');

// Python
builder.apply_preset('apple_music')

Requirements​

Required Fields​

FieldLevelNotes
Release IDReleaseiTunes-compatible format
TitleReleaseSupport for international characters
ArtistReleaseSupport for featured artists
LabelReleaseRecord label required
UPCReleaseEAN-13 or UPC-A
Release DateReleaseMust not be future date
GenreReleaseiTunes genre taxonomy
CopyrightReleaseCopyright line required
Producer CopyrightReleaseP-line required
ISRCResourceMandatory for all tracks
DurationResourceAccurate to milliseconds

Special Requirements​

  • Artwork: High-resolution artwork specifications
  • Preview: Preview start time and duration
  • Explicit Content: Explicit content flagging required
  • Featured Artists: Proper featured artist handling
  • Multi-language: Support for multiple language metadata

Commercial Models​

  • Primary: Permanent Download
  • Secondary: Subscription Streaming
  • Territories: Worldwide iTunes Store presence
  • Price Tiers: Standard iTunes pricing structure

Example Usage​

const builder = new DdexBuilder();
builder.applyPreset('apple_music');

const release = {
releaseId: 'ITMS_REL_001',
releaseType: 'Album',
title: 'iTunes Album',
artist: 'Artist Name',
label: 'Major Label Records',
upc: '1234567890123',
releaseDate: '2024-03-15',
genre: 'Alternative',
parentalWarning: false,
copyrightLine: '© 2024 Major Label Records',
producerCopyrightLine: '℗ 2024 Major Label Records',
trackIds: ['ITMS_TRK_001', 'ITMS_TRK_002']
};

builder.addRelease(release);

YouTube Music Preset​

Configuration​

// TypeScript
builder.applyPreset('youtube_music');

// Python
builder.apply_preset('youtube_music')

Requirements​

Required Fields​

FieldLevelNotes
Release IDReleaseYouTube Content ID compatible
TitleReleaseMust match video content
ArtistReleaseChannel/artist verification
ISRCResourceRequired for Content ID
DurationResourceMust match audio duration
Territory RightsDealDetailed territory mapping
Content TypeResourceAudio/Video classification

Content ID Requirements​

  • Audio Fingerprinting: Support for Content ID fingerprinting
  • Reference Files: High-quality reference audio required
  • Territory Mapping: Detailed geographic rights specification
  • Ownership Claims: Clear ownership and rights information
  • Monetization: Monetization policy specification

Commercial Models​

  • Primary: Ad-supported streaming
  • Secondary: YouTube Premium subscription
  • Territories: Based on Content ID availability
  • Rights: Performance and synchronization rights

Example Usage​

const builder = new DdexBuilder();
builder.applyPreset('youtube_music');

const release = {
releaseId: 'YTM_REL_001',
releaseType: 'Single',
title: 'YouTube Hit Single',
artist: 'Content Creator',
label: 'Creator Network',
releaseDate: '2024-03-15',
genre: 'Electronic',
contentType: 'Audio',
trackIds: ['YTM_TRK_001']
};

const deal = {
dealId: 'YTM_DEAL_001',
dealType: 'License',
commercialModelType: 'AdSupportedModel',
territory: 'Worldwide',
distributionChannel: 'Internet',
monetizationPolicy: 'Monetize',
releaseReferences: ['YTM_REL_001']
};

builder.addRelease(release);
builder.addDeal(deal);

Amazon Music Preset​

Configuration​

// TypeScript
builder.applyPreset('amazon_music');

// Python
builder.apply_preset('amazon_music')

Requirements​

Required Fields​

FieldLevelNotes
Release IDReleaseAmazon ASIN compatible
TitleReleaseAmazon catalog standards
ArtistReleaseArtist name verification
LabelReleaseLabel registration required
UPCReleaseAmazon barcode standards
Release DateReleaseAmazon release calendar
GenreReleaseAmazon music categories
ISRCResourceGlobal ISRC database
Product TypeReleasePhysical/Digital classification

Amazon-Specific Requirements​

  • Product Classification: Proper Amazon product categorization
  • Search Keywords: SEO-optimized metadata
  • Brand Registry: Trademark and brand compliance
  • Regional Availability: Territory-specific availability
  • Pricing Strategy: Amazon pricing tier compatibility

Commercial Models​

  • Primary: Unlimited Streaming (Amazon Music Unlimited)
  • Secondary: Prime Music inclusion
  • Tertiary: Purchase downloads
  • Territories: Amazon Music service areas

Example Usage​

const builder = new DdexBuilder();
builder.applyPreset('amazon_music');

const release = {
releaseId: 'AMZ_REL_001',
releaseType: 'Album',
title: 'Amazon Music Album',
artist: 'Professional Artist',
label: 'Established Records',
upc: '123456789012',
releaseDate: '2024-03-15',
genre: 'Country',
productType: 'DigitalAlbum',
searchKeywords: ['country', 'acoustic', 'folk'],
trackIds: ['AMZ_TRK_001', 'AMZ_TRK_002']
};

builder.addRelease(release);

Universal Preset​

Configuration​

// TypeScript
builder.applyPreset('universal');

// Python
builder.apply_preset('universal')

Purpose​

The universal preset provides a generic configuration suitable for most streaming platforms and digital distributors. It includes common requirements and best practices without platform-specific restrictions.

Requirements​

Core Fields​

FieldLevelRequiredNotes
Release IDRelease✓Unique identifier
TitleRelease✓No length restrictions
ArtistRelease✓Primary artist
Release DateRelease○Recommended
GenreRelease○Standard genres
ISRCResource○Recommended
DurationResource○For audio content

Flexible Requirements​

  • Minimal Validation: Basic structure validation only
  • Format Flexibility: Accepts various identifier formats
  • Genre Freedom: No restricted genre lists
  • Territory Neutral: No territory restrictions
  • Commercial Agnostic: Works with any commercial model

Example Usage​

const builder = new DdexBuilder();
builder.applyPreset('universal');

const release = {
releaseId: 'UNI_REL_001',
releaseType: 'Album',
title: 'Universal Release',
artist: 'Any Artist',
label: 'Any Label',
releaseDate: '2024-03-15',
genre: 'World Music',
trackIds: ['UNI_TRK_001']
};

builder.addRelease(release);

Preset Comparison​

Field Requirements Matrix​

FieldSpotifyApple MusicYouTube MusicAmazon MusicUniversal
Release ID✓✓✓✓✓
Title✓✓✓✓✓
Artist✓✓✓✓✓
Label✓✓○✓○
UPC✓✓○✓○
Release Date✓✓✓✓○
Genre✓✓✓✓○
ISRC✓✓✓✓○
Duration✓✓✓○○
Copyright○✓○○○
Explicit Flag○✓○○○

Validation Strictness​

PresetStructureFormatBusiness RulesCustom Rules
SpotifyStrictStrictStrictPlatform-specific
Apple MusicStrictStrictStrictiTunes-specific
YouTube MusicMediumMediumMediumContent ID-specific
Amazon MusicStrictStrictMediumAmazon-specific
UniversalBasicFlexibleMinimalNone

Custom Preset Creation​

Defining Custom Rules​

// TypeScript
import { DdexBuilder, ValidationRule } from 'ddex-builder';

const customRules: ValidationRule[] = [
{
fieldName: 'title',
ruleType: 'length',
message: 'Title must be between 1 and 50 characters',
parameters: { min: '1', max: '50' }
},
{
fieldName: 'genre',
ruleType: 'enum',
message: 'Genre must be from approved list',
parameters: { values: 'Pop,Rock,Electronic' }
}
];

const builder = new DdexBuilder();
builder.applyCustomRules(customRules);
# Python
from ddex_builder import DdexBuilder, ValidationRule

custom_rules = [
ValidationRule(
field_name='title',
rule_type='length',
message='Title must be between 1 and 50 characters',
parameters={'min': '1', 'max': '50'}
),
ValidationRule(
field_name='genre',
rule_type='enum',
message='Genre must be from approved list',
parameters={'values': 'Pop,Rock,Electronic'}
)
]

builder = DdexBuilder()
builder.apply_custom_rules(custom_rules)

Preset Inheritance​

// Start with universal preset and add custom rules
const builder = new DdexBuilder();
builder.applyPreset('universal');

// Add platform-specific requirements
builder.addValidationRule({
fieldName: 'label',
ruleType: 'required',
message: 'Label is required for our platform'
});

// Override existing rules
builder.overrideValidationRule('title', {
fieldName: 'title',
ruleType: 'length',
message: 'Title must be under 80 characters',
parameters: { max: '80' }
});

Preset Best Practices​

Choosing the Right Preset​

  1. Single Platform: Use specific preset (spotify, apple_music, etc.)
  2. Multiple Platforms: Start with universal, add platform-specific validation
  3. Development/Testing: Use universal for flexibility
  4. Production: Use specific presets for compliance

Preset Workflow​

// Development phase
builder.applyPreset('universal');
// ... build and test

// Platform-specific validation
const spotifyBuilder = new DdexBuilder();
spotifyBuilder.applyPreset('spotify');
const validation = await spotifyBuilder.validate();

// Production build
if (validation.isValid) {
const xml = await spotifyBuilder.build();
}

Error Handling​

try {
builder.applyPreset('spotify');
const xml = await builder.build();
} catch (error) {
if (error.message.includes('Validation failed')) {
// Check specific preset requirements
const presetInfo = builder.getPresetInfo('spotify');
console.log('Required fields:', presetInfo.requiredFields);

// Get detailed validation results
const validation = await builder.validate();
validation.errors.forEach(err => console.error(err));
}
}

Platform-Specific Notes​

Spotify Considerations​

  • Genre Mapping: Use Spotify's official genre taxonomy
  • Featured Artists: Include featured artists in title
  • Release Types: Distinguish between Album, Single, EP
  • Territory Rights: Specify streaming territories clearly

Apple Music Considerations​

  • Artwork Standards: 3000x3000px minimum resolution
  • Preview Points: Specify preview start times
  • Language Support: Provide localized metadata
  • Price Tiers: Align with iTunes pricing structure

YouTube Music Considerations​

  • Content ID: Ensure Content ID compatibility
  • Rights Management: Detailed ownership information
  • Territory Mapping: Granular geographic rights
  • Reference Quality: High-quality reference files

Amazon Music Considerations​

  • Product Types: Classify as Single, Album, etc.
  • Search Optimization: Include relevant keywords
  • Brand Compliance: Follow Amazon brand guidelines
  • Regional Variations: Account for regional Amazon stores

This preset system ensures platform-specific compliance while maintaining flexibility for custom requirements and multi-platform distribution strategies.