Skip to main content

Overview

The ProductionManagementAgent orchestrates the complete video production pipeline, from script processing to final video assembly. It manages assets, generates AI video content, creates audio narration, generates captions, and assembles the final video.

Constructor

db
Database
required
Database instance for production data
credentials
Credentials
required
Credentials manager with API access
const { ProductionManagementAgent } = require('./agents/production-management-agent');

const agent = new ProductionManagementAgent(db, credentials);

Properties

pipeline
Array
Production pipeline with all content in various stages
assets
Map
Asset management map for tracking production files
aiVideoGenerator
AIVideoGenerator
AI video generation service
logger
Logger
Logger instance for tracking production

Methods

initialize()

Initializes the agent, creates directories, and loads pipeline.
return
Promise<boolean>
Returns true when initialization is complete
await agent.initialize();
// Creates: data/production, data/assets, data/videos, 
//          data/audio, data/scripts, temp/processing

processContent(contentData)

Processes complete content through production pipeline.
contentData
Object
required
Content package with strategy, script, thumbnail, and SEO data
contentData.strategy
Object
required
Content strategy from ContentStrategyAgent
contentData.script
Object
required
Video script from ScriptWriterAgent
contentData.thumbnail
Object
required
Thumbnail from ThumbnailDesignerAgent
contentData.seo
Object
required
SEO data from SEOOptimizerAgent
return
Promise<Object>
Production data with all generated assets
production.id
string
Unique production ID
production.status
string
Production status: processing or ready
production.assets
Object
All generated assets (script, thumbnail, audio, video, captions, finalVideo)
production.timeline
Object
Timestamps for each production milestone
production.scheduledPublishTime
string
Calculated publish time
production.priority
number
Production priority (0-100)
const contentData = {
  strategy: { /* from ContentStrategyAgent */ },
  script: { /* from ScriptWriterAgent */ },
  thumbnail: { /* from ThumbnailDesignerAgent */ },
  seo: { /* from SEOOptimizerAgent */ }
};

const production = await agent.processContent(contentData);

console.log(production);
// {
//   id: 'prod_1234567890_abc123_xyz789',
//   status: 'ready',
//   assets: {
//     script: { originalPath: '...', ttsPath: '...', duration: '8:30', sections: 5 },
//     thumbnail: { path: '...', dimensions: { width: 1280, height: 720 }, fileSize: 156789 },
//     audio: { path: '...', duration: '8:30', format: 'mp3', generatedWith: 'AI' },
//     video: { visualAssets: [...], duration: '8:30', format: 'mp4', generatedWith: 'AI' },
//     captions: { path: '...', format: 'srt', language: 'en' },
//     finalVideo: { path: '...', fileSize: 45678901, duration: '8:30', resolution: '1920x1080' }
//   },
//   timeline: {
//     created: '2026-03-05T10:00:00.000Z',
//     scriptReady: '2026-03-05T10:00:01.000Z',
//     thumbnailReady: '2026-03-05T10:00:02.000Z',
//     audioGenerated: '2026-03-05T10:01:30.000Z',
//     videoGenerated: '2026-03-05T10:03:00.000Z',
//     captionsGenerated: '2026-03-05T10:03:15.000Z',
//     readyForUpload: '2026-03-05T10:05:00.000Z'
//   },
//   scheduledPublishTime: '2026-03-10T14:00:00.000Z',
//   priority: 75,
//   estimatedDuration: '8:30'
// }

generateVideoContent(productionData)

Generates AI video content using visual prompts from script.
productionData
Object
required
Production data object
return
Promise<Array>
Array of generated visual assets
const visualAssets = await agent.generateVideoContent(productionData);
// Generates 3-5 AI images based on script content
// Uses DALL-E or similar service via AIVideoGenerator

generateAudioNarration(productionData)

Generates AI audio narration from script.
productionData
Object
required
Production data with script assets
return
Promise<string>
Path to generated audio file
const audioPath = await agent.generateAudioNarration(productionData);
// Generates MP3 audio using AI TTS service
// Reads from productionData.assets.script.ttsPath

generateCaptions(productionData)

Generates SRT captions with timestamps.
productionData
Object
required
Production data with script
return
Promise<string>
Path to SRT caption file
const captionsPath = await agent.generateCaptions(productionData);
// Creates properly formatted SRT file with:
// - 8 words per caption for readability
// - Timestamps synced to script sections
// - Formatted for YouTube upload

assembleVideo(productionData)

Assembles final video from all assets.
productionData
Object
required
Production data with all assets
return
Promise<string>
Path to final video file
const finalVideo = await agent.assembleVideo(productionData);
// Combines:
// - AI-generated visual assets
// - Audio narration
// - Text overlays and transitions
// Outputs: 1920x1080 MP4 at 30fps

processScript(script)

Processes and formats script for production.
script
Object
required
Script from ScriptWriterAgent
return
Promise<Object>
Processed script assets with paths
const scriptAsset = await agent.processScript(script);
// {
//   originalPath: 'data/scripts/1234567890_script.json',
//   ttsPath: 'data/scripts/1234567890_script_tts.txt',
//   duration: '8:30',
//   sections: 5
// }

formatScriptForTTS(script)

Formats script into TTS-friendly text.
script
Object
required
Complete script object
return
string
Plain text formatted for text-to-speech
const ttsText = agent.formatScriptForTTS(script);
// Extracts spoken content:
// - Hook text
// - Introduction narration
// - Main content (filtering visual cues)
// - Conclusion
// - Call to action
// Removes: section markers, timestamps, visual notes

processThumbnail(thumbnail)

Processes thumbnail for production and generates AI variant.
thumbnail
Object
required
Thumbnail from ThumbnailDesignerAgent
return
Promise<Object>
Processed thumbnail asset
const thumbAsset = await agent.processThumbnail(thumbnail);
// Attempts AI thumbnail generation first, falls back to original

createSRTCaptions(productionData)

Creates properly formatted SRT caption file.
productionData
Object
required
Production data with script
return
Promise<string>
SRT formatted caption string
const srt = await agent.createSRTCaptions(productionData);
// 1
// 00:00:00,000 --> 00:00:03,500
// Have you ever wondered how JavaScript Promises
//
// 2
// 00:00:03,500 --> 00:00:07,000
// actually works? Let me show you exactly

calculatePublishTime(strategy)

Calculates optimal publish time from strategy.
strategy
Object
required
Content strategy
return
string
ISO timestamp for publishing
const publishTime = agent.calculatePublishTime(strategy);
// Uses strategy.bestPublishTime or defaults to tomorrow 2 PM

calculatePriority(strategy)

Calculates production priority.
strategy
Object
required
Content strategy
return
number
Priority score (0-100)
const priority = agent.calculatePriority(strategy);
// Factors:
// - Estimated views (up to +30)
// - Competitor analysis (+10 if available)
// - Time until publish (+20 if <24h, +10 if <48h)
// - Base priority: 50

getPipelineStatus()

Gets status of all items in production pipeline.
return
Promise<Array<Object>>
Array of pipeline item summaries
const status = await agent.getPipelineStatus();
// [
//   {
//     id: 'prod_123...',
//     title: 'JavaScript Tutorial',
//     status: 'ready',
//     priority: 75,
//     scheduledPublishTime: '2026-03-10T14:00:00.000Z',
//     progress: 100
//   },
//   {
//     id: 'prod_456...',
//     title: 'Python Guide',
//     status: 'processing',
//     priority: 60,
//     scheduledPublishTime: '2026-03-12T14:00:00.000Z',
//     progress: 60
//   }
// ]

calculateProgress(productionData)

Calculates production completion percentage.
productionData
Object
required
Production data with timeline
return
number
Progress percentage (0-100)
const progress = agent.calculateProgress(productionData);
// Based on milestones:
// - scriptReady
// - thumbnailReady
// - audioGenerated
// - videoGenerated
// - captionsGenerated
// - readyForUpload

getNextReadyContent()

Gets highest priority content ready for publishing.
return
Promise<Object|null>
Next production item or null
const next = await agent.getNextReadyContent();
if (next) {
  console.log('Ready to publish:', next.script.title);
  console.log('Priority:', next.priority);
}

Production Pipeline Stages

{
  milestone: 'scriptReady',
  tasks: [
    'Save original script JSON',
    'Format script for TTS',
    'Save TTS-formatted text'
  ]
}

Usage Example

const { ProductionManagementAgent } = require('./agents/production-management-agent');

const agent = new ProductionManagementAgent(db, credentials);
await agent.initialize();

// Process complete content package
const contentData = {
  strategy: await strategyAgent.generateContentStrategy(),
  script: await scriptAgent.generateScript(strategy),
  thumbnail: await thumbnailAgent.generateThumbnail(script),
  seo: await seoAgent.optimize(script, strategy)
};

const production = await agent.processContent(contentData);

console.log('Production ID:', production.id);
console.log('Status:', production.status);
console.log('Priority:', production.priority);
console.log('Scheduled:', production.scheduledPublishTime);

// Check pipeline status
const pipeline = await agent.getPipelineStatus();
console.log('Items in pipeline:', pipeline.length);

// Get next content ready for publishing
const next = await agent.getNextReadyContent();
if (next) {
  console.log('Ready to publish:', next.script.title);
}

Asset Management

The agent manages assets in organized directories:
Production metadata and state files
Processed thumbnails and visual assets
Final rendered video files
Generated audio narration files
Original scripts and TTS-formatted versions
Temporary files during processing

Best Practices

Check pipeline status to identify bottlenecks and ensure smooth production flow.
Content with higher estimated views and closer publish times gets higher priority automatically.
While AI generation is automatic, review visual assets and audio narration for quality.
Archive or clean up old production files periodically to manage disk space.
The agent includes fallback methods for AI service failures. Monitor logs for simulation vs. actual generation.