From ae40153252fc6661253eaf6bb9fd9b5e0b994c46 Mon Sep 17 00:00:00 2001 From: "j.foucher" Date: Tue, 3 Mar 2026 14:01:26 +0100 Subject: [PATCH] V1 --- PS_AI_Agent_ElevenLabs_Documentation.pptx | Bin 68294 -> 0 bytes PS_AI_ConvAgent_Documentation.pptx | Bin 0 -> 82309 bytes .../Content/Animations/BodyBP.uasset | Bin 67198 -> 67172 bytes .../Content/Demo_Metahuman.umap | Bin 86845 -> 88189 bytes generate_doc_pptx.py | 1138 +++++++++++++++++ 5 files changed, 1138 insertions(+) delete mode 100644 PS_AI_Agent_ElevenLabs_Documentation.pptx create mode 100644 PS_AI_ConvAgent_Documentation.pptx create mode 100644 generate_doc_pptx.py diff --git a/PS_AI_Agent_ElevenLabs_Documentation.pptx b/PS_AI_Agent_ElevenLabs_Documentation.pptx deleted file mode 100644 index 6dc72d502c50ad8bc3b61b2a588cb8cc48041fe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68294 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�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
&cr!(XoGy2 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 ZnB5XzBP1OkCkSVNA0a^1r6-^({tx%AStkGh diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_ConvAgent/Content/Demo_Metahuman.umap b/Unreal/PS_AI_Agent/Plugins/PS_AI_ConvAgent/Content/Demo_Metahuman.umap index 9832746c85038231301176408bc644d8f1c2715b..2b3ca7b3a57e5ac347aaba2901c4fdb19d435f72 100644 GIT binary patch delta 2024 zcmai#YfKzf6vyYD8CbC0UAkF@~5>G-66wQzH$vtoJdqEJ*52X6JX# z`JczVGrK!-F6Q1)%+MrBtbbZM|NFJfvfk{|yDQGtEa0!CCF`jwB1Nw-UFee}r0%^{ z{#Gb^85Y*z$iWV1yMD{zA1yZ>zpg zkx;%7Yuh);x3WZNu$?}gY!T|v;h>Y_$qrq9{UMO=%l+4`7UW`2~*D^b?Jaew7JldZvbMI^B1#=?0(-w z7mWsaL#j3!vOI3xry)DV#OHZG*$~; zRK$gHvIJ4Wv9*K}QLGS~3NeO|4}!k=biDAVRh2C%iX}~1*-ix4rv_szHueN%F}pF0 zh{oCZ6jobuikh1CoS}#=E)+D~T;@rSkJ0uThNdlc5egY!r^v%!Rs{jKUD%wRQEO;gc%+w9$R8l_a`jnX7qUPhVF!VkW^fh0xFX*%7!%^Pc=6p@+Y z$tKa1gh~QaSg_L6MG}aKMTj3_RLi8BN`aQ9uGjZ$7SZAG@caM&&+~jaXRY63=#EGK z6beY~2rbKdbmM4e&vfH6L%tq=K)P`6Y{dKfIN5{EJRW9kzidkdWS#-5CmuShhs00# zR-F`Q<#|gYZj-)S`1}5aMC``&72d zW;SXrSIryMVxI{Wh&TTK#8~%o)1~P2+vz<`UCFVd+%(oXgqEs#)i#sO2gz{jJ%M#a zi1r~)TK$7j@*fOGCW8b?OjAKf_P^ZKifz3D>!5gZ$qUKm5*Epl{bc^%$f^iKGl9~S z2QA{qqjk2y4)wrvn?5c3)QKg7_k}bg52rtk_cv!IOg&d-*peM%rRv#Z*7I@5x%)R^ CBZ3(K diff --git a/generate_doc_pptx.py b/generate_doc_pptx.py new file mode 100644 index 0000000..60ba5d6 --- /dev/null +++ b/generate_doc_pptx.py @@ -0,0 +1,1138 @@ +#!/usr/bin/env python3 +"""Generate PS_AI_ConvAgent Plugin Documentation PowerPoint. +Style inspired by Asterion VR PPT Model (dark theme, orange accents). +""" +from pptx import Presentation +from pptx.util import Inches, Pt, Emu +from pptx.dml.color import RGBColor +from pptx.enum.text import PP_ALIGN, MSO_ANCHOR +from pptx.enum.shapes import MSO_SHAPE + +# ── Colors (from Asterion VR template) ────────────────────────────────────── +BG_DARK = RGBColor(0x16, 0x1C, 0x26) +BG_LIGHTER = RGBColor(0x1E, 0x25, 0x33) +WHITE = RGBColor(0xFF, 0xFF, 0xFF) +GRAY_LIGHT = RGBColor(0xAD, 0xAD, 0xAD) +GRAY_MED = RGBColor(0x78, 0x78, 0x78) +ORANGE = RGBColor(0xF2, 0x63, 0x00) +TEAL = RGBColor(0x00, 0x96, 0x88) +CYAN = RGBColor(0x4D, 0xD0, 0xE1) +YELLOW_GRN = RGBColor(0xEE, 0xFF, 0x41) +DARK_TEXT = RGBColor(0x16, 0x1C, 0x26) + +# Slide dimensions (16:9) +SLIDE_W = Inches(13.333) +SLIDE_H = Inches(7.5) + +prs = Presentation() +prs.slide_width = SLIDE_W +prs.slide_height = SLIDE_H + +# ── Helpers ───────────────────────────────────────────────────────────────── + +def set_slide_bg(slide, color): + bg = slide.background + fill = bg.fill + fill.solid() + fill.fore_color.rgb = color + +def add_rect(slide, left, top, width, height, fill_color=None, line_color=None): + shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height) + shape.line.fill.background() + if fill_color: + shape.fill.solid() + shape.fill.fore_color.rgb = fill_color + if line_color: + shape.line.color.rgb = line_color + shape.line.width = Pt(1) + return shape + +def add_text_box(slide, left, top, width, height): + return slide.shapes.add_textbox(left, top, width, height) + +def set_text(tf, text, size=14, color=WHITE, bold=False, alignment=PP_ALIGN.LEFT, font_name="Arial"): + tf.clear() + tf.word_wrap = True + p = tf.paragraphs[0] + p.text = text + p.font.size = Pt(size) + p.font.color.rgb = color + p.font.bold = bold + p.font.name = font_name + p.alignment = alignment + return p + +def add_para(tf, text, size=14, color=WHITE, bold=False, alignment=PP_ALIGN.LEFT, + space_before=Pt(4), space_after=Pt(2), font_name="Arial", level=0): + p = tf.add_paragraph() + p.text = text + p.font.size = Pt(size) + p.font.color.rgb = color + p.font.bold = bold + p.font.name = font_name + p.alignment = alignment + p.level = level + if space_before: + p.space_before = space_before + if space_after: + p.space_after = space_after + return p + +def add_bullet(tf, text, size=12, color=WHITE, bold=False, level=0, space_before=Pt(2)): + p = tf.add_paragraph() + p.text = text + p.font.size = Pt(size) + p.font.color.rgb = color + p.font.bold = bold + p.font.name = "Arial" + p.level = level + p.space_before = space_before + p.space_after = Pt(1) + return p + +def add_section_header(slide, title, subtitle=""): + """Add a section divider slide.""" + set_slide_bg(slide, BG_DARK) + # Accent bar + add_rect(slide, Inches(0), Inches(3.2), Inches(13.333), Pt(4), fill_color=ORANGE) + # Title + tb = add_text_box(slide, Inches(0.8), Inches(2.0), Inches(11.7), Inches(1.2)) + set_text(tb.text_frame, title, size=40, color=WHITE, bold=True, alignment=PP_ALIGN.LEFT) + if subtitle: + add_para(tb.text_frame, subtitle, size=18, color=GRAY_LIGHT, alignment=PP_ALIGN.LEFT, + space_before=Pt(12)) + +def add_page_number(slide, num, total): + tb = add_text_box(slide, Inches(12.3), Inches(7.0), Inches(0.8), Inches(0.4)) + set_text(tb.text_frame, f"{num}/{total}", size=9, color=GRAY_MED, alignment=PP_ALIGN.RIGHT) + +def add_footer_bar(slide): + add_rect(slide, Inches(0), Inches(7.15), SLIDE_W, Pt(2), fill_color=ORANGE) + +def add_top_bar(slide, title): + add_rect(slide, Inches(0), Inches(0), SLIDE_W, Inches(0.7), fill_color=BG_LIGHTER) + tb = add_text_box(slide, Inches(0.5), Inches(0.1), Inches(10), Inches(0.5)) + set_text(tb.text_frame, title, size=14, color=ORANGE, bold=True) + add_rect(slide, Inches(0), Inches(0.7), SLIDE_W, Pt(2), fill_color=ORANGE) + +def make_content_slide(title, section_label=""): + slide = prs.slides.add_slide(prs.slide_layouts[6]) # blank + set_slide_bg(slide, BG_DARK) + if section_label: + add_top_bar(slide, section_label) + # Title + tb = add_text_box(slide, Inches(0.6), Inches(0.9), Inches(12), Inches(0.6)) + set_text(tb.text_frame, title, size=26, color=WHITE, bold=True) + add_footer_bar(slide) + return slide + +def add_placeholder_box(slide, left, top, width, height, text): + """Add a dashed placeholder box for screenshots/images the user will add.""" + shape = add_rect(slide, left, top, width, height, fill_color=RGBColor(0x22, 0x2A, 0x38)) + shape.line.color.rgb = ORANGE + shape.line.width = Pt(1.5) + shape.line.dash_style = 4 # dash + tb = add_text_box(slide, left + Inches(0.2), top + Inches(0.1), + width - Inches(0.4), height - Inches(0.2)) + tf = tb.text_frame + tf.word_wrap = True + set_text(tf, "📷 " + text, size=11, color=ORANGE, bold=False, alignment=PP_ALIGN.CENTER) + tf.paragraphs[0].alignment = PP_ALIGN.CENTER + tb.text_frame.paragraphs[0].space_before = Pt(0) + return shape + +# Track total slides for numbering at the end +slides_data = [] + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 1: Title +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +# Orange accent line +add_rect(slide, Inches(0), Inches(4.8), SLIDE_W, Pt(4), fill_color=ORANGE) +# Title +tb = add_text_box(slide, Inches(0.8), Inches(2.2), Inches(11.7), Inches(1.0)) +set_text(tb.text_frame, "PS_AI_ConvAgent", size=52, color=WHITE, bold=True, alignment=PP_ALIGN.LEFT) +# Subtitle +tb = add_text_box(slide, Inches(0.8), Inches(3.4), Inches(11.7), Inches(1.2)) +set_text(tb.text_frame, "Conversational AI Plugin for Unreal Engine 5", size=24, color=GRAY_LIGHT, alignment=PP_ALIGN.LEFT) +add_para(tb.text_frame, "ElevenLabs Integration · Real-Time Voice · Full-Body Animation · Multiplayer", + size=14, color=TEAL, alignment=PP_ALIGN.LEFT, space_before=Pt(12)) +# Bottom info +tb = add_text_box(slide, Inches(0.8), Inches(5.4), Inches(11.7), Inches(1.0)) +set_text(tb.text_frame, "ASTERION", size=18, color=ORANGE, bold=True, alignment=PP_ALIGN.LEFT) +add_para(tb.text_frame, "Plugin Documentation · v1.0 · March 2026", size=12, color=GRAY_MED, + alignment=PP_ALIGN.LEFT, space_before=Pt(6)) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 2: Table of Contents +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Table of Contents", "OVERVIEW") +tb = add_text_box(slide, Inches(0.8), Inches(1.7), Inches(5.5), Inches(5.0)) +tf = tb.text_frame +tf.word_wrap = True +sections = [ + ("01", "Plugin Overview", "Architecture, components, and key features"), + ("02", "Quick Start", "Get up and running in 5 minutes"), + ("03", "ElevenLabs Component", "Conversation lifecycle and configuration"), + ("04", "Posture System", "Head, eye, and body tracking"), + ("05", "Facial Expressions", "Emotion-driven animations"), + ("06", "Lip Sync", "Real-time audio-driven visemes"), + ("07", "Interaction System", "Multi-agent selection and routing"), + ("08", "Agent Configuration", "Data asset and editor tools"), + ("09", "Network & Multiplayer", "Replication, LOD, and Opus compression"), + ("10", "Animation Nodes", "AnimBP integration (Body + Face)"), + ("11", "Blueprint Library", "Utility functions"), +] +for i, (num, title, desc) in enumerate(sections): + if i == 0: + p = tf.paragraphs[0] + else: + p = tf.add_paragraph() + p.space_before = Pt(8) + p.space_after = Pt(2) + run_num = p.add_run() + run_num.text = f"{num} " + run_num.font.size = Pt(14) + run_num.font.color.rgb = ORANGE + run_num.font.bold = True + run_num.font.name = "Arial" + run_title = p.add_run() + run_title.text = title + run_title.font.size = Pt(14) + run_title.font.color.rgb = WHITE + run_title.font.bold = True + run_title.font.name = "Arial" + p2 = tf.add_paragraph() + p2.text = f" {desc}" + p2.font.size = Pt(10) + p2.font.color.rgb = GRAY_LIGHT + p2.font.name = "Arial" + p2.space_before = Pt(0) + p2.space_after = Pt(4) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 3: Plugin Overview - Architecture +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "01 Plugin Overview", "Architecture and Key Features") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 4: What is PS_AI_ConvAgent? +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("What is PS_AI_ConvAgent?", "OVERVIEW") +tb = add_text_box(slide, Inches(0.6), Inches(1.7), Inches(7.0), Inches(5.0)) +tf = tb.text_frame +tf.word_wrap = True +set_text(tf, "A full-stack Unreal Engine 5 plugin for real-time conversational AI NPCs.", + size=14, color=WHITE, bold=False) +add_para(tf, "", size=6, color=WHITE) + +features = [ + ("Voice Conversation", "Two-way real-time voice via ElevenLabs Conversational AI API (WebSocket)"), + ("Full-Body Animation", "Procedural head/eye/body tracking, emotion-driven facial expressions, audio-driven lip sync"), + ("Multi-Agent Support", "Distance/view-cone selection, centralized mic routing, automatic agent switching"), + ("Multiplayer Ready", "Full network replication, Opus audio compression (16x), audio/lip-sync LOD culling"), + ("MetaHuman Compatible", "ARKit blendshapes, CTRL_expressions curves, OVR visemes, AnimBP nodes"), + ("Editor Tools", "Agent configuration data asset with voice/model/LLM pickers, REST API sync"), + ("Persistent Memory", "WebSocket stays open across interactions — agent remembers the full conversation"), +] +for title, desc in features: + add_bullet(tf, "", size=4, color=WHITE, level=0, space_before=Pt(6)) + p = tf.add_paragraph() + p.space_before = Pt(0) + p.space_after = Pt(2) + run_t = p.add_run() + run_t.text = f"▸ {title}: " + run_t.font.size = Pt(12) + run_t.font.color.rgb = ORANGE + run_t.font.bold = True + run_t.font.name = "Arial" + run_d = p.add_run() + run_d.text = desc + run_d.font.size = Pt(11) + run_d.font.color.rgb = GRAY_LIGHT + run_d.font.name = "Arial" + +add_placeholder_box(slide, Inches(8.2), Inches(1.7), Inches(4.5), Inches(5.0), + "SCREENSHOT: Vue d'ensemble de l'éditeur UE5 avec un NPC agent en scène.\n" + "Montrer le viewport avec le personnage + le Details panel affichant les composants " + "(ElevenLabsComponent, PostureComponent, FacialExpressionComponent, LipSyncComponent).") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 5: Architecture Diagram +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Component Architecture", "OVERVIEW") +# Left column - NPC Actor +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(5.8), Inches(0.4)) +set_text(tb.text_frame, "NPC Actor (Server-side)", size=16, color=ORANGE, bold=True) + +components_npc = [ + ("ElevenLabsComponent", "WebSocket, audio pipeline, conversation lifecycle", TEAL), + ("PostureComponent", "Head/eye/body procedural tracking", CYAN), + ("FacialExpressionComponent", "Emotion-to-animation blending", CYAN), + ("LipSyncComponent", "FFT spectral analysis → ARKit blendshapes", CYAN), + ("MicrophoneCaptureComponent", "WASAPI capture, resample to 16kHz", TEAL), +] +y_pos = 2.1 +for name, desc, accent in components_npc: + box = add_rect(slide, Inches(0.6), Inches(y_pos), Inches(5.8), Inches(0.7), + fill_color=RGBColor(0x1E, 0x28, 0x36)) + box.line.color.rgb = accent + box.line.width = Pt(1) + tb = add_text_box(slide, Inches(0.8), Inches(y_pos + 0.05), Inches(5.4), Inches(0.6)) + tf = tb.text_frame + p = tf.paragraphs[0] + run = p.add_run() + run.text = name + run.font.size = Pt(11) + run.font.color.rgb = WHITE + run.font.bold = True + run.font.name = "Arial" + p2 = tf.add_paragraph() + p2.text = desc + p2.font.size = Pt(9) + p2.font.color.rgb = GRAY_LIGHT + p2.font.name = "Arial" + p2.space_before = Pt(1) + y_pos += 0.8 + +# Right column - Player Pawn +tb = add_text_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(0.4)) +set_text(tb.text_frame, "Player Pawn (Client-side)", size=16, color=ORANGE, bold=True) + +components_player = [ + ("InteractionComponent", "Agent selection, mic routing, RPC relay", TEAL), +] +y_pos = 2.1 +for name, desc, accent in components_player: + box = add_rect(slide, Inches(7.0), Inches(y_pos), Inches(5.8), Inches(0.7), + fill_color=RGBColor(0x1E, 0x28, 0x36)) + box.line.color.rgb = accent + box.line.width = Pt(1) + tb = add_text_box(slide, Inches(7.2), Inches(y_pos + 0.05), Inches(5.4), Inches(0.6)) + tf = tb.text_frame + p = tf.paragraphs[0] + run = p.add_run() + run.text = name + run.font.size = Pt(11) + run.font.color.rgb = WHITE + run.font.bold = True + run.font.name = "Arial" + p2 = tf.add_paragraph() + p2.text = desc + p2.font.size = Pt(9) + p2.font.color.rgb = GRAY_LIGHT + p2.font.name = "Arial" + p2.space_before = Pt(1) + y_pos += 0.8 + +# Subsystem +box = add_rect(slide, Inches(7.0), Inches(3.1), Inches(5.8), Inches(0.7), + fill_color=RGBColor(0x1E, 0x28, 0x36)) +box.line.color.rgb = YELLOW_GRN +box.line.width = Pt(1) +tb = add_text_box(slide, Inches(7.2), Inches(3.15), Inches(5.4), Inches(0.6)) +tf = tb.text_frame +p = tf.paragraphs[0] +run = p.add_run() +run.text = "InteractionSubsystem" +run.font.size = Pt(11) +run.font.color.rgb = WHITE +run.font.bold = True +run.font.name = "Arial" +p2 = tf.add_paragraph() +p2.text = "World subsystem — agent registry & discovery" +p2.font.size = Pt(9) +p2.font.color.rgb = GRAY_LIGHT +p2.font.name = "Arial" +p2.space_before = Pt(1) + +# Data Assets +tb = add_text_box(slide, Inches(7.0), Inches(4.2), Inches(5.8), Inches(0.4)) +set_text(tb.text_frame, "Data Assets", size=16, color=ORANGE, bold=True) + +assets = [ + ("AgentConfig", "Agent ID, voice, LLM, prompt, emotions, dynamic variables"), + ("EmotionPoseMap", "7 emotions × 3 intensities → AnimSequence references"), + ("LipSyncPoseMap", "15 OVR visemes → AnimSequence pose references"), +] +y_pos = 4.7 +for name, desc in assets: + box = add_rect(slide, Inches(7.0), Inches(y_pos), Inches(5.8), Inches(0.55), + fill_color=RGBColor(0x1E, 0x28, 0x36)) + box.line.color.rgb = GRAY_LIGHT + box.line.width = Pt(1) + tb = add_text_box(slide, Inches(7.2), Inches(y_pos + 0.03), Inches(5.4), Inches(0.5)) + tf = tb.text_frame + p = tf.paragraphs[0] + run = p.add_run() + run.text = name + run.font.size = Pt(11) + run.font.color.rgb = WHITE + run.font.bold = True + run.font.name = "Arial" + run2 = p.add_run() + run2.text = f" — {desc}" + run2.font.size = Pt(9) + run2.font.color.rgb = GRAY_LIGHT + run2.font.name = "Arial" + y_pos += 0.65 + +# Animation Nodes +tb = add_text_box(slide, Inches(0.6), Inches(6.3), Inches(12.0), Inches(0.4)) +tf = tb.text_frame +p = tf.paragraphs[0] +run = p.add_run() +run.text = "Animation Nodes (AnimBP): " +run.font.size = Pt(11) +run.font.color.rgb = ORANGE +run.font.bold = True +run.font.name = "Arial" +run2 = p.add_run() +run2.text = "PS AI ConvAgent Posture · PS AI ConvAgent Facial Expression · PS AI ConvAgent Lip Sync" +run2.font.size = Pt(11) +run2.font.color.rgb = GRAY_LIGHT +run2.font.name = "Arial" + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 6: Quick Start - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "02 Quick Start", "Get up and running in 5 minutes") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 7: Quick Start - Step 1-3 +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Quick Start (1/2)", "QUICK START") +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(7.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +# Step 1 +set_text(tf, "Step 1: Enable the Plugin", size=16, color=ORANGE, bold=True) +add_bullet(tf, "Edit > Plugins > search \"PS_AI_ConvAgent\" > Enable > Restart Editor", size=11, color=WHITE) + +# Step 2 +add_para(tf, "", size=6, color=WHITE) +add_para(tf, "Step 2: Set your API Key", size=16, color=ORANGE, bold=True, space_before=Pt(12)) +add_bullet(tf, "Project Settings > Plugins > PS AI ConvAgent - ElevenLabs", size=11, color=WHITE) +add_bullet(tf, "Paste your ElevenLabs API Key", size=11, color=WHITE) +add_bullet(tf, "Set your default Agent ID (from elevenlabs.io dashboard)", size=11, color=WHITE) + +# Step 3 +add_para(tf, "", size=6, color=WHITE) +add_para(tf, "Step 3: Set up the NPC Actor", size=16, color=ORANGE, bold=True, space_before=Pt(12)) +add_bullet(tf, "Add ElevenLabsComponent to your NPC actor (or Blueprint)", size=11, color=WHITE) +add_bullet(tf, "Add PostureComponent for head/eye tracking (optional)", size=11, color=WHITE) +add_bullet(tf, "Add FacialExpressionComponent for emotions (optional)", size=11, color=WHITE) +add_bullet(tf, "Add LipSyncComponent for lip-sync (optional)", size=11, color=WHITE) +add_bullet(tf, "Set AgentID on the component (or create an AgentConfig data asset)", size=11, color=WHITE) + +add_placeholder_box(slide, Inches(8.0), Inches(1.6), Inches(4.8), Inches(2.2), + "SCREENSHOT: Project Settings > Plugins > PS AI ConvAgent - ElevenLabs.\n" + "Montrer les champs API Key et Default Agent ID.") +add_placeholder_box(slide, Inches(8.0), Inches(4.0), Inches(4.8), Inches(2.8), + "SCREENSHOT: Details panel d'un NPC actor avec les 4 composants ajoutés:\n" + "ElevenLabsComponent, PostureComponent, FacialExpressionComponent, LipSyncComponent.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 8: Quick Start - Step 4-5 +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Quick Start (2/2)", "QUICK START") +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(7.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +# Step 4 +set_text(tf, "Step 4: Set up the Player Pawn", size=16, color=ORANGE, bold=True) +add_bullet(tf, "Add InteractionComponent to your Player Pawn Blueprint", size=11, color=WHITE) +add_bullet(tf, "Configure MaxInteractionDistance (default 300 cm)", size=11, color=WHITE) +add_bullet(tf, "bAutoStartConversation = true (automatic) or false (manual)", size=11, color=WHITE) +add_bullet(tf, "bAutoManageListening = true for hands-free mic management", size=11, color=WHITE) + +# Step 5 +add_para(tf, "", size=6, color=WHITE) +add_para(tf, "Step 5: Wire Blueprint Events (optional)", size=16, color=ORANGE, bold=True, space_before=Pt(12)) +add_bullet(tf, "OnAgentTranscript — display user speech-to-text", size=11, color=WHITE) +add_bullet(tf, "OnAgentTextResponse — display agent's complete response", size=11, color=WHITE) +add_bullet(tf, "OnAgentPartialResponse — real-time streaming subtitles", size=11, color=WHITE) +add_bullet(tf, "OnAgentStartedSpeaking / OnAgentStoppedSpeaking — UI feedback", size=11, color=WHITE) +add_bullet(tf, "OnAgentEmotionChanged — custom emotion reactions", size=11, color=WHITE) + +add_para(tf, "", size=6, color=WHITE) +add_para(tf, "That's it! Walk near the NPC and start talking.", size=14, color=TEAL, bold=True, space_before=Pt(12)) + +add_placeholder_box(slide, Inches(8.0), Inches(1.6), Inches(4.8), Inches(2.5), + "SCREENSHOT: Blueprint Event Graph montrant les principaux events:\n" + "OnAgentConnected, OnAgentTranscript, OnAgentTextResponse, OnAgentStoppedSpeaking.\n" + "Avec des Print String pour chaque event.") +add_placeholder_box(slide, Inches(8.0), Inches(4.3), Inches(4.8), Inches(2.5), + "SCREENSHOT: InteractionComponent sur le Player Pawn Blueprint.\n" + "Details panel montrant MaxInteractionDistance, bAutoStartConversation, " + "bAutoManageListening.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 9: ElevenLabs Component - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "03 ElevenLabs Component", "Conversation lifecycle, audio pipeline, and configuration") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 10: ElevenLabsComponent - Configuration +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("ElevenLabsComponent — Configuration", "REFERENCE") + +# Properties table +props = [ + ("AgentConfig", "Data Asset", "—", "Agent configuration override"), + ("AgentID", "FString", "\"\"", "ElevenLabs Agent ID (fallback to project default)"), + ("TurnMode", "Enum", "Server", "Server VAD (hands-free) or Client (push-to-talk)"), + ("bPersistentSession", "bool", "true", "Keep WebSocket alive across Start/End cycles"), + ("bAutoStartListening", "bool", "true", "Auto-open mic on connection (Server VAD only)"), + ("MicChunkDurationMs", "int32", "100", "Mic chunk size in ms (20–500)"), + ("bAllowInterruption", "bool", "true", "Allow user to interrupt agent"), + ("AudioPreBufferMs", "int32", "2000", "Pre-buffer delay before playback (0–4000)"), + ("ResponseTimeoutSeconds", "float", "10.0", "Timeout for server response"), + ("MaxReconnectAttempts", "int32", "5", "Auto-reconnect attempts (exponential backoff)"), + ("bExternalMicManagement", "bool", "false", "External mic via FeedExternalAudio()"), + ("SoundAttenuation", "Asset", "null", "3D spatial audio settings"), +] + +# Header row +add_rect(slide, Inches(0.5), Inches(1.55), Inches(12.3), Inches(0.35), fill_color=RGBColor(0x2A, 0x35, 0x45)) +tb = add_text_box(slide, Inches(0.6), Inches(1.55), Inches(3.0), Inches(0.35)) +set_text(tb.text_frame, "Property", size=10, color=ORANGE, bold=True) +tb = add_text_box(slide, Inches(3.6), Inches(1.55), Inches(1.2), Inches(0.35)) +set_text(tb.text_frame, "Type", size=10, color=ORANGE, bold=True) +tb = add_text_box(slide, Inches(4.8), Inches(1.55), Inches(1.0), Inches(0.35)) +set_text(tb.text_frame, "Default", size=10, color=ORANGE, bold=True) +tb = add_text_box(slide, Inches(5.8), Inches(1.55), Inches(7.0), Inches(0.35)) +set_text(tb.text_frame, "Description", size=10, color=ORANGE, bold=True) + +y = 1.95 +for name, typ, default, desc in props: + bg = RGBColor(0x1E, 0x28, 0x36) if props.index((name, typ, default, desc)) % 2 == 0 else BG_DARK + add_rect(slide, Inches(0.5), Inches(y), Inches(12.3), Inches(0.33), fill_color=bg) + tb = add_text_box(slide, Inches(0.6), Inches(y), Inches(3.0), Inches(0.33)) + set_text(tb.text_frame, name, size=9, color=WHITE, bold=True) + tb = add_text_box(slide, Inches(3.6), Inches(y), Inches(1.2), Inches(0.33)) + set_text(tb.text_frame, typ, size=9, color=GRAY_LIGHT) + tb = add_text_box(slide, Inches(4.8), Inches(y), Inches(1.0), Inches(0.33)) + set_text(tb.text_frame, default, size=9, color=TEAL) + tb = add_text_box(slide, Inches(5.8), Inches(y), Inches(7.0), Inches(0.33)) + set_text(tb.text_frame, desc, size=9, color=GRAY_LIGHT) + y += 0.33 + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 11: ElevenLabsComponent - Events +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("ElevenLabsComponent — Events", "REFERENCE") + +events = [ + ("OnAgentConnected", "(ConversationInfo)", "WebSocket connected, session ready"), + ("OnAgentDisconnected", "(StatusCode, Reason)", "WebSocket closed"), + ("OnAgentError", "(ErrorMessage)", "Connection or protocol error"), + ("OnAgentTranscript", "(Segment)", "Real-time user speech-to-text"), + ("OnAgentTextResponse", "(ResponseText)", "Agent's complete text response"), + ("OnAgentPartialResponse", "(PartialText)", "Streaming LLM tokens (subtitles)"), + ("OnAgentStartedSpeaking", "()", "First audio chunk arrived"), + ("OnAgentStoppedSpeaking", "()", "Audio playback finished"), + ("OnAgentInterrupted", "()", "Agent speech interrupted"), + ("OnAgentStartedGenerating", "()", "Server started LLM generation"), + ("OnAgentResponseTimeout", "()", "Server response timeout"), + ("OnAgentEmotionChanged", "(Emotion, Intensity)", "Agent set emotion via tool"), + ("OnAgentClientToolCall", "(ToolCall)", "Custom client tool invocation"), +] + +add_rect(slide, Inches(0.5), Inches(1.55), Inches(12.3), Inches(0.32), fill_color=RGBColor(0x2A, 0x35, 0x45)) +tb = add_text_box(slide, Inches(0.6), Inches(1.55), Inches(3.5), Inches(0.32)) +set_text(tb.text_frame, "Event", size=10, color=ORANGE, bold=True) +tb = add_text_box(slide, Inches(4.1), Inches(1.55), Inches(3.0), Inches(0.32)) +set_text(tb.text_frame, "Parameters", size=10, color=ORANGE, bold=True) +tb = add_text_box(slide, Inches(7.1), Inches(1.55), Inches(5.7), Inches(0.32)) +set_text(tb.text_frame, "Description", size=10, color=ORANGE, bold=True) + +y = 1.9 +for name, params, desc in events: + bg = RGBColor(0x1E, 0x28, 0x36) if events.index((name, params, desc)) % 2 == 0 else BG_DARK + add_rect(slide, Inches(0.5), Inches(y), Inches(12.3), Inches(0.32), fill_color=bg) + tb = add_text_box(slide, Inches(0.6), Inches(y), Inches(3.5), Inches(0.32)) + set_text(tb.text_frame, name, size=9, color=WHITE, bold=True) + tb = add_text_box(slide, Inches(4.1), Inches(y), Inches(3.0), Inches(0.32)) + set_text(tb.text_frame, params, size=9, color=TEAL) + tb = add_text_box(slide, Inches(7.1), Inches(y), Inches(5.7), Inches(0.32)) + set_text(tb.text_frame, desc, size=9, color=GRAY_LIGHT) + y += 0.32 + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 12: ElevenLabsComponent - Functions +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("ElevenLabsComponent — Functions", "REFERENCE") + +# Callable +tb = add_text_box(slide, Inches(0.6), Inches(1.5), Inches(5.5), Inches(0.3)) +set_text(tb.text_frame, "Blueprint Callable", size=14, color=ORANGE, bold=True) + +funcs_call = [ + ("StartConversation()", "Open WebSocket and begin conversation"), + ("EndConversation()", "Stop mic, stop audio, close WebSocket (if non-persistent)"), + ("StartListening()", "Open microphone, start streaming audio to server"), + ("StopListening()", "Close microphone, flush remaining audio"), + ("SendTextMessage(Text)", "Send text without microphone"), + ("InterruptAgent()", "Stop the agent's current utterance"), + ("FeedExternalAudio(FloatPCM)", "Feed mic data from an external source"), +] + +y = 1.85 +for fname, desc in funcs_call: + tb = add_text_box(slide, Inches(0.6), Inches(y), Inches(5.5), Inches(0.28)) + tf = tb.text_frame + p = tf.paragraphs[0] + r1 = p.add_run() + r1.text = fname + " " + r1.font.size = Pt(10) + r1.font.color.rgb = WHITE + r1.font.bold = True + r1.font.name = "Consolas" + r2 = p.add_run() + r2.text = desc + r2.font.size = Pt(9) + r2.font.color.rgb = GRAY_LIGHT + r2.font.name = "Arial" + y += 0.3 + +# Pure +tb = add_text_box(slide, Inches(0.6), Inches(y + 0.15), Inches(5.5), Inches(0.3)) +set_text(tb.text_frame, "Blueprint Pure (Getters)", size=14, color=ORANGE, bold=True) +y += 0.5 + +funcs_pure = [ + ("IsConnected() → bool", "WebSocket connection state"), + ("IsListening() → bool", "Microphone capture active"), + ("IsAgentSpeaking() → bool", "Agent audio playing"), + ("IsPreBuffering() → bool", "Pre-buffer phase active"), + ("GetConversationInfo()", "ConversationID, AgentID"), + ("GetWebSocketProxy()", "Low-level WebSocket access"), +] + +for fname, desc in funcs_pure: + tb = add_text_box(slide, Inches(0.6), Inches(y), Inches(5.5), Inches(0.28)) + tf = tb.text_frame + p = tf.paragraphs[0] + r1 = p.add_run() + r1.text = fname + " " + r1.font.size = Pt(10) + r1.font.color.rgb = WHITE + r1.font.bold = True + r1.font.name = "Consolas" + r2 = p.add_run() + r2.text = desc + r2.font.size = Pt(9) + r2.font.color.rgb = GRAY_LIGHT + r2.font.name = "Arial" + y += 0.3 + +add_placeholder_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(5.0), + "SCREENSHOT: Blueprint palette montrant les fonctions du ElevenLabsComponent.\n" + "Ou un petit graph Blueprint montrant:\n" + "StartConversation → delay → StartListening → OnAgentStoppedSpeaking → StartListening") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 13: Posture System - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "04 Posture System", "Procedural head, eye, and body tracking") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 14: PostureComponent +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("PostureComponent — Configuration", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.5), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Three-layer cascade: Eyes → Head → Body", size=13, color=TEAL, bold=True) +add_para(tf, "Procedural gaze tracking with automatic activation/deactivation blend.", size=11, color=GRAY_LIGHT, + space_before=Pt(6)) + +# Tracking config +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Tracking", size=14, color=ORANGE, bold=True, space_before=Pt(10)) +add_bullet(tf, "TargetActor — Actor to look at (auto-set by InteractionComponent)", size=10, color=WHITE) +add_bullet(tf, "bActive — Enable/disable tracking", size=10, color=WHITE) +add_bullet(tf, "bEnableBodyTracking — 360° continuous yaw rotation", size=10, color=WHITE) +add_bullet(tf, "ActivationBlendDuration — Smooth on/off transitions (0.05–3.0s)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Angle Limits (degrees)", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "MaxHeadYaw: 40° · MaxHeadPitch: 30°", size=10, color=WHITE) +add_bullet(tf, "MaxEyeHorizontal: 15° · MaxEyeVertical: 10°", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Smoothing Speeds", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "BodyInterpSpeed: 4.0 · HeadInterpSpeed: 4.0", size=10, color=WHITE) +add_bullet(tf, "EyeInterpSpeed: 5.0 · ReturnToNeutralSpeed: 3.0", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Animation Compensation", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "HeadAnimationCompensation: 0.9 — override vs. additive blending", size=10, color=WHITE) +add_bullet(tf, "EyeAnimationCompensation: 0.6 — same for eyes", size=10, color=WHITE) +add_bullet(tf, "BodyDriftCompensation: 0.8 — counteracts spine bending", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Bone Configuration", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "HeadBoneName: \"head\"", size=10, color=WHITE) +add_bullet(tf, "NeckBoneChain: multi-bone weighted distribution (e.g. neck_01=0.25, neck_02=0.35, head=0.40)", size=10, color=WHITE) + +add_placeholder_box(slide, Inches(7.5), Inches(1.6), Inches(5.3), Inches(5.0), + "SCREENSHOT: NPC en jeu regardant le joueur avec le debug gaze activé.\n" + "Montrer les lignes de debug des yeux (bDrawDebugGaze=true) " + "et la rotation de la tête vers le joueur.\n" + "Idéalement vue de profil pour voir la rotation du cou/tête.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 15: Facial Expression - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "05 Facial Expressions", "Emotion-driven procedural animation") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 16: FacialExpressionComponent +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("FacialExpressionComponent", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Emotion-to-Animation Blending", size=13, color=TEAL, bold=True) +add_para(tf, "Plays AnimSequence curves based on the agent's current emotion.\n" + "Crossfades between emotions. Mouth curves excluded (lip-sync overrides).", size=11, color=GRAY_LIGHT, + space_before=Pt(6)) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "7 Emotions × 3 Intensities", size=14, color=ORANGE, bold=True, space_before=Pt(8)) + +emotions = ["Neutral", "Joy", "Sadness", "Anger", "Surprise", "Fear", "Disgust"] +for em in emotions: + add_bullet(tf, f"{em} → Low (Normal) · Medium · High (Extreme)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Configuration", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "EmotionPoseMap — Data asset mapping emotions to AnimSequences", size=10, color=WHITE) +add_bullet(tf, "EmotionBlendDuration — Crossfade duration (0.1–3.0s, default 0.5s)", size=10, color=WHITE) +add_bullet(tf, "ActivationBlendDuration — On/off transition (0.05–3.0s, default 0.5s)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Driven by the \"set_emotion\" client tool", size=11, color=TEAL, bold=False, space_before=Pt(8)) +add_para(tf, "Configure the agent's prompt to use emotions via the AgentConfig data asset.\n" + "The emotion tool is auto-injected when bIncludeEmotionTool is enabled.", size=10, color=GRAY_LIGHT) + +add_placeholder_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(2.3), + "SCREENSHOT: EmotionPoseMap data asset dans le Content Browser.\n" + "Montrer le mapping des émotions avec les AnimSequences\n" + "(Joy/Normal, Joy/Medium, Joy/Extreme, etc.).") +add_placeholder_box(slide, Inches(7.0), Inches(4.1), Inches(5.8), Inches(2.5), + "SCREENSHOT: Comparaison côte à côte du MetaHuman avec différentes émotions.\n" + "Ex: Neutral → Joy → Anger (3 captures du visage).") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 17: Lip Sync - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "06 Lip Sync", "Real-time audio-driven viseme estimation") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 18: LipSyncComponent +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("LipSyncComponent", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.5), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "FFT Spectral Analysis → 15 OVR Visemes → ARKit Blendshapes", size=12, color=TEAL, bold=True) +add_para(tf, "Real-time frequency-based lip sync. No external model needed.", size=11, color=GRAY_LIGHT, + space_before=Pt(4)) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Pipeline", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "Agent audio (PCM 16kHz) → FFT spectral analysis", size=10, color=WHITE) +add_bullet(tf, "Frequency bands → 15 OVR viseme weights", size=10, color=WHITE) +add_bullet(tf, "Visemes → ARKit blendshape mapping (MetaHuman compatible)", size=10, color=WHITE) +add_bullet(tf, "Optional: text-driven viseme timeline (decoupled from audio chunks)", size=10, color=WHITE) +add_bullet(tf, "Emotion expression blending during speech", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "15 OVR Visemes", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "sil, PP (P/B/M), FF (F/V), TH, DD (T/D), kk (K/G), CH (CH/SH/J)", size=10, color=WHITE) +add_bullet(tf, "SS (S/Z), nn (N/L), RR (R), aa (A), E, ih (I), oh (O), ou (OO)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Configuration", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "LipSyncStrength: 0–3 (default 1.0) — overall amplitude", size=10, color=WHITE) +add_bullet(tf, "SmoothingSpeed: 35–65 (default 50) — viseme interpolation", size=10, color=WHITE) +add_bullet(tf, "EmotionExpressionBlend: 0–1 (default 0.5) — emotion bleed-through", size=10, color=WHITE) +add_bullet(tf, "EnvelopeAttackMs / ReleaseMs — mouth open/close dynamics", size=10, color=WHITE) +add_bullet(tf, "PoseMap — optional LipSyncPoseMap data asset for custom poses", size=10, color=WHITE) + +add_placeholder_box(slide, Inches(7.5), Inches(1.6), Inches(5.3), Inches(5.0), + "SCREENSHOT: MetaHuman parlant avec lip sync actif.\n" + "Idéalement un GIF ou une séquence de 3 captures montrant " + "différentes positions de la bouche (aa, oh, FF).\n" + "Ou le viewport avec le debug verbosity montrant les visemes.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 19: Interaction System - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "07 Interaction System", "Multi-agent selection, microphone routing, and discovery") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 20: InteractionComponent +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("InteractionComponent", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.2), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Player-Side Agent Selection & Routing", size=13, color=TEAL, bold=True) +add_para(tf, "Attach to the Player Pawn. Automatically selects the nearest visible agent\n" + "and manages conversation, microphone, and posture.", size=11, color=GRAY_LIGHT, space_before=Pt(4)) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Selection", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "MaxInteractionDistance — max range in cm (default 300)", size=10, color=WHITE) +add_bullet(tf, "ViewConeHalfAngle — selection cone (default 45°)", size=10, color=WHITE) +add_bullet(tf, "SelectionStickyAngle — hysteresis to prevent flickering (default 60°)", size=10, color=WHITE) +add_bullet(tf, "bRequireLookAt — must look at agent to select (default true)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Automation", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "bAutoStartConversation — auto-connect when agent selected (default true)", size=10, color=WHITE) +add_bullet(tf, "bAutoManageListening — auto open/close mic (default true)", size=10, color=WHITE) +add_bullet(tf, "bAutoManagePosture — auto-set posture target (default true)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Events", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "OnAgentSelected(Agent) — new agent in range", size=10, color=WHITE) +add_bullet(tf, "OnAgentDeselected(Agent) — left range or switched agent", size=10, color=WHITE) +add_bullet(tf, "OnNoAgentInRange() — no agents nearby", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Functions", size=14, color=ORANGE, bold=True, space_before=Pt(6)) +add_bullet(tf, "GetSelectedAgent() — current agent", size=10, color=WHITE) +add_bullet(tf, "ForceSelectAgent(Agent) — manual override", size=10, color=WHITE) +add_bullet(tf, "ClearSelection() — deselect", size=10, color=WHITE) + +add_placeholder_box(slide, Inches(7.2), Inches(1.6), Inches(5.5), Inches(5.0), + "SCREENSHOT: Vue du jeu avec le joueur s'approchant d'un NPC.\n" + "Montrer le debug du InteractionComponent si possible " + "(rayon de sélection, cone de vue).\n" + "Ou le Details panel avec les paramètres du InteractionComponent.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 21: Agent Config - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "08 Agent Configuration", "Data asset and editor tools") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 22: AgentConfig Data Asset +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("AgentConfig Data Asset", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Reusable Agent Configuration", size=13, color=TEAL, bold=True) +add_para(tf, "Create via Content Browser → right-click → Miscellaneous → PS AI ConvAgent Agent Config.\n" + "Assign to ElevenLabsComponent.AgentConfig to override per-component settings.", size=11, + color=GRAY_LIGHT, space_before=Pt(4)) + +sections_cfg = [ + ("Identity", [ + "AgentID — ElevenLabs Agent ID", + "AgentName — Display name", + ]), + ("Voice", [ + "VoiceID — ElevenLabs voice (editor picker available)", + "TTSModelID — TTS model (default: eleven_turbo_v2_5)", + "Stability (0–1), SimilarityBoost (0–1), Speed (0.7–1.95)", + ]), + ("Language & LLM", [ + "LLMModel — LLM backend (default: gemini-2.5-flash, editor dropdown)", + "Language — Agent language (editor dropdown)", + "bMultilingual — Dynamic language switching", + ]), + ("Behavior", [ + "CharacterPrompt — Agent personality (multiline)", + "FirstMessage — Greeting on connection", + "TurnTimeout — Idle timeout (default 7s, -1 for infinite)", + "bDisableIdleFollowUp — Prevent unprompted speech", + ]), + ("Emotion Tool", [ + "bIncludeEmotionTool — Auto-inject emotion instructions in prompt", + "EmotionToolPromptFragment — Customizable tool instructions", + ]), + ("Dynamic Variables", [ + "DefaultDynamicVariables — TMap", + "Use {{variable_name}} in prompts, substituted at runtime", + ]), +] + +for section_title, items in sections_cfg: + add_para(tf, "", size=3, color=WHITE) + add_para(tf, section_title, size=12, color=ORANGE, bold=True, space_before=Pt(6)) + for item in items: + add_bullet(tf, item, size=9, color=WHITE, space_before=Pt(1)) + +add_placeholder_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(2.6), + "SCREENSHOT: AgentConfig data asset ouvert dans l'éditeur.\n" + "Montrer les sections Identity, Voice (avec le picker), " + "et CharacterPrompt.") +add_placeholder_box(slide, Inches(7.0), Inches(4.4), Inches(5.8), Inches(2.4), + "SCREENSHOT: Editor boutons Create/Update/Fetch Agent\n" + "dans la custom detail view de l'AgentConfig.\n" + "Montrer le dropdown Voice et LLM Model.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 23: Network - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "09 Network & Multiplayer", "Replication, LOD, and audio compression") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 24: Network Features +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Network Architecture", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(12.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Client-Server Architecture", size=13, color=TEAL, bold=True) +add_para(tf, "Server owns NPC actors and ElevenLabs WebSocket. Clients relay commands via InteractionComponent.", + size=11, color=GRAY_LIGHT, space_before=Pt(4)) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Replicated State", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "bNetIsConversing — conversation active (all clients see it)", size=10, color=WHITE) +add_bullet(tf, "NetConversatingPawn — pawn of conversating player (for posture target on remote clients)", size=10, color=WHITE) +add_bullet(tf, "CurrentEmotion / CurrentEmotionIntensity — agent emotion (drives expressions on all clients)", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Audio Compression", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "Opus codec — 16x bandwidth reduction on agent audio broadcast", size=10, color=WHITE) +add_bullet(tf, "Mic audio optionally Opus-compressed before relay to server", size=10, color=WHITE) +add_bullet(tf, "Automatic fallback to raw PCM if Opus is unavailable", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "LOD (Level of Detail)", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "AudioLODCullDistance (default 3000 cm) — skip audio beyond this for non-speaking players", size=10, color=WHITE) +add_bullet(tf, "LipSyncLODDistance (default 1500 cm) — skip lip-sync beyond this", size=10, color=WHITE) +add_bullet(tf, "Speaking player always receives full quality regardless of distance", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Multicast RPCs", size=14, color=ORANGE, bold=True, space_before=Pt(8)) +add_bullet(tf, "MulticastReceiveAgentAudio — broadcast agent voice to all clients", size=10, color=WHITE) +add_bullet(tf, "MulticastAgentTextResponse / PartialResponse — broadcast subtitles", size=10, color=WHITE) +add_bullet(tf, "MulticastAgentStartedSpeaking / StoppedSpeaking / Interrupted / StartedGenerating", size=10, color=WHITE) + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 25: Animation Nodes - Section Header +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "10 Animation Nodes", "AnimBP integration for Body and Face") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 26: Animation Nodes Detail +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Animation Blueprint Nodes", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(6.0), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "Three animation nodes for Body and Face AnimBPs", size=13, color=TEAL, bold=True) + +# Node 1 +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "PS AI ConvAgent Posture", size=14, color=ORANGE, bold=True, space_before=Pt(10)) +add_bullet(tf, "Place in: Body AnimBP (bApplyHeadRotation=true, bApplyEyeCurves=false)", size=10, color=WHITE) +add_bullet(tf, "Also place in: Face AnimBP (bApplyHeadRotation=false, bApplyEyeCurves=true)", size=10, color=WHITE) +add_bullet(tf, "Injects head/neck rotation and ARKit eye curves into the pose", size=10, color=WHITE) +add_bullet(tf, "Multi-bone neck chain support with weighted distribution", size=10, color=WHITE) + +# Node 2 +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "PS AI ConvAgent Facial Expression", size=14, color=ORANGE, bold=True, space_before=Pt(10)) +add_bullet(tf, "Place in: Face AnimBP, BEFORE mh_arkit_mapping_pose", size=10, color=WHITE) +add_bullet(tf, "Injects CTRL_expressions_* curves from emotion AnimSequences", size=10, color=WHITE) +add_bullet(tf, "Mouth curves excluded (lip-sync takes priority)", size=10, color=WHITE) + +# Node 3 +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "PS AI ConvAgent Lip Sync", size=14, color=ORANGE, bold=True, space_before=Pt(10)) +add_bullet(tf, "Place in: Face AnimBP, AFTER Facial Expression, BEFORE mh_arkit_mapping_pose", size=10, color=WHITE) +add_bullet(tf, "Injects ARKit blendshape curves (jawOpen, mouthFunnel, etc.)", size=10, color=WHITE) +add_bullet(tf, "Works with MetaHuman CTRL_expressions pipeline", size=10, color=WHITE) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "Node Order in Face AnimBP:", size=12, color=TEAL, bold=True, space_before=Pt(10)) +add_para(tf, "BasePose → Posture (eyes) → Facial Expression → Lip Sync → mh_arkit_mapping_pose", + size=11, color=WHITE, space_before=Pt(4)) + +add_placeholder_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(2.3), + "SCREENSHOT: Body AnimBP AnimGraph montrant le node\n" + "\"PS AI ConvAgent Posture\" connecté dans la chaîne.\n" + "Montrer BasePose → Posture → Output Pose.") +add_placeholder_box(slide, Inches(7.0), Inches(4.1), Inches(5.8), Inches(2.5), + "SCREENSHOT: Face AnimBP AnimGraph montrant les 3 nodes:\n" + "Posture (eyes only) → Facial Expression → Lip Sync → mh_arkit_mapping_pose.\n" + "Montrer la chaîne complète.") +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 27: Blueprint Library +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_section_header(slide, "11 Blueprint Library", "Utility functions") + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 28: Blueprint Library Detail +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Blueprint Library", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(12.0), Inches(2.0)) +tf = tb.text_frame +tf.word_wrap = True + +set_text(tf, "UPS_AI_ConvAgent_BlueprintLibrary", size=13, color=TEAL, bold=True) + +add_para(tf, "", size=4, color=WHITE) +add_para(tf, "SetPostProcessAnimBlueprint(SkelMeshComp, AnimBPClass)", size=12, color=ORANGE, bold=True, + space_before=Pt(10)) +add_para(tf, "Assign a post-process AnimBlueprint to a SkeletalMeshComponent at runtime.\n" + "Per-instance override without modifying the shared asset. Pass nullptr to clear.\n" + "Use this to dynamically add the Face AnimBP that contains the ConvAgent animation nodes.", + size=11, color=GRAY_LIGHT, space_before=Pt(4)) + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 29: Enums Reference +# ═══════════════════════════════════════════════════════════════════════════════ +slide = make_content_slide("Enums Reference", "REFERENCE") + +tb = add_text_box(slide, Inches(0.6), Inches(1.6), Inches(5.5), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +enums_data = [ + ("EPS_AI_ConvAgent_ConnectionState_ElevenLabs", [ + "Disconnected", "Connecting", "Connected", "Error" + ]), + ("EPS_AI_ConvAgent_TurnMode_ElevenLabs", [ + "Server — Server VAD (hands-free)", "Client — Push-to-talk" + ]), + ("EPS_AI_ConvAgent_Emotion", [ + "Neutral", "Joy", "Sadness", "Anger", "Surprise", "Fear", "Disgust" + ]), + ("EPS_AI_ConvAgent_EmotionIntensity", [ + "Low (Normal)", "Medium", "High (Extreme)" + ]), +] + +for enum_name, values in enums_data: + add_para(tf, enum_name, size=12, color=ORANGE, bold=True, space_before=Pt(10)) + for v in values: + add_bullet(tf, v, size=10, color=WHITE, space_before=Pt(1)) + +# Data Structures +tb = add_text_box(slide, Inches(7.0), Inches(1.6), Inches(5.8), Inches(5.5)) +tf = tb.text_frame +tf.word_wrap = True + +structs = [ + ("FPS_AI_ConvAgent_ConversationInfo_ElevenLabs", [ + "ConversationID (FString)", "AgentID (FString)" + ]), + ("FPS_AI_ConvAgent_TranscriptSegment_ElevenLabs", [ + "Text (FString)", "Speaker (FString) — \"user\" or \"agent\"", "bIsFinal (bool)" + ]), + ("FPS_AI_ConvAgent_ClientToolCall_ElevenLabs", [ + "ToolName (FString)", "ToolCallId (FString)", "Parameters (TMap)" + ]), + ("FPS_AI_ConvAgent_NeckBoneEntry", [ + "BoneName (FName)", "Weight (float, 0–1)" + ]), +] + +set_text(tf, "Data Structures", size=14, color=TEAL, bold=True) +for struct_name, fields in structs: + add_para(tf, struct_name, size=11, color=ORANGE, bold=True, space_before=Pt(10)) + for f in fields: + add_bullet(tf, f, size=9, color=WHITE, space_before=Pt(1)) + +add_footer_bar(slide) + +# ═══════════════════════════════════════════════════════════════════════════════ +# SLIDE 30: Closing +# ═══════════════════════════════════════════════════════════════════════════════ +slide = prs.slides.add_slide(prs.slide_layouts[6]) +set_slide_bg(slide, BG_DARK) +add_rect(slide, Inches(0), Inches(4.2), SLIDE_W, Pt(4), fill_color=ORANGE) + +tb = add_text_box(slide, Inches(0.8), Inches(2.5), Inches(11.7), Inches(1.0)) +set_text(tb.text_frame, "PS_AI_ConvAgent", size=44, color=WHITE, bold=True, alignment=PP_ALIGN.CENTER) +tb = add_text_box(slide, Inches(0.8), Inches(3.5), Inches(11.7), Inches(0.6)) +set_text(tb.text_frame, "Plugin Documentation · v1.0", size=16, color=GRAY_LIGHT, alignment=PP_ALIGN.CENTER) + +tb = add_text_box(slide, Inches(0.8), Inches(4.8), Inches(11.7), Inches(1.0)) +set_text(tb.text_frame, "ASTERION", size=20, color=ORANGE, bold=True, alignment=PP_ALIGN.CENTER) +add_para(tb.text_frame, "asterion-vr.com", size=12, color=GRAY_MED, alignment=PP_ALIGN.CENTER, space_before=Pt(6)) + +# ── Add page numbers ────────────────────────────────────────────────────────── +total = len(prs.slides) +for i, slide in enumerate(prs.slides): + add_page_number(slide, i + 1, total) + +# ── Save ────────────────────────────────────────────────────────────────────── +output = r"E:\ASTERION\GIT\PS_AI_Agent\PS_AI_ConvAgent_Documentation.pptx" +prs.save(output) +print(f"Documentation saved to {output}") +print(f"Total slides: {total}")