Avatar Pipeline

High-Level System Overview

Shows the main components: Client onboarding inputs flow through the N8N/Cloud Functions processing layer, interact with AI services, and output weekly video deliveries.
flowchart LR
    subgraph Input["Client Onboarding"]
        CRM["CRM
(GoHighLevel)"] Videos["Training
Videos"] Form["Intake
Form"] end subgraph Processing["AI Processing Pipeline"] N8N["N8N
Workflows"] GCF["Google Cloud
Functions"] end subgraph AI["AI Services"] EL["ElevenLabs
Voice Clone"] HG["HeyGen
Avatar Video"] OAI["OpenAI
Script Writing"] end subgraph Output["Weekly Delivery"] Drive["Google
Drive"] Slack["Slack
QC & Delivery"] end Input --> Processing Processing <--> AI Processing --> Output

Client Journey: Onboarding to First Videos

Timeline showing how a new client moves from intake form submission through AI training to weekly video production.
flowchart TB
    subgraph Week1["Week 1: Onboarding"]
        A1["Client submits
intake form"] --> A2["Client uploads
5+ training videos"] A2 --> A3["Videos processed
& stored"] end subgraph Week1b["Week 1: AI Training"] B1["ElevenLabs creates
voice clone"] --> B3["Voice training
completes"] B4["HeyGen creates
avatar(s)"] --> B5["Multiple 'looks'
available"] end subgraph Week1c["Week 1: Content"] C1["AI generates
60 scripts"] --> C2["Scripts reviewed
& queued"] end subgraph Week2["Week 2+: Production"] D1["5 scripts selected
for the week"] --> D2["Audio generated
from scripts"] D2 --> D3["Videos created
with avatar"] D3 --> D4["QC review
in Slack"] D4 --> D5["Delivered to
client Friday"] end A3 --> B1 A3 --> B4 A1 --> C1 B3 --> D1 B5 --> D3 style Week1 fill:#e1f5fe style Week1b fill:#fff3e0 style Week1c fill:#f3e5f5 style Week2 fill:#e8f5e9

The Job Queue System

How the Google Sheets-based job queue works: triggers add jobs, the Runner Poller picks them up, executes workflows, and moves jobs through pending → in_progress → completed states.
flowchart LR
    subgraph Trigger["Triggers"]
        Cron["Cloud Scheduler
(every 1-20 min)"] Webhook["Webhooks
(CRM, Slack)"] end subgraph Queue["Google Sheets Job Queue"] Pending["Pending
Jobs"] InProgress["In Progress
(max 15)"] Completed["Completed"] end subgraph Workers["N8N Workers"] Runner["Runner Poller
(1-min)"] Workflows["Sub-Workflows"] end Cron --> |"Check for work"| Pending Webhook --> |"Add new job"| Pending Pending --> |"Pick up job"| Runner Runner --> |"Execute"| Workflows Runner --> |"Update status"| InProgress Workflows --> |"On complete"| Completed Workflows --> |"Enqueue next"| Pending style Pending fill:#fff9c4 style InProgress fill:#bbdefb style Completed fill:#c8e6c9

API Integration Map

How the N8N orchestration layer connects to external APIs: ElevenLabs for voice, HeyGen for avatars, OpenAI for scripts, CloudConvert for media processing.
flowchart TB
    subgraph N8N["N8N Orchestration"]
        Orch["Workflow
Engine"] end subgraph Voice["Voice Pipeline"] V1["Upload Audio
Samples"] V2["Train Voice
Clone"] V3["Generate
Speech"] end subgraph Avatar["Avatar Pipeline"] A1["Upload Training
Videos"] A2["Create Avatar
Looks"] A3["Generate
Videos"] end subgraph Content["Content Pipeline"] C1["Extract Form
Data"] C2["Generate
Scripts"] end EL["ElevenLabs API"] HG["HeyGen API"] OAI["OpenAI API"] CC["CloudConvert API"] Orch --> Voice Orch --> Avatar Orch --> Content V1 --> EL V2 --> EL V3 --> EL A1 --> CC A2 --> HG A3 --> HG C1 --> OAI C2 --> OAI style EL fill:#ff7043,color:#fff style HG fill:#7e57c2,color:#fff style OAI fill:#26a69a,color:#fff style CC fill:#5c6bc0,color:#fff

Weekly Production Cycle

Timeline showing the typical weekly production flow from Monday queuing through Friday delivery.
flowchart LR
    subgraph Monday["Mon"]
        M1["Queue 5 scripts
per client"] M2["Start audio
generation"] end subgraph TueWed["Tue-Wed"] T1["Generate avatar
videos"] end subgraph Thursday["Thu"] TH1["QC review
in Slack"] TH2["Prepare delivery
folders"] end subgraph Friday["Fri"] F1["Deliver videos
to clients"] end M1 --> M2 --> T1 --> TH1 --> TH2 --> F1 style Monday fill:#e3f2fd style TueWed fill:#fff3e0 style Thursday fill:#f3e5f5 style Friday fill:#e8f5e9

Component Architecture

System context showing users (Client, Internal Team), the central Avatar Pipeline platform, and external service integrations.
flowchart TB
    subgraph People["Users"]
        client["Client
Business owner receiving
weekly avatar videos
"] team["Internal Team
QC and operations"] end subgraph Core["Avatar Platform"] pipeline["Avatar Pipeline
Automated video
production system
"] end subgraph External["External Services"] crm["GoHighLevel
CRM & onboarding"] elevenlabs["ElevenLabs
Voice cloning"] heygen["HeyGen
Avatar videos"] openai["OpenAI
Script generation"] end client -->|"Submits intake form"| crm crm -->|"Triggers onboarding"| pipeline pipeline -->|"Clones voice"| elevenlabs pipeline -->|"Creates avatars & videos"| heygen pipeline -->|"Generates scripts"| openai team -->|"Reviews & approves"| pipeline pipeline -->|"Delivers videos weekly"| client style client fill:#4CAF50,color:#fff style team fill:#2196F3,color:#fff style pipeline fill:#9C27B0,color:#fff style crm fill:#FF9800,color:#fff style elevenlabs fill:#ff7043,color:#fff style heygen fill:#7e57c2,color:#fff style openai fill:#26a69a,color:#fff

Workflow Dependency Graph

Shows how N8N workflows connect: Phase 1 (Onboarding) feeds into Phase 2 (Weekly Production), which outputs to Phase 3 (Delivery & QC).
flowchart LR
    subgraph Onboarding["Phase 1: Onboarding"]
        direction TB
        Init["InitializeClient"] --> Scripts["GenerateScripts"]
        Init --> Upload["UploadMedia"]
        Upload --> Convert["ConvertToAudio"]
        Upload --> Avatar["CreateAvatar"]
        Convert --> AddVoice["AddVoiceSample"]
        AddVoice --> Train["TrainVoice"]
    end

    subgraph Production["Phase 2: Weekly Production"]
        direction TB
        Weekly["Weekly Schedule"] -.-> Queue["QueueWeeklyVideos"]
        Queue --> S2A["ScriptsToAudio"]
        S2A --> GenVid["GenerateSingleVideo"]
    end

    subgraph Delivery["Phase 3: Delivery & QC"]
        direction TB
        GenVid2["Videos Complete"] --> QC["HandleSlackQC"]
        Prepare["PrepareDelivery
(Thu)"] --> Deliver["DeliveryBySlack
(Fri)"] end Train --> Queue GenVid --> GenVid2 style Init fill:#e3f2fd style Train fill:#fff3e0 style Queue fill:#e8f5e9 style Deliver fill:#fce4ec style Weekly fill:#fff9c4