> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livepeer.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Daydream Recent Announcements

> Latest videos, socials, and community activity for Daydream.

export const daydreamSocials = [{
  icon: 'globe',
  href: 'https://daydream.live/',
  label: 'Daydream Website'
}, {
  icon: 'github',
  href: 'https://github.com/daydreamlive/scope',
  label: 'Daydream GitHub'
}, {
  icon: 'file-code',
  href: 'https://docs.daydream.live/',
  label: 'Daydream Docs'
}, {
  icon: 'youtube',
  href: 'https://www.youtube.com/channel/UCviyh_-8H2vkYq9ROHMBffQ',
  label: 'Daydream YouTube'
}, {
  icon: 'x-twitter',
  href: 'https://x.com/daydreamlive',
  label: 'Daydream X'
}, {
  icon: 'discord',
  href: 'https://discord.gg/pF2Akym5bV',
  label: 'Daydream Discord'
}, {
  icon: 'instagram',
  href: 'https://www.instagram.com/daydreamlive_/',
  label: 'Daydream Instagram'
}, {
  icon: 'linkedin',
  href: 'https://www.linkedin.com/company/daydreamlive',
  label: 'Daydream LinkedIn'
}];

export const discordAnnouncementsData = [{
  id: "1486303511787602010",
  content: "📣 <strong>Monthly Updates & Retros Are Due!</strong> 📣<br /><br />Please post your February monthly update or retrospective as a reply under your original proposal.<br />For guidance, refer to <a href=\"https://roadmap.livepeer.org/help/articles/8273474-monthly-reports\" target=\"_blank\" rel=\"noopener noreferrer\">the Monthly Update Guide</a> and <a href=\"https://roadmap.livepeer.org/help/articles/8986190-retrospective\" target=\"_blank\" rel=\"noopener noreferrer\">Retro Guide</a>.<br /><br />The following teams have already shared theirs:<br /><ul><li><a href=\"https://forum.livepeer.org/t/transformation-spe-release-notes-closing-retro/3142/7?u=mehrdad\" target=\"_blank\" rel=\"noopener noreferrer\">Transformation SPE Retrospective </a></li><li><a href=\"https://forum.livepeer.org/t/proposal-protocol-r-d-special-purpose-entity/3160/11?u=drieddate_sidestream\" target=\"_blank\" rel=\"noopener noreferrer\">Protocol SPE February Update</a></li><li><a href=\"https://forum.livepeer.org/t/metrics-and-sla-foundations-for-naap/3189/9?u=mehrdad\" target=\"_blank\" rel=\"noopener noreferrer\">Cloud SPE February Update</a></li></ul>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T09:59:31.394Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1486303511787602010"
}, {
  id: "1486303464345702520",
  content: "📣 <strong><u>The CloudSPE proposal is live.</u></strong> 🗳️ 📣 <br /><br />The proposal funds Cloud SPE to build a focused MVP for standardized, publicly observable network performance, reliability, and demand metrics, making the network measurable and comparable while laying the groundwork for future SLA-aware routing and scaling.<br /><br />Vote Yes ✅ or No ❌ <a href=\"https://explorer.livepeer.org/treasury/47675980806842999962173227987422002121354040219792725319563843023665050472833\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T09:59:20.083Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1486303464345702520"
}, {
  id: "1486303431873527941",
  content: "📣 <strong><u>Vote now on the Protocol R&D SPE</u></strong> 🗳️ 📣 <br /><br />All network value depends on protocol security. The proposal argues for a dedicated, continuously staffed function for protocol security, upgrades, and core improvements, replacing the current ad hoc model with a single accountable structure.<br /><br />Vote Yes ✅ or No ❌ <a href=\"https://explorer.livepeer.org/treasury/67253869199932483234551664403036205881217777786063955710174984983936506090761\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T09:59:12.341Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1486303431873527941"
}, {
  id: "1486303296984453240",
  content: "🦃🦃🦃 <strong><u>November #2 Community Update</u></strong> 🦃🦃🦃<br /><br /><strong>Big Moments</strong><br /><br />📈  Network fees last week were <strong>\$15,826</strong> with a stable fee baseline in November. Participation rate is <br /><strong>51.7%</strong> - <u>a three year high</u>; the inflation rate is decreasing, currently at <strong>0.06835%</strong>.<br /><br /><:daydream:1435328189311488060> Daydream Scope, created by <@380038770520489986>, added LoRA Support in Scope v0.1.0a7. Read more <a href=\"https://github.com/daydreamlive/scope/releases/tag/v0.1.0a7\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>.<br /><br />🔐 The new bot measures has again curbed spam in the server. <strong>Beware of a new tactic - Bots are adding links into their bio.</strong> We are exploring measures to remove these bots. <u>Never click links in the bio of unverified sources.</u><br /><br /><strong>Upcoming Events</strong><br /><br /><a href=\"https://discord.com/events/423160867534929930/1394387798232141996\" target=\"_blank\" rel=\"noopener noreferrer\">Livepeer Fireside</a> - <t:1764180000:R><br /><a href=\"https://discord.com/events/423160867534929930/1394387788568203274\" target=\"_blank\" rel=\"noopener noreferrer\">Watercooler Chat</a> - <t:1764619200:f><br /><br /><strong>Other Updates</strong><br /><br />🟣 <u>Muxion Labs</u><br /><br /><@&1303105760661606450>'s <@488172209823678474> created a new Daydream Comfy Custom Node with an updated interface. If you want to see it in action - watch this week's Watercooler Chat <a href=\"https://youtu.be/9rZh5d_wRlI?t=1753\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>! The link goes directly to the demo timestamp. <br /><br />🏛️ <u>Livepeer Foundation</u><br /><br />Livepeer Foundation has been making progress towards the Transformation SPE goals:<br /><br /><ul><li><@781667568942841866> posted progress on updating our documentation <a href=\"https://forum.livepeer.org/t/rfp-documentation-restructure/3071/11?u=cult_leader_en\" target=\"_blank\" rel=\"noopener noreferrer\">here</a></li><li><@537817645140017153> digested the feedback from the Inflation Survey <a href=\"https://forum.livepeer.org/t/continuing-discussions-on-inflation/3139/4?u=cult_leader_en\" target=\"_blank\" rel=\"noopener noreferrer\">here</a></li><li>Guild has made improvements to the Explorer</li></ul><@&1433161182143053864> members & <@423592125406380042> were in Argentina for DevConnect - See <@543292258980593664> review of the conference <a href=\"https://discord.com/channels/423160867534929930/426106677650128898/1441545466323144734\" target=\"_blank\" rel=\"noopener noreferrer\">https://discord.com/channels/423160867534929930/426106677650128898/1441545466323144734</a><br /><br /><a:campfire:1372208400787832953> <u>Livepeer Fireside</u><br /><br />Watch the most recent Fireside <a href=\"https://www.youtube.com/watch?v=Uw7cdZLx7kA\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>.<br /><br />Last Fireside's agenda:<br /><br /><ul><li><@515896144560128000> from Embody Network updating on progress</li><li><@389895972102209551> from Embody Network presenting Embody AI creator</li></ul>❌ <strong>Missed an event?</strong><br /><br />If you miss any events, check out our <a href=\"https://www.youtube.com/@LivepeerProject\" target=\"_blank\" rel=\"noopener noreferrer\">Youtube here</a>. <br /><br /><strong>Asking again: What do we want for Livepeer in 2026?</strong> Please drop your opinions in <#426106677650128898> 🦃🪞<div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"https://www.youtube.com/watch?v=9rZh5d_wRlI\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Watercooler Chat | November 24 2025</strong></a><p>Tune into our weekly Watercooler Chat to discuss pressing topics from community members.<br />---<br />Connect with Livepeer on Socials:<br />Twitter: <a href=\"https://twitter.com/Livepeer\" target=\"_blank\" rel=\"noopener noreferrer\">https://twitter.com/Livepeer</a><br />Discord: <a href=\"https://discord.gg/uaPhtyrWsF\" target=\"_blank\" rel=\"noopener noreferrer\">https://discord.gg/uaPhtyrWsF</a><br />Telegram: <a href=\"https://t.me/livepeerorg\" target=\"_blank\" rel=\"noopener noreferrer\">https://t.me/livepeerorg</a><br />Reddit: <a href=\"https://www.reddit.com/r/livepeer/\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.reddit.com/r/livepeer/</a><br />Blog: <a href=\"https://medium.com/livepeer-blog\" target=\"_blank\" rel=\"noopener noreferrer\">https://medium.com/livepeer-blog</a><br />Forum: <a href=\"https://forum...\" target=\"_blank\" rel=\"noopener noreferrer\">https://forum...</a></p><img src=\"https://i.ytimg.com/vi/9rZh5d_wRlI/maxresdefault.jpg\" alt=\"Watercooler Chat | November 24 2025\" style=\"max-width:300px;border-radius:8px;margin-top:8px\" /></div><div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"https://forum.livepeer.org/t/rfp-documentation-restructure/3071/11?u=cult_leader_en\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>RFP - Documentation Restructure</strong></a><p>Hello all!  Thank you for welcoming me at today's Watercooler Chat [Slides here] where I provided a few key Documentation updates, which I'm also sharing below.     Sharing the latest structured update on the Livepeer Documentation Restructure, aligned with the RFP goals outlined here: RFP - Documentation Restructure - #10 by honestly_rich...</p><img src=\"https://canada1.discourse-cdn.com/flex030/uploads/livepeer/original/2X/9/9cdb46d131c2f53e22bfd13cbc572e215b2b636e.png\" alt=\"RFP - Documentation Restructure\" style=\"max-width:300px;border-radius:8px;margin-top:8px\" /></div><div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"https://forum.livepeer.org/t/continuing-discussions-on-inflation/3139/4?u=cult_leader_en\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Continuing discussions on Inflation</strong></a><p>Quick update on the survey:  We have a good number (25) of results now, so I'll be closing the survey at midnight UTC on Thursday. That means that the last day to fill out the form is Wednesday (in the morning if you're in Argentina).  I'll then synthesise the answers and share a summary here this Friday.   Edit: The survey is now closed. ...</p></div><div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"https://www.youtube.com/watch?v=Uw7cdZLx7kA\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Livepeer Fireside | November 12 2025</strong></a><p>Join our weekly Fireside where we discuss the most important happenings within our ecosystem. The heavy hitters of the community present their updates. Tap in!<br />---<br />Connect with Livepeer on Socials:<br />Twitter: <a href=\"https://twitter.com/Livepeer\" target=\"_blank\" rel=\"noopener noreferrer\">https://twitter.com/Livepeer</a><br />Discord: <a href=\"https://discord.gg/uaPhtyrWsF\" target=\"_blank\" rel=\"noopener noreferrer\">https://discord.gg/uaPhtyrWsF</a><br />Telegram: <a href=\"https://t.me/livepeerorg\" target=\"_blank\" rel=\"noopener noreferrer\">https://t.me/livepeerorg</a><br />Reddit: <a href=\"https://www.reddit.com/...\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.reddit.com/...</a></p><img src=\"https://i.ytimg.com/vi/Uw7cdZLx7kA/maxresdefault.jpg\" alt=\"Livepeer Fireside | November 12 2025\" style=\"max-width:300px;border-radius:8px;margin-top:8px\" /></div>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T09:58:40.181Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1486303296984453240"
}, {
  id: "1483220726331740373",
  content: "Livepeer #🎙│announcements",
  author: "_alisonwonderland",
  timestamp: "2026-03-16T21:49:38.066Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1483220726331740373"
}, {
  id: "1473413137410560030",
  content: "Livepeer #🎙│announcements",
  author: "_alisonwonderland",
  timestamp: "2026-02-17T20:17:46.651Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1473413137410560030"
}, {
  id: "1463397885272920138",
  content: "📣 <strong><u>The CloudSPE proposal is live.</u></strong> 🗳️ 📣 <br /><br />The proposal funds Cloud SPE to build a focused MVP for standardized, publicly observable network performance, reliability, and demand metrics, making the network measurable and comparable while laying the groundwork for future SLA-aware routing and scaling.<br /><br />Vote Yes ✅ or No ❌ <a href=\"https://explorer.livepeer.org/treasury/47675980806842999962173227987422002121354040219792725319563843023665050472833\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>",
  author: "_alisonwonderland",
  timestamp: "2026-01-21T05:00:44.467Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1463397885272920138"
}, {
  id: "1463397844890288351",
  content: "📣 <strong><u>Vote now on the Protocol R&D SPE</u></strong> 🗳️ 📣 <br /><br />All network value depends on protocol security. The proposal argues for a dedicated, continuously staffed function for protocol security, upgrades, and core improvements, replacing the current ad hoc model with a single accountable structure.<br /><br />Vote Yes ✅ or No ❌ <a href=\"https://explorer.livepeer.org/treasury/67253869199932483234551664403036205881217777786063955710174984983936506090761\" target=\"_blank\" rel=\"noopener noreferrer\">here</a>",
  author: "_alisonwonderland",
  timestamp: "2026-01-21T05:00:34.839Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1463397844890288351"
}, {
  id: "1463392024576266301",
  content: "Livepeer #🎙│announcements",
  author: "_alisonwonderland",
  timestamp: "2026-01-21T04:37:27.168Z",
  url: "https://discord.com/channels/1066890817425387581/1463391944746078319/1463392024576266301"
}];

export const daydreamDiscordData = [{
  id: "1486304270428143616",
  content: "<strong>Scope v0.1.9</strong><br />Audio Out is here. Pipelines can now generate and stream audio alongside video over WebRTC.<br /><br />Here's a demo (Audio ON) of storytelling using Longlive for video and Kokoro TTS for audio - running video and audio in 2 separate Scope instances on a single 5090 GPU (running in one Scope instance coming soon).<br /><br /><u>What's in v0.1.9:</u><br /><ul><li><strong>Audio output support</strong>: pipelines can return audio streamed over WebRTC, with a mute/unmute toggle in the UI</li><li><strong>Fix VACE regression</strong>: tempo sync modulation no longer interferes with VACE noise scale (broken in 0.1.8)</li></ul><u>3 sample audio plugins to try:</u><br /><ul><li><a href=\"https://app.daydream.live/nodes/rafal/audio-beep\" target=\"_blank\" rel=\"noopener noreferrer\">audio-beep</a>: simple test tone</li><li><a href=\"https://app.daydream.live/nodes/rafal/kokoro-tts\" target=\"_blank\" rel=\"noopener noreferrer\">kokoro-tts</a>: text-to-speech via Kokoro</li><li><a href=\"https://app.daydream.live/nodes/rafal/mms-tts\" target=\"_blank\" rel=\"noopener noreferrer\">mms-tts</a>: Meta's MMS text-to-speech</li></ul>Grab the update: <a href=\"https://github.com/daydreamlive/scope/releases/tag/v0.1.9?utm_source=discord&utm_medium=release&utm_campaign=v0.1.9\" target=\"_blank\" rel=\"noopener noreferrer\">Scope v0.1.9</a><br /><br /><video src=\"https://cdn.discordapp.com/attachments/1485293172870348811/1486304269521915984/demo_story_hd.mp4?ex=69deb978&is=69dd67f8&hm=2f0432d0389acf1ae51f34eadb663a3bb7c5e1d63406d05573a8d0b072681f94&\" controls width=\"100%\" height=\"auto\" style=\"border-radius:8px;margin-top:12px\"></video>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T10:02:32.268Z",
  url: "https://discord.com/channels/1066890817425387581/1485293172870348811/1486304270428143616"
}, {
  id: "1486304240484880434",
  content: "<br /><br />Scope workflows can now sync to the beat. Lock your AI visuals to Ableton Link or MIDI clock, modulate parameters on beat boundaries, and cycle prompts with the music.<br /><br />What's in v0.1.8:<br /><ul><li>Tempo sync & beat modulation - quantize parameter changes, sync waveforms to BPM</li><li>MCP server - AI assistants can programmatically control pipelines and parameters</li><li>DMX Art-Net input - map lighting console channels to any Scope parameter</li><li>FPS throttling fix - smoother streaming, no more frame delivery stalls</li></ul>Grab the update: <a href=\"https://github.com/daydreamlive/scope/releases/tag/v0.1.8?utm_source=discord&utm_medium=release&utm_campaign=v0.1.8\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/daydreamlive/scope/releases/tag/v0.1.8?utm_source=discord&utm_medium=release&utm_campaign=v0.1.8</a><div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"https://github.com/daydreamlive/scope/releases/tag/v0.1.8?utm_source=discord&utm_medium=release&utm_campaign=v0.1.8\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Release v0.1.8 · daydreamlive/scope</strong></a><p>This release adds beat-synced parameter modulation with Ableton Link and MIDI clock support, an MCP server for AI-assisted pipeline control, and DMX Art-Net input.<br />Highlights<br /><br />Tempo Sync &amp; Beat...</p><img src=\"https://opengraph.githubassets.com/3e2af7f5287eb903e3bfb3159bf6bf0bc9b55075237c1e2f46b11cdfbda80d0f/daydreamlive/scope/releases/tag/v0.1.8\" alt=\"Release v0.1.8 · daydreamlive/scope\" style=\"max-width:300px;border-radius:8px;margin-top:8px\" /></div>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T10:02:25.129Z",
  url: "https://discord.com/channels/1066890817425387581/1485293172870348811/1486304240484880434"
}, {
  id: "1486304203495440487",
  content: "<br /><strong>Scope v0.1.6</strong><br /><br />This release ships shareable workflows, OSC control, cloud plugins, and a new logs panel, and more.<br /><br />Some highlights include:<br /><br />Shareable Workflows -- export your full workflow config (plugins, LoRAs, timeline data) as a JSON file and share it with anyone. Recipients import the file and Scope resolves all dependencies automatically. You can also share workflows via deeplink on app.daydream.live: click \"Install Workflow\" and it opens directly in Scope.<br /><br />OSC Support -- control pipeline parameters via OSC.<br /><br />Cloud Plugins -- install whitelisted plugins in cloud mode. Plugins are cleaned up between sessions automatically.<br /><br />Logs Panel -- cloud server logs now stream to the client in real time. A new log panel (toggle from the status bar) shows all logs with filters for errors and cloud-specific lines.<video src=\"https://cdn.discordapp.com/attachments/1485293172870348811/1486304203218620499/scope_demo.mp4?ex=69deb968&is=69dd67e8&hm=e3080098248db62039547d18f8186f475b598f5c61bc555f6e2cdda9d3823e37&\" controls width=\"100%\" height=\"auto\" style=\"border-radius:8px;margin-top:12px\"></video>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T10:02:16.310Z",
  url: "https://discord.com/channels/1066890817425387581/1485293172870348811/1486304203495440487"
}, {
  id: "1486304160373669948",
  content: "<br />📣 <strong>AI Video Program - Cohort 3 is open!</strong><br /><br />If you're working in TouchDesigner, Resolume, or any other video software and want to bring real-time AI into your work - this is for you.<br /><br /><strong>What you'll learn & build:</strong><br />-> Run real-time AI video models locally or via remote inference<br />-> Build AI pipelines alongside TouchDesigner, Resolume & ComfyUI<br />-> Use LoRA models and plugins for custom generative visuals<br />-> Get feedback through live workshops and daily office hours with the Daydream team + guest experts<br /><br /><strong>The program:</strong><br />📅 2 weeks (March 9-20) + Demo Day March 25<br />🏆 \$5K in prizes<br />🎥 All sessions recorded - no timezone pressure<br />👥 Cohort of 20-30 practitioners building alongside you<br /><br /><strong>Applications close March 7. Starts March 9.</strong><br /><br />➡️ <a href=\"http://daydream.live/interactive-ai-video-program/?utm_source=dm&utm_medium=personal&utm_campaign=c3_recruitment&utm_content=andrew\" target=\"_blank\" rel=\"noopener noreferrer\">Apply Here</a> ⬅️<br /><br />Drop any questions below or DM us - happy to help!<div style=\"border-left:3px solid var(--accent);padding:8px 12px;margin-top:12px;border-radius:4px\"><a href=\"http://daydream.live/interactive-ai-video-program/?utm_source=dm&utm_medium=personal&utm_campaign=c3_recruitment&utm_content=andrew\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Daydream Interactive AI Video Program | Daydream</strong></a><p>Daydream's Interactive AI Video Program is a two‑week creative lab for AI artists, creative technologists, and developers exploring real‑time AI video with Daydream Scope.</p><img src=\"https://framerusercontent.com/assets/TRBB5uP8yeHi3MRo6y5nItnjxHY.png\" alt=\"Daydream Interactive AI Video Program | Daydream\" style=\"max-width:300px;border-radius:8px;margin-top:8px\" /></div>",
  author: "_alisonwonderland",
  timestamp: "2026-03-25T10:02:06.029Z",
  url: "https://discord.com/channels/1066890817425387581/1485293172870348811/1486304160373669948"
}, {
  id: "1485293511329972325",
  content: "Daydream Live #🌑〻announcements",
  author: "_alisonwonderland",
  timestamp: "2026-03-22T15:06:08.520Z",
  url: "https://discord.com/channels/1066890817425387581/1485293172870348811/1485293511329972325"
}];

export const daydreamBlogData = [{
  title: `Real-time AI avatars on a single GPU: When local beats the cloud API`,
  href: `https://blog.daydream.live/real-time-ai-avatars-on-a-single-gpu-when-local-beats-the-cloud-api/`,
  author: `By Livepeer Infraservice`,
  content: `<p>Let&apos;s talk about running a conversational avatar locally: weights on your disk, a 24 GB card doing the work, and the honest tradeoffs of this approach versus using&#xA0; a cloud API.</p><p>The typical scenario is simple: You type a question, and several seconds later, a face on the screen answers you out loud. That same face was a still portrait a moment ago. The voice and the lips were generated in the same pass by a single 22-billion-parameter open-weights model. At the same - this all happened on your machine - nothing left the box.</p><p>That is what our new<a href="https://docs.daydream.live/scope/tutorials/ltx-2-avatar?ref=blog.daydream.live"> <u>LTX 2.3 avatar tutorial</u></a> walks through, end to end, on a single NVIDIA GPU with 24 GB of VRAM or more. The pipeline is a seven-node graph in<a href="https://github.com/daydreamlive/scope?ref=blog.daydream.live"> <u>Daydream Scope</u></a>&apos;s Workflow Builder. A local language model (the workflow uses SmolLM2-360M-Instruct) writes the reply. Lightricks&apos; LTX 2.3 generates 121 frames of video at 25 fps along with the 48 kHz audio of the spoken reply, in a single joint pass, in eight denoising steps of roughly 0.3 seconds each. The browser receives the result over WebRTC from your own process.&#xA0;</p><figure class="kg-card kg-video-card kg-width-regular kg-card-hascaption" data-kg-thumbnail="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/avatar_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/avatar.mp4" poster="https://img.spacergif.org/v1/1920x1192/0a/spacer.png" width="1920" height="1192" playsinline preload="metadata" style="background: transparent url(&apos;https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/avatar_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:36</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            <figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Real-time AI video avatar running in Daydream Scope</span></p></figcaption>
        </figure><p>This post is the companion piece to that tutorial. Think of it like this: the tutorial shows you how, and this artifact is about when self-hosted, open-weights, real-time avatars are the right call and when a cloud avatar API is still the right call.&#xA0;</p><h2 id="gtm-moment-more-than-a-tech-demo"><strong>GTM moment more than a tech demo</strong></h2><p>Three things changed in the last six months, and all three of them significantly affect your considerations and options.</p><p>First, <strong>open-weights joint audio-video crossed a usable quality bar.</strong> Lightricks released LTX-2 with open weights on January 6, 2026, and<a href="https://www.cliprise.app/news/ltx-2-3-lightricks-open-source-4k-video-native-audio?ref=blog.daydream.live"> <u>LTX 2.3 on March 5, 2026</u></a>, both under a community license that is free for commercial use up to \$10M in annual revenue.&#xA0;</p><p>LTX 2.3 is a 22-billion-parameter diffusion transformer that produces synchronized video and audio in one forward pass, not video plus a TTS dub. On the<a href="https://awesomeagents.ai/models/ltx-2-3/?ref=blog.daydream.live"> <u>Artificial Analysis open-weight leaderboard</u></a> at release, LTX 2.3 ranked first among open video models, with the Elo gap to closed leaders like Seedance 2.0 still real but narrowed. Lightricks also licensed all training data from Getty Images and Shutterstock, removing the ambiguity in training data that has shadowed most open video models.</p><p>Second, <strong>the consumer GPU floor moved</strong>. The NVIDIA RTX 5090 shipped on January 30, 2025 at a \$1,999 MSRP with 32 GB of GDDR7. Street prices have been higher (TrackaLacker logged a low of \$1,999.99 in August 2025, climbing to \$3,049.99 by February 2026), but the point is the same: a single card under your desk now clears the 24 GB VRAM floor that the LTX 2.3 FP8 checkpoint requires. The same model also runs on any number of H100 cloud providers all over the place with different pricing points.</p><p>Third, <strong>the pipeline tooling matured</strong>. Daydream Scope ships a visual node graph, WebRTC streaming, plugin support, integrations with TouchDesigner, Resolume, Unity, and OBS, and the control protocols <a href="https://blog.daydream.live/midi-in-scope-hands-on-real-time-ai-video-control/" rel="noreferrer">MIDI</a>, <a href="https://blog.daydream.live/osc-scope-precision-real-time-ai-video-control-network/" rel="noreferrer">OSC</a>, <a href="https://blog.daydream.live/dmx-in-scope-from-real-time-ai-video-pixels-to-photons/" rel="noreferrer">DMX</a>, <a href="https://blog.daydream.live/ndi-in-scope-your-real-time-ai-video-across-the-network-and-beyond/" rel="noreferrer">NDI</a>, <a href="https://blog.daydream.live/spout-and-syphon-in-scope-zero-latency-on-your-machine/" rel="noreferrer">Spout, and Syphon.</a>&#xA0;</p><p>Scope 0.2.2 added multi-source, multi-sink graphs; the<a href="https://github.com/daydreamlive/scope/releases?ref=blog.daydream.live"> <u>recent release that introduced the LTX-2 plugin</u></a> also added ~18&#xD7; faster model loading and faster prompt changes. There is now a published, forkable workflow at<a href="https://app.daydream.live/workflows/rafal/live-ltx-2-avatar?ref=blog.daydream.live"> <u>app.daydream.live/workflows/rafal/live-ltx-2-avatar</u></a>. You don&apos;t have to start from a blank graph.</p><p>None of the above is the future - all of it is what was shipped between January and mid-May 2026.</p><h2 id="where-cloud-avatar-apis-still-own-the-category"><strong>Where cloud avatar APIs still own the category</strong></h2><p>If you are building a customer-facing conversational avatar and your priority is sub-second turn-taking with full-duplex emotional rendering, Tavus is the very strong API on the market right now.<a href="https://www.tavus.io/post/phoenix-4-real-time-human-rendering-with-emotional-intelligence?ref=blog.daydream.live">&#xA0;</a></p><p><a href="https://www.tavus.io/post/phoenix-4-real-time-human-rendering-with-emotional-intelligence?ref=blog.daydream.live"><u>Phoenix-4, which Tavus launched on February 18, 2026</u></a>, is a Gaussian-diffusion rendering model that runs at 40 fps in 1080p, with a published sub-500ms end-to-end latency target on their Conversational Video Interface and millisecond-level rendering latency.&#xA0;</p><p>Their stack has named models for rendering (Phoenix-4), perception (Raven-1), and turn-taking (Sparrow-1). On<a href="https://www.businesswire.com/news/home/20251111507298/en/Tavus-Raises-\$40M-to-Build-the-Next-Frontier-of-Intelligence-Human-Computing?ref=blog.daydream.live"> <u>November 12, 2025, Tavus announced a \$40M Series B led by CRV</u></a> (with Scale Venture Partners, Sequoia, Y Combinator, HubSpot Ventures, and Flex Capital), bringing total funding to roughly \$63M. If you want full-duplex active listening that looks like a person nodding while you talk, Tavus is worth considering.</p><p>Beyond Presence is the speed-to-deployment option. Their<a href="https://www.beyondpresence.ai/?ref=blog.daydream.live"> <u>Genesis 1.0 model claims sub-100ms audio-to-video latency</u></a> and roughly 1.2-second end-to-end agent latency, with the platform integrating LiveKit and supporting bring-your-own LLM. The founders previously sold Presize to Meta in April 2022 in what<a href="https://techcrunch.com/2024/10/14/after-selling-his-last-ai-startup-to-meta-beyond-presences-founder-nabs-3-1m-to-build-realistic-avatars/?ref=blog.daydream.live"> <u>TechCrunch described as a lower-nine-figure deal</u></a>, so the technical bench is likely real. Public named-customer evidence is thinner than competitors&apos;; aggregate counts (&quot;2,400+ customers&quot;) do appear in directory listings, but individual case studies do not.</p><p>Then, there&#x2019;s HeyGen, which owns async sales and marketing video. Their<a href="https://www.vidmetoo.com/heygen-pricing-detailed-review-of-all-plans/?ref=blog.daydream.live"> <u>pay-as-you-go API is now priced at about \$1.00 per minute for Avatar III at 1080p and up to \$5.00 per minute for Avatar IV Digital Twin at 4K</u></a>. For mass-produced multilingual outbound that doesn&apos;t need to converse back, that pricing is attractive.</p><p>Synthesia owns enterprise learning and development. The<a href="https://www.synthesia.io/blog?ref=blog.daydream.live"> <u>\$200M Series E led by Google Ventures was officially announced on January 26, 2026 at a roughly \$4B valuation</u></a> (first reported by Forbes on October 29, 2025), and the platform now serves more than 90% of the Fortune 100. Named customers include UBS (which<a href="https://fortune.com/europe/2025/05/20/ubs-bank-ai-generated-video-avatars-analysts/?ref=blog.daydream.live"> <u>rolled out Synthesia avatars to 36 analysts starting January 2025</u></a>, targeting roughly 5,000 videos per year), Merck KGaA, ServiceNow, Heineken, Zoom, and SAP. Synthesia 3.0, which launched in October 2025, adds interactive conversational Video Agents, though as of writing, those Agents are in limited enterprise beta with no publicly named deployment yet.</p><p>D-ID<a href="https://www.d-id.com/news/v4-expressive-visual-agents-real-time-llm-connected-interaction/?ref=blog.daydream.live"> <u>launched V4 Expressive Visual Agents on March 16, 2026</u></a> with a sub-0.5-second conversational turn target and a starting price of \$5.90 per month. They acquired simpleshow in September 2025 (terms undisclosed) and inherited that customer base.</p><p><a href="https://www.d-id.com/visual-agents-customer-examples/?ref=blog.daydream.live">&#xA0;<u>Named D-ID Agents deployments</u></a> include PepsiCo&apos;s Gatorade Sports Science Institute hydration coach, Southern Illinois University School of Medicine&apos;s &quot;Randy&quot; virtual patient, and Rafael&apos;s Iron Dome product explainer.</p><p>If your buyer wants a managed service, a BAA on the vendor&apos;s paper, a roadmap call, and someone to blame when the avatar misbehaves on a Friday afternoon, then you should consider one of these.</p><h2 id="where-local-and-open-wins"><strong>Where local and open wins</strong></h2><p>However, there are at least 5 scenarios where running LTX 2.3 on your own GPU via Scope beats sending audio to any vendor.</p><p><strong>Privacy and data sovereignty.</strong> The tutorial pipeline we mentioned keeps weights on your disk, inference on your GPU, and the WebRTC stream from a browser to your own process.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/photo-1769704653619-a0c7cc86c178.jpeg" class="kg-image" alt="Real-time AI avatars on a single GPU: When local beats the cloud API" loading="lazy" width="1968" height="1522" sizes="(min-width: 720px) 720px"></figure><p>For PHI under HIPAA, the practical bar is a Business Associate Agreement plus controls demonstrating that PHI never leaves your environment.<a href="https://inworld.ai/resources/voice-ai-patient-intake?ref=blog.daydream.live"> <u>Inworld AI&apos;s HIPAA pattern guide for patient intake</u></a> makes the architecture explicit: SOC 2 Type II, GDPR, on-premises deployment on customer-controlled H100 or A100 GPUs, and BAAs under enterprise contracts.&#xA0;</p><p>The same logic applies to MNPI under SEC rules, attorney-client privilege, and CUI in defense work. &quot;Nothing leaves the box&quot; in those cases is a deployment posture, and not a nice-sounding marketing line.</p><p><strong>Unit economics at scale.</strong> Tavus&apos;s published overage on the Starter plan is<a href="https://www.spatius.ai/blog/spatius-vs-tavus/?ref=blog.daydream.live"> <u>\$0.37 per conversation minute</u></a>, with discounts as you move up. HeyGen Avatar IV runs \$4 to \$5 per minute via API. At 100,000 minutes per month at Tavus Starter overage rates, that is about \$37,000 per month before any account-management or volume discount.&#xA0;</p><p>A single RTX 5090 at \$1,999 MSRP, or even at \$3,049 street price, plus a workstation around it, amortizes against that bill in under three months if you can keep the card busy.&#xA0;</p><p>At 1,000,000 minutes per month, the cloud bill at \$0.37 is \$370,000 per month, and the math is not subtle. However, here&#x2019;s the honest qualifier: LTX 2.3 in the Scope avatar workflow produces 4.84 seconds of audio-video per generation cycle, so a single GPU is one conversational stream, not a hundred. You scale by adding GPUs/instances, and the breakeven math is per concurrent stream, not per minute. You can also likely benefit from Daydreams hosted inference even if you don&#x2019;t have your own, local GPU, as it&#x2019;s integrated in Scope and runs on Windows, Mac or Linux machines.</p><p><strong>Model and pipeline control.</strong> The whole pipeline is composable which means that every node in the seven-node graph is swappable, and the graph itself is yours to extend.</p><p>For example, you can replace the reference portrait with the face you actually want. You can swap SmolLM2 for a 7B or 13B open-weights LLM if you can spare the VRAM, or point at a remote LLM endpoint, or run your own fine-tuned model with the LoRAs your business case needs.&#xA0;</p><p>You can even decouple voice from video if you prefer: generate the audio with a separate TTS model you&apos;ve chosen for its voice quality, then lip-sync it with LTX-2, which gives you full control over the voice rather than taking whatever the joint pass produces. You can add Whisper to the input side and have a full voice-to-voice pipeline.&#xA0;</p><p>For more customizability, you can even swap LTX-2 itself for something else; lip-sync models work today, and the autoregressive audio-video models landing this year will slot in the same way.</p><p>Lastly, you can even consider dropping in a different talking-head LoRA and then piping the output into TouchDesigner. And although it&#x2019;s a bit more work, you could drive prompts and parameters over OSC or MIDI from a hardware controller.&#xA0;</p><p>None of this is on a Tavus or HeyGen roadmap, because that is not their product. Their product is the API, and Daydream Scope&apos;s product is the graph and whatever you build on it.</p><p><strong>Edge and latency floor.</strong> A kiosk in a retail showroom, a conference floor activation, a museum installation: most, if not all, of these run on hardware you control, often on a network you don&apos;t trust to reach a cloud API reliably. WebRTC from a local Scope process to a browser on the same LAN is a different latency regime than WebRTC from a browser through the public internet to a vendor&apos;s GPU in another region. Worth taking into account.</p><p><strong>Brand IP that lives somewhere you control.</strong> A long-lived avatar with a face, a voice, a name, and a training set of LoRAs can be considered your brand asset. Hosting that asset on someone else&apos;s tenant is a strategic dependency.&#xA0;</p><p>Soul Machines, founded out of the University of Auckland in 2016 and once a category leader for &quot;digital humans&quot; with Mercedes-Benz and ANZ Bank as customers,<a href="https://www.nzherald.co.nz/business/ai-casualty-once-high-flying-soul-machines-in-receivership/YCN66TQ7BJDFLAMSWGKQCIJNN4/?ref=blog.daydream.live"> <u>entered receivership on February 5, 2026 owing at least NZ\$19.6 million</u></a> after losing those customers to in-house projects. That is the risk picture in one sentence. Open weights on your own infrastructure don&apos;t go into receivership.</p><h2 id="verticals-with-most-potential-for-local-real-time-ai-avatars"><strong>Verticals with most potential for local real-time AI avatars</strong></h2><p>It would be dishonest to say that this local and open approach works equally well for every vertical. You should be guided by this principle and use it for the verticals where the competitive advantage is sharpest. We list these verticals together with realistic constraints and a starter project idea deployable to test the validity of use cases.</p><p>Here are several such verticals - spanning from regulated healthcare to financial services and to multilingual citizen services for (local) governments.</p><p><strong>Regulated healthcare: intake triage, patient education, behavioral health support.</strong> The use case that already exists at production scale today is voice-only intake (Inworld&apos;s HIPAA pattern, Retell), and video avatars are an emerging layer on top.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://images.unsplash.com/photo-1585842378054-ee2e52f94ba2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDU2fHxoZWFsdGhjYXJlfGVufDB8fHx8MTc3OTM2MDY1OXww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" class="kg-image" alt="Real-time AI avatars on a single GPU: When local beats the cloud API" loading="lazy" width="3840" height="2160" sizes="(min-width: 720px) 720px"></figure><p>Southern Illinois University School of Medicine&apos;s &quot;Randy&quot; virtual patient with D-ID is one of the few publicly documented video-avatar deployments in clinical training. The Daydream Scope advantage is real for behavioral health intake and patient education, where you do not want PHI traversing a vendor&apos;s GPU, and where you want the avatar&apos;s face, voice, and script under your team&apos;s control.&#xA0;</p><p>Be mindful of a realistic constraint: clinical validation, consent for any cloned likeness, and a clear escalation path to a human are non-negotiable.&#xA0;</p><p>Starter project a builder could ship in one to two weeks: a kiosk avatar that explains a procedure in plain language and answers patient questions about it, running on a 5090 in the clinic&apos;s own server room, with a Whisper input node, a clinician-approved knowledge base, and an explicit &quot;talk to a person&quot; button.&#xA0;</p><p>As long as the avatar is the front door, and not the doctor, this makes sense.</p><p><strong>Financial services: regulated communications and advisor avatars.</strong> UBS&apos;s Synthesia rollout to 36 analysts in January 2025 is the clearest public evidence that big-bank compliance and AI avatars can coexist, and notably, UBS chose a vendor with a deep enterprise security approach.&#xA0;</p><p>For real-time conversational advisor avatars rather than scripted research videos, the FINRA and SEC marketing-communications rules push hard toward on-premise processing of MNPI and full audit trails.&#xA0;</p><p>Scope&apos;s local-first approach, with weights and inference within the bank&apos;s perimeter, is one that compliance teams understand.&#xA0;</p><p>Again, some realistic constraints: voice cloning consent from any named advisor, model output logging, and a tight allowlist of topics.&#xA0;</p><p>Starter project idea: an internal-only research summary avatar for an analyst&apos;s morning notes, deployed on a single GPU, with the LLM swapped for the bank&apos;s own RAG endpoint, and a daily compliance review of generated outputs.</p><p><strong>Corporate learning and development: localized internal training and role-play simulations.</strong> Synthesia is the category leader here for a reason, and the case studies are good.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://images.unsplash.com/photo-1758691736508-a85d1f7d5a77?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDMxfHxjb3Jwb3JhdGUlMjBlZHVjYXRpb258ZW58MHx8fHwxNzc5MzYwNzY1fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" class="kg-image" alt="Real-time AI avatars on a single GPU: When local beats the cloud API" loading="lazy" width="3840" height="2160" sizes="(min-width: 720px) 720px"></figure><p>Claire Boger, Senior Director of Customer Training and Enablement at Persado, reported<a href="https://www.synthesia.io/case-studies/persado?ref=blog.daydream.live"> <u>a 95% reduction in production time from two weeks to four hours and more than 120 training videos populated into 40 courses in a year</u></a>.&#xA0;</p><p>Druva built dozens of training videos in six months. AWS uses Synthesia to localize marketing content. If you want a scripted, branded, multilingual avatar video factory with templates and SSO, consider them.&#xA0;</p><p>The Daydream advantage in L&amp;D shows up where the asset is interactive and proprietary: role-play simulations with a difficult customer, manager training where the avatar has to react to whatever the trainee says, or sales-objection drills where the persona has to be fine-tuned with confidential transcripts you cannot send to a vendor.&#xA0;</p><p>Starter project: a sales-objection role-play avatar with a swappable customer persona, deployed on a single 5090, integrated with the LMS over a basic webhook.</p><p><strong>Live broadcast, entertainment, and VJ work.</strong> This is the vertical where Scope&apos;s design choices look least like a compromise and most like a deliberate feature.&#xA0;</p><figure class="kg-card kg-image-card"><img src="https://images.unsplash.com/photo-1636487410194-7830594388bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHx0d2l0Y2glMjBzdHJlYW1pbmd8ZW58MHx8fHwxNzc5MzYxMDgxfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=2000" class="kg-image" alt="Real-time AI avatars on a single GPU: When local beats the cloud API" loading="lazy" width="3876" height="2579" sizes="(min-width: 720px) 720px"></figure><p>Real-time WebRTC output, Spout and Syphon and NDI integrations, OSC and MIDI control over node parameters, and audio-reactive workflows - you get this out of the box. VTubers and live streamers have been the most aggressive adopters of real-time AI video pipelines because the rendering latency is the show.&#xA0;</p><p>The LTX 2.3 benefit here is the joint audio-video pass: an avatar that can sing a generated line or react to a chat prompt with both face and voice in sync, in a single pass, without a separate TTS step that drifts.&#xA0;</p><p>Constraint: LTX 2.3 is not autoregressive, so each chunk is generated from the reference image. Between answers, the workflow plays a short idle-loop clip, and there is a small seam at the transition unless you solve for it.&#xA0;</p><p>For broadcast, that seam is a directing choice (cut on the seam, use it as a beat); for a customer-service avatar, it is a more visible artifact.&#xA0;</p><p>Starter project: a Twitch overlay where viewers chat-prompt a co-host avatar that answers in voice and on camera, with the entire pipeline running on the streamer&apos;s existing 4090 or 5090.</p><p><strong>Public-sector kiosks and multilingual citizen service.</strong> The data-residency story is the whole story in this case.&#xA0;</p><p>A kiosk in a city hall serving residents in multiple languages, running on the agency&apos;s own hardware, with no resident data leaving the building, is a cleaner procurement than any cloud API.&#xA0;</p><p>Soul Machines pursued exactly this market with Nadia for Australia&apos;s NDIS, and the technical pieces are now reproducible in open source.&#xA0;</p><p>Constraint: accessibility, language coverage, and a fallback to a human staff member who is actually present.&#xA0;</p><p>Starter project: a single-language kiosk for the most common five citizen questions at one agency, on a 5090 in a locked closet, with NDI output to the kiosk display and a hardware &quot;call a person&quot; button wired through OSC.</p><h2 id="what-a-real-deployment-looks-like"><strong>What a real deployment looks like</strong></h2><p>The unromantic part - and some practical deployment considerations you should consider.</p><p><strong>GPU procurement</strong> in 2026 is not a one-click decision. RTX 5090 supply has been spotty, with street prices ranging from \$1,999 to over \$3,000 through 2025 and 2026 per BestValueGPU and TrackaLacker price trackers.&#xA0;</p><p>On the other side, a used H100 with proper cooling and a 1,500W PSU is a real piece of infrastructure, not just a desktop anyone can run. Many teams should start by using rented hardware and network capacity, such as Daydream&#x2019;s remote inference.</p><p>Another thing to consider is a l<strong>atency budget</strong>: at 4.84 seconds of video per 3 to 4 second generation cycle, your pipeline is comfortably below playback time, but the moment you add Whisper for speech input or a larger LLM for the reply, you eat into that margin.&#xA0;</p><p>Budget the full turn (STT + LLM + LTX 2.3 + WebRTC) and target 7 seconds end-to-end, not the model&apos;s standalone numbers. P99 handling matters: a single slow generation cycle creates an audible gap on the playback side. Fallback to a pre-rendered idle clip is what the tutorial workflow already does between answers; the same trick covers misbehaving generations and significantly improves overall experience.</p><p><strong>Talent likeness and voice consent</strong>: if the reference portrait is a real person, get the consent in writing, scoped to the use, with a retirement clause. The talking-head LoRA in the tutorial (<a href="https://huggingface.co/elix3r/LTX-2.3-22b-AV-LoRA-talking-head?ref=blog.daydream.live"><u>elix3r/LTX-2.3-22b-AV-LoRA-talking-head</u></a>) uses a fixed trigger token OHWXPERSON, which is a useful technical detail to know but does not substitute for a likeness release.&#xA0;</p><p>Synthesia&apos;s &quot;three Cs&quot; (consent, control, collaboration) framework is a defensible starting point. Don&apos;t make avatars of public figures or dead people just because you can.</p><p>Then, there&#x2019;s <strong>content moderation</strong>: a local pipeline has no vendor doing safety classification for you. Wire a moderation pass on the LLM output before it reaches the LTX 2.3 node. <strong>Regulatory layer</strong> to design for now: the<a href="https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai?ref=blog.daydream.live"> <u>EU AI Act Article 50 transparency obligations apply from August 2, 2026</u></a>. Deployers of AI systems generating deepfake image, audio, or video content must disclose that the content is artificially generated, and providers must mark outputs in a machine-readable format.&#xA0;</p><p>The<a href="https://www.troutmanprivacy.com/2026/05/colorado-legislature-passes-bill-to-repeal-and-replace-colorado-ai-act/?ref=blog.daydream.live"> <u>Colorado Anti-Discrimination in AI Act has slipped to January 1, 2027 after SB 189 amendments</u></a>, with consumer-notice and appeal obligations rather than the original duty-of-care regime. Build the disclosure label into the UI now; it costs nothing today and is mandatory later - but also be sure to follow the regulations space closely as it&#x2019;s evolving rapidly.</p><h2 id="honest-limitations"><strong>Honest limitations</strong></h2><p>First and foremost, LTX 2.3 is not an autoregressive model. This means that each generation is conditioned on the reference image, and not on the previous frame. The workflow stitches answer clips together with a short idle loop in between, and a visible seam appears at the transition. For broadcast and entertainment, you can hide that seam with a cut or a beat. For a customer-service avatar staring you down, the seam is somewhat noticeable.</p><p>But this field is evolving, and the autoregressive successors are landing.<a href="https://arxiv.org/abs/2603.11647?ref=blog.daydream.live"> <u>OmniForcing (arXiv:2603.11647, March 2026)</u></a> distills the LTX-2 bidirectional architecture into a streaming autoregressive generator at ~25 fps on a single GPU with ~0.7 second time-to-first-chunk, a roughly 35&#xD7; speedup over the teacher.<a href="https://arxiv.org/abs/2604.25819?ref=blog.daydream.live">&#xA0;</a></p><p><a href="https://arxiv.org/abs/2604.25819?ref=blog.daydream.live"><u>Mutual Forcing (arXiv:2604.25819)</u></a> trains a native, fast-causal audio-video model with dual-mode self-evolution. The OmniForcing team is committed to releasing code and weights within two weeks of the paper. When these models ship, and (community) Scope plugins land for them, the seam problem and most of the per-chunk batching go away.&#xA0;</p><p>Voice quality on small local LLMs varies. SmolLM2-360M-Instruct is small enough to fit comfortably alongside LTX 2.3 on a 24 GB card, and small enough that its prose is plain and occasionally off. Swap it for a 7B or 8B model if you have the VRAM headroom on a 32 GB card or H100. Prompt-change latency is noticeably higher on a 32 GB card than on an H100, even with the recent ~18&#xD7; increase in model-loading speed in the LTX-2 plugin.</p><p>The LoRA&apos;s fixed trigger token (OHWXPERSON) means your prompts must include that token to trigger the talking-head behavior. It is a quirk, not a blocker, and it is the kind of quirk that is normal for open-weights LoRAs. Just a thing to be aware of.</p><h2 id="where-to-start"><strong>Where to start</strong></h2><p>Three steps.</p><ol><li>Read and run the<a href="https://docs.daydream.live/scope/tutorials/ltx-2-avatar?ref=blog.daydream.live"> <u>LTX 2.3 avatar tutorial</u></a>. If you have a 24 GB card, run it locally. If you don&apos;t, run it on Daydream&#x2019;s hosted/remote inference infra.</li><li>Fork the<a href="https://app.daydream.live/workflows/rafal/live-ltx-2-avatar?ref=blog.daydream.live"> <u>published workflow</u></a> in Scope. Don&apos;t rebuild the graph from scratch on day one.</li><li>Swap exactly one node for your use case. The fastest signal-to-learning swap is the reference portrait. The next is the LLM. The third could be replacing&#xA0; typed input node with a Whisper STT node.</li></ol><p>When the autoregressive A/V models land later this year, the seam closes, and the same graph picks up the upgrade with a plugin update.&#xA0;</p><p>Until then, the demo in the tutorial is already a shippable product for the verticals named above. Open the<a href="https://docs.daydream.live/scope/tutorials/ltx-2-avatar?ref=blog.daydream.live"> <u>tutorial</u></a>, point it at your own GPU or Daydream&#x2019;s remote inference, and see what falls out.</p>`,
  datePosted: `May 21, 2026`,
  img: `https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/real-time-ai-avatar-daydream-scope.jpg`,
  excerpt: `Let&apos;s talk about running a conversational avatar locally: weights on your disk, a 24 GB card doing the work, and the honest tradeoffs of this approach versus using&#xA0; a cloud API.The typical scenario is simple: You type a question, and several seconds later, a face on the screen answers you out loud. That same face was a still portrait a moment ago. The voice and the lips were generated in the same pass by a single 22-billion-parameter open-weights model. At the same - this all happened `,
  readingTime: 17
}, {
  title: `How Common Index built An Ecology of Beasts on Daydream`,
  href: `https://blog.daydream.live/how-common-index-built-an-ecology-of-beasts-on-daydream/`,
  author: `By Daydream Team`,
  content: `<p>You walk into the industrial spaces at BASE Milano during this year&apos;s Milan Design Week. Metallic structures rise from the ground. On one side, vertical screens hang from a frame, cabled together, headphones dangling between them. </p><p>On them, vertical videos play in rotation: beasts pulled from a medieval bestiary and reinterpreted by 44 different artists. On the other side, a standalone structure hosts a landscape always moving. Mountains push up, water finds new edges, and vegetation thickens or thins. None of it loops, and none of it was rendered ahead of time. It responds, in some way you can&apos;t fully read, to the people in the room and the weather outside.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/ecology-of-beasts-setup.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="720" sizes="(min-width: 720px) 720px"></figure><p>Here is where Daydream came in.</p><p>The project is called <em>An Ecology of Beasts</em>, and it was built by Common Index, a Milan-based collective working at the intersection of design, technology, and shared practice. We powered the generative layer of their interactive installation, <em>Cartography of Entangled States</em>, through hosted StreamDiffusion on the Daydream API.</p><figure class="kg-card kg-video-card kg-width-regular" data-kg-thumbnail="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/commonindex-1_thumb.jpg" data-kg-custom-thumbnail>
            <div class="kg-video-container">
                <video src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/commonindex-1.mp4" poster="https://img.spacergif.org/v1/1080x1440/0a/spacer.png" width="1080" height="1440" loop autoplay muted playsinline preload="metadata" style="background: transparent url(&apos;https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/media/2026/05/commonindex-1_thumb.jpg&apos;) 50% 50% / cover no-repeat;"></video>
                <div class="kg-video-overlay">
                    <button class="kg-video-large-play-icon" aria-label="Play video">
                        <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                            <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                        </svg>
                    </button>
                </div>
                <div class="kg-video-player-container kg-video-hide">
                    <div class="kg-video-player">
                        <button class="kg-video-play-icon" aria-label="Play video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-pause-icon kg-video-hide" aria-label="Pause video">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                                <rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/>
                            </svg>
                        </button>
                        <span class="kg-video-current-time">0:00</span>
                        <div class="kg-video-time">
                            /<span class="kg-video-duration">0:03</span>
                        </div>
                        <input type="range" class="kg-video-seek-slider" max="100" value="0">
                        <button class="kg-video-playback-rate" aria-label="Adjust playback speed">1&#xD7;</button>
                        <button class="kg-video-unmute-icon" aria-label="Unmute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/>
                            </svg>
                        </button>
                        <button class="kg-video-mute-icon kg-video-hide" aria-label="Mute">
                            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
                                <path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/>
                            </svg>
                        </button>
                        <input type="range" class="kg-video-volume-slider" max="100" value="100">
                    </div>
                </div>
            </div>
            
        </figure><h2 id="who-common-index-is">Who Common Index is</h2><p>Common Index is Carlotta Bacchini, Dorsa Rafiee, Pietro Forino, and Simone Restifo Pilato.</p><p>Their manifesto opens with a line we keep coming back to: <em>&quot;Common Index is a device for design inquiry, collective making, and digital experimentation. Not for impact, but for care.&quot;</em></p><p>If you spend any time with their work, that closing pair holds up.</p><p>The whole structure of <em>An Ecology of Beasts</em> is built around making space for other people&apos;s voices instead of resolving everything into a single curatorial statement. They typically run open calls instead of selections. They split projects into interconnected components instead of finished artworks. And what we really enjoyed - they usually write about their process in essays, not press releases. We gravitated toward them because that posture matches how we think about Daydream: infrastructure should let other people do their best work, not get in the way of it.</p><h2 id="the-two-layers-of-an-ecology-of-beasts">The two layers of An Ecology of Beasts</h2><p>The project rethinks the medieval bestiary as a system rather than a catalog. In a real bestiary, the meaning of a creature came from how it sat next to the others. Behavior, environment, and relation were the unit, not the individual figure.</p><p>Common Index translated that into two interconnected components.</p><p>The first is the <strong>Collective Bestiary</strong>: an open call where 44 participants drew a creature from a custom-designed deck of 42 medieval beasts, from Amphisbaena to Zitius, then reinterpreted it however they wanted. The only constraint was that the output had to be a vertical video. Designers, filmmakers, developers, and researchers all submitted. The works coexist on the screens in the space, rotated by a non-linear narrative: the creatures respond to inputs captured via external sensors, which allows them to assert themselves based on their own characteristics, as well as a democratic rotation system. As a consequence, there is no curation flow or theme grouping, nor any hierarchy.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/participant-works-daydream-hosted-common-index.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="1436" sizes="(min-width: 720px) 720px"></figure><p>The second is <strong>Cartography of Entangled States</strong>, the environmental counterpart. Where the bestiary gives shape to individual imaginaries, this installation gives shape to the world the beasts inhabit. The reference is to medieval <em>mappae mundi</em>: maps in which geography, theology, and mythology share the same surface, and in which places appear next to each other based on relation rather than coordinate distance.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/ecology-beasts-large-screen-daydream.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="1920" sizes="(min-width: 720px) 720px"></figure><p>Fra Mauro&apos;s <em>Mappa Mundi</em> from around 1450, the Psalter World Map from around 1265, and the Hereford <em>Mappa Mundi</em> from around 1300. Common Index translated that approach into a real-time digital landscape: zones of erosion, darkness, origin, and accumulation, all coexisting and shifting.</p><p>This is the screen running on hosted StreamDiffusion.</p><h2 id="what-the-installation-actually-does">What the installation actually does</h2><p>The Cartography is a continuously generated landscape that never settles. Inputs feed it from two directions.</p><p>From inside the room, presence detection, movement detection, and the overall sound level are all read live.</p><p>From outside, weather APIs return temperature, humidity, and precipitation data, connecting the installation to atmospheric conditions beyond the exhibition itself. Common Index wrote that these signals act as &quot;underlying forces, allowing the landscape to evolve as a composite response to presence, activity, and surrounding conditions.&quot; The landscape reacts, but visitors don&apos;t drive it deterministically. You can feel that you&apos;re inside the system without ever quite seeing your own gesture come back at you.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/ecology-daydream-sensors.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="1920" sizes="(min-width: 720px) 720px"></figure><p>The system also accumulates. Temporary states are captured and recomposed over time, forming a visual memory of the room. The installation works as both a living ecosystem and an archive, a dual function it shares with a medieval bestiary. Their dossier shows grids of these snapshots: dozens of landscape configurations stamped with date and time, each one a momentary equilibrium that already no longer exists by the time you&apos;ve read its timestamp.</p><h2 id="why-the-cloud-route-made-sense-for-this-work">Why the cloud route made sense for this work</h2><p>If you&apos;ve built anything in TouchDesigner that uses diffusion-based generation, you know the local-render rig is real engineering. You&apos;re committing a high-end GPU to the venue for the duration of the show. You&apos;re managing thermals and uptime for however many days the exhibition runs. Any creative iteration during install means you&apos;re doing it on the same hardware that&apos;s about to run the installation continuously. For <em>An Ecology of Beasts</em>, that show was seven days at Milan Design Week.</p><p>So Common Index didn&apos;t go that route. They sent their inputs from TouchDesigner to our API, we ran the diffusion model on our infrastructure, and the frames came back to TouchDesigner where their project composited them with the grid, coordinates, and overlay graphics you can see in the photos.</p><p>A few things this changes in practice. The render machine isn&apos;t on site, so the venue setup consists only of displays and sensors. Iteration during testing doesn&apos;t compete with production capacity, because there isn&apos;t a single fixed GPU to compete over. Stability during a week-long continuous run becomes our problem, not theirs. And on the creative side, the hardware ceiling that usually shapes what you can attempt with diffusion in a live context just lifts.</p><p>Common Index put it more directly than we would, in their LinkedIn post about the show:</p><blockquote>Their open-source cloud infrastructure gave us the freedom to stay fully inside the concept. The flexibility of their tools allowed us to integrate them seamlessly with almost no effort from our side. From them, we received pretty infinite computation time for testing and exhibiting the installation, but above all, we received constant support at almost every time of the day.</blockquote><p>That last line is the part we care about most. Generative systems for live exhibitions are the kind of project that might need attention at 11 pm the night before opening, and the partner you want is the one who picks up the call.</p><h2 id="how-hosted-streamdiffusion-fits-with-touchdesigner">How hosted StreamDiffusion fits with TouchDesigner</h2><p>If you&apos;ve worked with StreamDiffusion locally, the cloud path is mostly the same shape, just with the model elsewhere.</p><p>Hosted StreamDiffusion is our managed version of the StreamDiffusion pipeline, running on the Daydream API. It went live a while ago and has been quietly powering work like Common Index&apos;s since.</p><p>The model itself runs in our cloud, so if you&apos;re on a Mac or an underpowered Windows machine, StreamDiffusion finally runs on your hardware. It works great with the StreamDiffusionTD plugin built by Lyell Hintz (dotsimulate), which stays exactly where it&apos;s always been, inside TouchDesigner.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/hosted-stream-diffusion-daydream-touchdesigner.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="1216" sizes="(min-width: 720px) 720px"></figure><p>The mental model is straightforward. TouchDesigner stays in the place where you do your concept work, scene composition, sensor wiring, and output. The diffusion happens elsewhere.</p><p>You send parameters and source frames to the API, you get processed frames back, and the rest of your TD project doesn&apos;t have to know or care that there&apos;s a cloud GPU in the loop.</p><p>For Common Index, this meant their sensor-to-landscape logic stayed inside the TouchDesigner project where it belonged, and the model layer was just one more node away.</p><h2 id="what-this-points-at">What this points at</h2><p>Common Index is going to keep building. They are interested in exploring and using AI tools in unconventional ways. What does that mean? Essentially, they are exploring integration of AI in different parts of the process - going beyond only generative AI for images, and getting closer to (and involving) real-time AI in the interaction process itself.</p><p>And as for Daydream, we&apos;re going to keep building too. <a href="https://daydream.live/streamdiffusiontd?ref=blog.daydream.live" rel="noreferrer">Hosted StreamDiffusion</a> is one of the pieces of the Daydream API, and projects like this one tell us a lot about what installation artists actually need from the model layer when they&apos;re not just demoing in a studio but committing to a public, continuous run.</p><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/ecology-beasts-daydream-screen-vertical.jpg" class="kg-image" alt="How Common Index built An Ecology of Beasts on Daydream" loading="lazy" width="1280" height="1920" sizes="(min-width: 720px) 720px"></figure><p>If you&apos;re working on something similar, the integration path is well-trodden: TouchDesigner, the StreamDiffusionTD plugin from dotsimulate, and the Daydream API. You can read more about what hosted StreamDiffusion does and why it exists in <a href="https://blog.daydream.live/what-is-hosted-streamdiffusion-and-why-touchdesigner-creators-should-care/">the foundational post on the Daydream blog</a>. If you want to talk through a specific install, you can grab the API directly at <a href="https://daydream.live/streamdiffusiontd?ref=blog.daydream.live">daydream.live/streamdiffusiontd</a> or drop us a line in our Discord. We tend to be around.</p><blockquote>The bestiary was on the small screens. The cartography was on the bigger one. Somewhere in there, a model was running on our infrastructure, generating a landscape that nobody who walked through that room will ever see again.</blockquote><hr><p><em>An Ecology of Beasts is a project by </em><a href="https://www.commonindex.xyz/?ref=blog.daydream.live" rel="noreferrer"><em>Common Index</em></a><em>: Carlotta Bacchini, Dorsa Rafiee, Pietro Forino, and Simone Restifo Pilato. Exhibition design by Sole&#xB0; (Asia Trianda, Nicol&#xF2; Cozza), with engineering support from R4M Engineering. </em></p><p><em>The workshop &quot;Sensing Beyond the Human&quot; was led by Giacomo Baccega. Presented at BASE Milano, April 20-26, 2026, as part of We Will Design 2026, HELLO DARKNESS. </em></p><p><em>Generative and computational support: </em><a href="https://daydream.live/?ref=blog.daydream.live" rel="noreferrer"><em>Daydream</em></a><em>.</em></p>`,
  datePosted: `May 7, 2026`,
  img: `https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/05/daydream-hosted-streamdiffusion-common-index-case-study.jpg`,
  excerpt: `You walk into the industrial spaces at BASE Milano during this year&apos;s Milan Design Week. Metallic structures rise from the ground. On one side, vertical screens hang from a frame, cabled together, headphones dangling between them. On them, vertical videos play in rotation: beasts pulled from a medieval bestiary and reinterpreted by 44 different artists. On the other side, a standalone structure hosts a landscape always moving. Mountains push up, water finds new edges, and vegetation thicken`,
  readingTime: 8
}, {
  title: `Why Scope's Workflow Builder is a node graph`,
  href: `https://blog.daydream.live/why-scopes-workflow-builder-is-a-node-graph/`,
  author: `By Daydream Team`,
  content: `<p>There&apos;s a recurring pattern in how people hit the ceiling in Scope. Someone has a generation model running, but running the model is only the first layer of what they actually want to build. Frame interpolation stacks on top so the frame rate lands in the live-performance range. A community-built visual-effects node layers over the interpolated output. A slider gets wired through a MIDI controller so effect intensity can move under a performer&apos;s thumb during a set. The whole graph feeds a sink for output and a recorder for capture, and any node in the stack needs to be swappable without tearing down the rest.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/scopa-perform-classic-mode.jpg" class="kg-image" alt="Why Scope&apos;s Workflow Builder is a node graph" loading="lazy" width="1280" height="715" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Scope&apos;s Perform (&quot;Classic&quot;) mode running</span></figcaption></figure><p>In Scope&apos;s original interface (what we now call Perform mode), most of this was possible. It just wasn&apos;t easy. Combining capabilities meant moving between panels, reasoning about which setting affected what, and keeping the shape of the pipeline in your head the whole time. Users were describing what they wanted with their hands: this goes into that, and then that goes into this, and this one controls that. They were drawing a graph. The interface wasn&apos;t letting them.</p><p>That is the problem the Workflow Builder is solving, and it&apos;s a problem about composition rather than description. Users weren&apos;t struggling to explain their pipelines after the fact. They were struggling to build them in the first place because combining capabilities was harder than it needed to be.</p><h2 id="why-node-graphs-specifically">Why node graphs, specifically</h2><p>This isn&apos;t a novel realization. The creative-tooling ecosystem has been converging on node graphs for a long time across every domain that deals with composable dataflow: Houdini for procedural VFX, Nuke for compositing, TouchDesigner for real-time interactive media, Unreal&apos;s Blueprints for game logic, Max/MSP and Pure Data for audio, Blender&apos;s geometry and shader nodes, Substance Designer for materials, and ComfyUI for diffusion-model image generation. In every one of those domains, the node graph replaced or grew alongside more panel-driven alternatives, and in every one of those domains it won on the same argument: the graph IS the program.</p><p>That is worth slowing down on. </p><p>In a conventional UI you have two layers. There is what the system is actually doing, which is a graph of processing stages with data flowing between them. And there is how the UI asks you to reason about it, which is a stack of panels, toggles, sliders, and menu items that you have to mentally compile into the underlying graph. Every change requires translation: I want the model output to feed into the interpolator, which means I need to find the right panel, enable the right toggle, and trust that the plumbing is happening somewhere I can&apos;t see.</p><p>A node graph collapses those two layers. The thing you draw is the thing the system runs. Your mental model and the system&apos;s representation are the same object, which means the cognitive overhead of &quot;how do I tell the tool what I want&quot; goes away. You want the interpolator to sit between the model and the output, you drag an edge from one to the other. There is no step in between.</p><p>This is the argument people make when they explain why they moved to ComfyUI from Automatic1111 for anything serious. ComfyUI is often less approachable than Automatic1111 at first glance. The wins show up in what it lets you compose: every operation (text encoding, sampling, VAE decoding, conditioning) is a node, dependencies are explicit, and composition becomes mechanical rather than interpretive. You swap a sampler without rebuilding the session. You stack a second LoRA without figuring out where in the panel it lives. You export the workflow as JSON and someone else runs the same thing exactly.</p><p>Real-time AI video has the same underlying shape. It&apos;s dataflow. Frames move from a source, through a generation model, through post-processing, into a sync or a record node. Control signals move from sliders, MIDI hardware, audio analyzers, and scheduler triggers into the parameters of the nodes they modulate. It is a graph under the hood regardless of what the UI looks like. The question was whether Scope&apos;s interface was going to reflect that or keep hiding it.</p><h2 id="what-the-workflow-builder-actually-is">What the Workflow Builder actually is</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/scope-workflow-builder-real-time-ai-video.jpg" class="kg-image" alt="Why Scope&apos;s Workflow Builder is a node graph" loading="lazy" width="1280" height="692" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Scope in Workflow Builder with a simple workflow running</span></figcaption></figure><p>The Workflow Builder shipped as Scope&apos;s default mode in v0.2.0 (late March 2026). It&apos;s a canvas with more than twenty node types spanning sources, pipelines, sinks, LoRAs, subgraphs, scheduler, tempo, MIDI, prompt list, prompt blend, math, control sliders, image, record, and output. Color-coded handles encode type compatibility at a glance: cyan for numeric values, amber for text, orange for triggers, green for booleans. What you build in the canvas is the pipeline. There is no separate configuration the canvas is describing. Hit Play and the graph executes. Change a connection and the change is live.</p><p>The processing itself is the same processing that Scope has always offered. Several built-in pipelines, multiple nodes such as rife for frame interpolation, and community-built nodes published to the node registry. The Workflow Builder is adding capability, but equally important, it is making composition easy across capabilities that were already present.</p><p>A concrete example gives a sense of it. Start with a file or camera source. Wire it into LongLive for the generation stage. Stack rife downstream and you&apos;ll often move from around 13 FPS to the low 20s, which matters a lot for live work. Add a community-built VFX pack and pick one of its effects, chromatic aberration for example. Drop a slider node in, wire its output to the effect&apos;s intensity, and the slider becomes the live control surface for that parameter. Connect the final output to a sync so you can see it running, and add a record node so the output lands on disk. Six nodes, one screen.</p><p>Then change it. Swap LongLive for StreamDiffusionV2 without touching anything downstream. Add a Scheduler node that fires prompt changes at specific time points. Wire a MIDI CC handle into a Math node and then into a model parameter so a knob on your physical controller modulates a variable during a performance. Collapse your generation-plus-interpolation chain into a subgraph and reuse it across different output setups. That composition work was hard in the panel UI and is straightforward in the graph.</p><h2 id="what-it-unlocks-for-the-broader-picture">What it unlocks for the broader picture</h2><p>The composition argument matters beyond any individual pipeline. When the interface is a graph, the community artifact becomes the graph itself. A workflow built by one person exports as a&#xA0;<code>.scope-workflow.json</code>&#xA0;file, lands on daydream.live, and someone else runs the exact same composition. Tuned patterns get packaged, shared, and remixed. Hardware integrations (OSC, MIDI, DMX, Syphon, Spout, NDI) become nodes alongside everything else, rather than separate configuration surfaces (still some work to be done around that). Live performance becomes the native use case because the graph you perform with is the same graph you built with.</p><p>This is the conclusion we kept arriving at in cohort sessions, workshops, and individual conversations over the past several months. People were stuck because the act of composition was harder than it needed to be, and once they had something working they couldn&apos;t easily extend it, share it, or reconfigure it without starting from scratch. The Workflow Builder is the interface that answers that.</p><p>There&apos;s more coming. LoRA workflows are getting richer, multi-model routing is here, and even multi-input setups are being designed. The graph is where all of that will live.</p><p>If you haven&apos;t switched over from performance mode,&#xA0;<a href="https://docs.daydream.live/scope/guides/workflow-builder?ref=blog.daydream.live">the full guide is in the docs</a>. </p><p>Episode 6 of Building with Scope in Public walks through a complete pipeline build from scratch if you want to see it in motion:&#xA0;<a href="https://youtu.be/JXERXkMRkV8?ref=blog.daydream.live">https://youtu.be/JXERXkMRkV8</a>. </p>
<!--kg-card-begin: html-->
<iframe width="560" height="315" src="https://www.youtube.com/embed/JXERXkMRkV8?si=7GOkwf3N2BrGysTE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<!--kg-card-end: html-->
<p>If you&apos;ve built something worth showing someone else, export it and post it to daydream.live. The composition is the artifact now.</p>`,
  datePosted: `Apr 18, 2026`,
  img: `https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/scope-daydream-workflow-builders.jpg`,
  excerpt: `There&apos;s a recurring pattern in how people hit the ceiling in Scope. Someone has a generation model running, but running the model is only the first layer of what they actually want to build. Frame interpolation stacks on top so the frame rate lands in the live-performance range. A community-built visual-effects node layers over the interpolated output. A slider gets wired through a MIDI controller so effect intensity can move under a performer&apos;s thumb during a set. The whole graph feed`,
  readingTime: 6
}, {
  title: `What is hosted StreamDiffusion, and why TouchDesigner creators should care`,
  href: `https://blog.daydream.live/what-is-hosted-streamdiffusion-and-why-touchdesigner-creators-should-care/`,
  author: `By Daydream Team`,
  content: `<p>Hosted StreamDiffusion is Daydream&apos;s managed version of the open-source StreamDiffusion real-time diffusion pipeline, wired directly into TouchDesigner through the Daydream API. </p><p>The short version: you run the StreamDiffusionTD plugin exactly the way you always have, but the actual generation work happens on our GPUs instead of yours. You need no local NVIDIA card, Python environment, CUDA install, and there&apos;s no Windows-only lockdown. </p><p>As of April 2026, it&apos;s the path most TouchDesigner creators on macOS are using to work with StreamDiffusion at all, and the one our team at Daydream has been pushing hardest since the API went live in August 2025.</p><p>StreamDiffusionTD, the operator that made StreamDiffusion usable in a TouchDesigner network in the first place, has been the fastest way to get real-time AI video running inside TouchDesigner since late 2023. </p><p>The catch was always the same one: you needed a serious Windows machine with an NVIDIA GPU to run it at performance quality, which ruled out every TouchDesigner user on a Mac and a good chunk of creators who just didn&apos;t want to carry an RTX 4090 or 5090 to every gig.</p><p>Hosted StreamDiffusion fixes that. The same StreamDiffusionTD plugin now runs against the Daydream API&apos;s remote GPU, so you get real-time video generation inside TouchDesigner without any of the local hardware or Python setup. If you&apos;ve been watching StreamDiffusion tutorials from the sidelines because your laptop wouldn&apos;t run them, that&apos;s over now.</p><blockquote><strong>Want to skip the context and just try it?</strong>&#xA0;The&#xA0;<a href="https://daydream.live/streamdiffusiontd?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=inline-cta">hosted StreamDiffusion page on daydream.live</a>&#xA0;has the quickstart file, a free API key flow, and more relevant details. The rest of this post is for when you want to understand what actually changed and why it matters for TouchDesigner creators specifically.</blockquote><h2 id="a-quick-history-of-streamdiffusiontd"><strong>A quick history of StreamDiffusionTD</strong></h2><p>Credit where it&apos;s due.&#xA0;<a href="https://dotsimulate.com/about?ref=blog.daydream.live">Lyell Hintz</a>, known in the TouchDesigner community as&#xA0;<a href="https://x.com/dotsimulate?ref=blog.daydream.live">dotsimulate</a>, built&#xA0;<a href="https://dotsimulate.com/docs/streamdiffusiontd?ref=blog.daydream.live">StreamDiffusionTD</a>&#xA0;a few hours after the original StreamDiffusion research pipeline hit GitHub in late December 2023. His first public demo was an audio-reactive setup posted to X, and the tool has been shipping through his&#xA0;<a href="https://www.patreon.com/posts/streamdiffusiont-96323080?ref=blog.daydream.live">Patreon</a>&#xA0;ever since. It&apos;s now on version 0.3.1 with SDXL-Turbo, multi-ControlNet, IP Adapter with FaceID, and a long list of other creative workflows that the community has helped shape through fixes and feature requests.</p><p>The reason it caught on is that Lyell approached the project like someone who actually uses TouchDesigner to make things. In a&#xA0;<a href="https://blog.daydream.live/builder-story-dotsimulate-x-daydream/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=builder-story-narrative">conversation with the Daydream team</a>&#xA0;he put it simply: </p><blockquote>&quot;TouchDesigner is the only place this could be controlled from. It can hook into everything else.&quot; </blockquote><p>The operator exposes the parameters that matter for live work (prompt, seed, ControlNet weights) instead of hiding them behind a black box, so you can drive generation from audio, sensors, cameras, MIDI, OSC, or whatever else you already have wired up.</p><h2 id="running-it-locally-has-never-been-easy"><strong>Running it locally has never been easy</strong></h2><p>The tradeoff Lyell couldn&apos;t fix from inside TouchDesigner was the hardware requirement. The local version of StreamDiffusionTD needs Windows 10 or 11, an NVIDIA GPU with CUDA support, at least 6 GB of VRAM (24 GB recommended for the full feature set), Python 3.10 or 3.11, and a matching CUDA toolchain. </p><p>Apple Silicon Macs are out entirely because the upstream StreamDiffusion pipeline has no MPS path, so Mac TouchDesigner users have been watching the tutorials and reading the forum threads without being able to run the thing on their own hardware.</p><p>Even when you do have the right machine, the performance curve is steep.&#xA0;<a href="https://interactiveimmersive.io/blog/artificial-intelligence/using-streamdiffusion-with-touchdesigner/?ref=blog.daydream.live">The Interactive &amp; Immersive HQ</a>&#xA0;benchmarked StreamDiffusionTD at 55 to 60 frames per second on an RTX 4090, dropping to around 16 fps on a 3060 12 GB, and falling to roughly 4 fps above 1024&#xD7;1024 (closer to a slideshow than live animation). A&#xA0;<a href="https://derivative.ca/tags/streamdiffusion-td?ref=blog.daydream.live">community pricing anchor on Derivative</a>&#xA0;put the real number on what it actually takes to do pro work with the local setup:</p><blockquote> &quot;\$3,000+ RTX 4090/5090 GPU workstation.&quot; </blockquote><p>For a touring VJ or an installation artist quoting a commission, that&apos;s a line item you can&apos;t always justify, and it&apos;s one you definitely can&apos;t drag into the green room at a festival.</p><h2 id="what-hosted-streamdiffusion-actually-changes"><strong>What hosted StreamDiffusion actually changes</strong></h2><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/streamdifussiontd-hosted-daydream.jpg" class="kg-image" alt="What is hosted StreamDiffusion, and why TouchDesigner creators should care" loading="lazy" width="1000" height="980" sizes="(min-width: 720px) 720px"></figure><p>Hosted StreamDiffusion moves all of that inference to the Daydream API. The plugin stays where it&apos;s always been, inside TouchDesigner, on your canvas. The actual diffusion work just happens on Daydream&apos;s GPUs instead of yours. You drop your API key into the operator, hit Start Stream, and you&apos;re generating. The whole setup, as Lyell put it in that same conversation,&#xA0;<a href="https://blog.daydream.live/builder-story-dotsimulate-x-daydream/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=builder-story-setup">takes less than a minute</a>.</p><p>The list of things you stop needing is the interesting part. You don&apos;t need Windows. You don&apos;t need an NVIDIA GPU. You don&apos;t need a Python environment or a matching CUDA toolchain. You don&apos;t need to download model weights, and you don&apos;t need to keep them up to date. What you do need is a free API key from the&#xA0;<a href="https://docs.daydream.live/api/introduction?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=api-introduction">Daydream Builder Dashboard</a>&#xA0;and a machine that can run TouchDesigner and reach the internet. On top of that, the hosted path enables features that are hard or expensive to run locally (multi-ControlNet, IP Adapter with FaceID, TensorRT acceleration), and every parameter stays adjustable in real time while your stream is live.</p><p>The biggest shift is cultural more than it is technical. For the first time, the Mac TouchDesigner community isn&apos;t shut out of StreamDiffusion work. If you&apos;ve been building generative systems on an M-series MacBook Pro, you can pipe them through hosted diffusion and back into your network the same way a Windows creator with a 4090 or 5090 in the tower would, without changing operating systems or buying new hardware. </p><p>We&apos;ve felt that shift directly on our end: the questions we used to get started with &quot;what GPU do I need to buy,&quot; and the shift to &quot;what should I prompt.&quot;</p><h2 id="what-this-looks-like-in-practice"><strong>What this looks like in practice</strong></h2><figure class="kg-card kg-image-card"><img src="https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/streamdifussiontd-daydream.jpg" class="kg-image" alt="What is hosted StreamDiffusion, and why TouchDesigner creators should care" loading="lazy" width="1920" height="990" sizes="(min-width: 720px) 720px"></figure><p><strong>If you&apos;re a VJ cutting live visuals</strong>, you can drive the StreamDiffusion pipeline from whatever audio-reactive logic you already have in TouchDesigner (CHOPs, particle systems, camera feeds, MIDI from the DJ booth) and have the AI output appear at frame rates that actually sit inside a live set. No pre-rendering, no offline passes, just real-time generation sitting next to your other sources in the mix.</p><p><strong>If you&apos;re an installation artist</strong>, the interesting bit is that the inference is no longer tied to a machine on site. A small Mac running TouchDesigner and calling the Daydream API is a very different shipping and power footprint than a workstation with a 4090 or 5090 in it, and a lot easier to keep stable across a multi-week exhibit.</p><p><strong>If you&apos;re doing projection mapping or LED work</strong>, the hosted path frees up your local GPU for the things TouchDesigner is already good at (shaders, warping, geometry) while the diffusion happens somewhere else. You stop having to choose between &quot;the mapping runs smoothly&quot; and &quot;the AI runs smoothly.&quot;</p><p><strong>If you&apos;re on macOS</strong>, this is the first time StreamDiffusionTD has been available to you at all, and the setup isn&apos;t a workaround. It runs the same way it would on any other machine that can call the Daydream API, with the same features and the same control surface.</p><h2 id="where-to-start"><strong>Where to start</strong></h2><p>The fastest way in, and the one we&apos;ve been recommending to pretty much every TouchDesigner creator who asks, is <a href="https://app.daydream.live/creators/as.ws__/daydream-sdxl-easy-quickstart-file?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=quickstart-file">Daydream SDXL Easy Quickstart File</a>. It&apos;s a ready-to-use .tox that wires StreamDiffusionTD to your Daydream API key with a click-and-drag install, and it gives you real-time prompt editing, multiple ControlNets, IP-Adapter image prompting from folders, and input switching for webcam, video files, and TouchDesigner network sources out of the box. It needs TouchDesigner 2023 or newer on Mac, and 2025 or newer on Windows for the SDXL Turbo path.</p><p>If you want the full story, the&#xA0;<a href="https://daydream.live/streamdiffusiontd?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=landing-page">hosted StreamDiffusion landing page on daydream.live</a>&#xA0;walks through the integration, the model features, and the FAQ.</p><p>Lyell&apos;s own&#xA0;<a href="https://dotsimulate.com/docs/streamdiffusiontd?ref=blog.daydream.live">StreamDiffusionTD documentation</a>&#xA0;is where to go for plugin details and release notes. The&#xA0;<a href="https://blog.daydream.live/builder-story-dotsimulate-x-daydream/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=builder-story-further-reading">Daydream builder story on dotsimulate</a>&#xA0;is worth reading for the origin narrative in his own voice, and if you want a primer on what StreamDiffusion actually does under the hood, our&#xA0;<a href="https://blog.daydream.live/real-time-generative-art-a-guide-to-streamdiffusion-and-touchdesigner/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=streamdiffusion-guide">earlier guide to StreamDiffusion and TouchDesigner</a>&#xA0;covers the technical layer.</p><h2 id="where-this-fits"><strong>Where this fits</strong></h2><p>Hosted StreamDiffusion for TouchDesigner is one of a handful of paths Daydream already offers creatives who want real-time AI video to live inside the tools they already work in.</p><p>The other main one is&#xA0;<a href="https://daydream.live/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=scope">Scope</a>, our local-first desktop app for building real-time video and world-model workflows. Scope is free and open source, with the full source on&#xA0;<a href="https://github.com/daydreamlive/scope?ref=blog.daydream.live">GitHub</a>.</p><p>Where Scope earns its place is in how it talks to the rest of your rig. It ships with a node-based editor and native integrations for&#xA0;<a href="https://blog.daydream.live/spout-and-syphon-in-scope-zero-latency-on-your-machine/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=spout-syphon-post">Spout and Syphon</a>,&#xA0;<a href="https://blog.daydream.live/ndi-in-scope-your-real-time-ai-video-across-the-network-and-beyond/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=ndi-post">NDI</a>,&#xA0;<a href="https://blog.daydream.live/osc-scope-precision-real-time-ai-video-control-network/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=osc-post">OSC</a>,&#xA0;<a href="https://blog.daydream.live/midi-in-scope-hands-on-real-time-ai-video-control/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=midi-post">MIDI</a>, and&#xA0;<a href="https://blog.daydream.live/dmx-in-scope-from-real-time-ai-video-pixels-to-photons/?utm_source=daydream&amp;utm_medium=web&amp;utm_campaign=streamdiffusiontd-blog&amp;utm_content=dmx-post">DMX</a>. Those are the same protocols that already run your show control, your lighting rig, and your audio network, which means Scope can sit inside a live production pipeline without a bunch of glue code.</p><p>Scope is what you reach for when you want a purpose-built environment that runs your show control alongside the generation. StreamDiffusionTD on the Daydream API is what you reach for when you want StreamDiffusion sitting inside the TouchDesigner network you&apos;ve already wired up. Both share the same underlying idea: put real-time video generation in TouchDesigner, in Scope, or wherever else you work, within reach of working creatives without forcing them to change their toolchain or pour the cost of a touring rig into an RTX 4090 or 5090 workstation.</p><p>Between them, the audience for real-time diffusion in live visual work stops being &quot;people with a top-end NVIDIA GPU&quot; and starts being anyone with a laptop and a project to ship.</p><h2 id="common-questions"><strong>Common questions</strong></h2><p><strong>Do I still need the StreamDiffusionTD plugin to use hosted StreamDiffusion?</strong></p><p>Yes. The plugin is still the interface inside TouchDesigner. Hosted StreamDiffusion moves the diffusion inference to the Daydream API, but you still install dotsimulate&apos;s StreamDiffusionTD operator to drive prompts, parameters, inputs, and outputs from your network. The plugin and the hosted backend are complementary, not alternatives.</p><p><strong>Does hosted StreamDiffusion work on a Mac?</strong></p><p>Yes, and this is the main new capability. Any Mac that can run TouchDesigner will run StreamDiffusionTD against the Daydream API. Local StreamDiffusion has never been possible on macOS because the upstream pipeline has no Apple Metal path. Hosted changes that entirely, since the inference runs on our GPUs in the cloud rather than your machine. If you&apos;re on Apple Silicon, this is the first time you&apos;ve had a real way to run StreamDiffusion in TouchDesigner.</p><p><strong>What TouchDesigner version do I need?</strong></p><p>Andrew Sun&apos;s Daydream SDXL Easy Quickstart File works with TouchDesigner 2023 or newer on Mac and 2025 or newer on Windows. If you&apos;re running your own StreamDiffusionTD install without the quickstart file, check&#xA0;<a href="https://dotsimulate.com/docs/streamdiffusiontd?ref=blog.daydream.live">dotsimulate&apos;s documentation</a>&#xA0;for the version matrix and release notes.</p><p><strong>How is hosted StreamDiffusion different from Daydream Scope?</strong></p><p>Scope is an open-source desktop app with a node-based editor and native integrations for Spout, Syphon, NDI, OSC, MIDI, and DMX, built for creators who want a dedicated real-time AI video environment that talks directly to their show control. Hosted StreamDiffusion in TouchDesigner is the TouchDesigner-native entry point into the same Daydream API infrastructure. You&apos;d pick Scope if you want the purpose-built environment. You&apos;d pick hosted StreamDiffusion if you already live inside TouchDesigner and want StreamDiffusion to sit there too.</p><p>If you&apos;re building something on either path, we&apos;d love to see it. Tag&#xA0;<a href="https://x.com/daydreamliveai?ref=blog.daydream.live">@daydreamliveai</a>&#xA0;and come hang out with the rest of the community in our&#xA0;<a href="https://discord.gg/pF2Akym5bV?ref=blog.daydream.live">Discord</a>.</p>`,
  datePosted: `Apr 11, 2026`,
  img: `https://storage.ghost.io/c/ee/84/ee847f83-2527-4049-945e-511415a6b18b/content/images/2026/04/hosted-streamdiffusion-touchdesigner.jpg`,
  excerpt: `Hosted StreamDiffusion is Daydream&apos;s managed version of the open-source StreamDiffusion real-time diffusion pipeline, wired directly into TouchDesigner through the Daydream API. The short version: you run the StreamDiffusionTD plugin exactly the way you always have, but the actual generation work happens on our GPUs instead of yours. You need no local NVIDIA card, Python environment, CUDA install, and there&apos;s no Windows-only lockdown. As of April 2026, it&apos;s the path most TouchDesi`,
  readingTime: 9
}];

export const youtubeData = [{
  title: 'Scope workshop',
  href: 'https://www.youtube.com/watch?v=ggA2N4tInD0',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Mar 20, 2026',
  duration: 'PT49M32S',
  thumbnailUrl: 'https://i.ytimg.com/vi/ggA2N4tInD0/hqdefault.jpg'
}, {
  title: 'Encuentros de Tecnólogos Creativos de Madrid Daydream x MappingOn',
  href: 'https://www.youtube.com/watch?v=yZHcay_uodc',
  author: 'By Daydream AI',
  content: 'Visuales Generativos en Tiempo Real: TouchDesigner × StreamDiffusion × Daydream  En este workshop de 2 horas exploramos cómo crear visuales generativos en tiempo real combinando TouchDesigner, StreamDiffusion y Daydream. Recorrimos el flujo completo desde la entrada hasta la salida, procesando con IA generativa en vivo, desde configuración básica hasta un Live VJ Show con videomapping.   ¿Qué es Daydream? Daydream es una plataforma de video IA en tiempo real que genera y transforma contenido vis...',
  publishedDate: 'Mar 4, 2026',
  duration: 'PT2H56M16S',
  thumbnailUrl: 'https://i.ytimg.com/vi/yZHcay_uodc/hqdefault.jpg'
}, {
  title: 'Scope Workshop: AI Video Program Cohort 2 Finalist Showcase',
  href: 'https://www.youtube.com/watch?v=PyCTVICiueY',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Feb 27, 2026',
  duration: 'PT1H18S',
  thumbnailUrl: 'https://i.ytimg.com/vi/PyCTVICiueY/hqdefault.jpg'
}, {
  title: '2.0 Interactive AI Video Program - Demo Day',
  href: 'https://www.youtube.com/watch?v=Um1g1TB2d4A',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Feb 26, 2026',
  duration: 'PT34M43S',
  thumbnailUrl: 'https://i.ytimg.com/vi/Um1g1TB2d4A/hqdefault.jpg'
}, {
  title: 'Daydream Scope Workshop',
  href: 'https://www.youtube.com/watch?v=b771i2SFzjQ',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Feb 13, 2026',
  duration: 'PT1H2M18S',
  thumbnailUrl: 'https://i.ytimg.com/vi/b771i2SFzjQ/hqdefault.jpg'
}, {
  title: 'Vibe-code a Scope plugin with Claude Code',
  href: 'https://www.youtube.com/watch?v=pUqF010u-zQ',
  author: 'By Daydream AI',
  content: 'Learn how to build a complete real-time video effects plugin for Daydream Scope using AI-assisted development with Claude Code - no Python or PyTorch experience required.  We walk you through two different approaches: - Context7 MCP - an \"explore and build\" method where Claude pulls live documentation and figures out the plugin architecture on its own - Plugin Skill - an \"answer questions and ship\" method using a purpose-built skill with the full plugin reference baked in  By the end, you\'ll hav...',
  publishedDate: 'Feb 11, 2026',
  duration: 'PT21M57S',
  thumbnailUrl: 'https://i.ytimg.com/vi/pUqF010u-zQ/hqdefault.jpg'
}, {
  title: 'Scope Features Walkthrough',
  href: 'https://www.youtube.com/watch?v=Ls2OGg8soNU',
  author: 'By Daydream AI',
  content: 'This is a Scope features and a quick start video showcased in our docs....',
  publishedDate: 'Feb 11, 2026',
  duration: 'PT10M54S',
  thumbnailUrl: 'https://i.ytimg.com/vi/Ls2OGg8soNU/hqdefault.jpg'
}, {
  title: 'Building Plugins for Scope',
  href: 'https://www.youtube.com/watch?v=rZjRahfJHiY',
  author: 'By Daydream AI',
  content: 'This video shows you how to build a VFX plugin for Scope, step by step....',
  publishedDate: 'Feb 11, 2026',
  duration: 'PT13M50S',
  thumbnailUrl: 'https://i.ytimg.com/vi/rZjRahfJHiY/hqdefault.jpg'
}, {
  title: 'Realtime Creator Lounge #2',
  href: 'https://www.youtube.com/watch?v=2P0MDY-G5Qo',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Jan 28, 2026',
  duration: 'PT1H6M50S',
  thumbnailUrl: 'https://i.ytimg.com/vi/2P0MDY-G5Qo/hqdefault.jpg'
}, {
  title: 'How to connect TouchDesigner to Scope via NDI',
  href: 'https://www.youtube.com/watch?v=YmJSqcoWz-o',
  author: 'By Daydream AI',
  content: 'This video is to help TouchDesigner users to set up their first Scope project using TouchDesigner. After this video, any user will be able to use any TouchDesigner visual as an input for Scope via NDI.  Project File: https://app.daydream.live/creators/as.ws__/touchdesigner-scope-tutorial-first-connection?utm_source=youtube&utm_medium=social&utm_campaign=scope-touchdesigner NDI Tools: https://ndi.video/tools/ Depth Map Visual: https://civitai.com/models/972736/3d-motion-depth-map-18-24-30-fps Lon...',
  publishedDate: 'Jan 28, 2026',
  duration: 'PT13M35S',
  thumbnailUrl: 'https://i.ytimg.com/vi/YmJSqcoWz-o/hqdefault.jpg'
}, {
  title: 'TouchDesigner x Scope EP 03: Depth Maps and VACE',
  href: 'https://www.youtube.com/watch?v=v53458eIqeY',
  author: 'By Daydream AI',
  content: 'In this third episode of TouchDesigner × Scope, I use the Depth TOP in TouchDesigner to create a depth map to activate VACE to better control my output visual.  Project files and  assets can be found here:  https://app.daydream.live/creators/as.ws__/touchdesigner-x-scope-ep-03-depth-maps-and-vace?utm_source=youtube&utm_medium=social&utm_campaign=scope-touchdesigner  More episodes coming soon as we dive deeper into Scope\'s video models, prompting workflows, and real time creative control.  1:03 -...',
  publishedDate: 'Jan 28, 2026',
  duration: 'PT7M51S',
  thumbnailUrl: 'https://i.ytimg.com/vi/v53458eIqeY/hqdefault.jpg'
}, {
  title: 'TouchDesigner ×  Scope EP 02: Krea Model and Denoising',
  href: 'https://www.youtube.com/watch?v=NVumbOMf-os',
  author: 'By Daydream AI',
  content: 'In this second episode of TouchDesigner × Scope, I use the same visual input as the previous video to understand model differences and make sense of denoising parameters.  Project files and timeline assets can be found here:  https://app.daydream.live/creators/as.ws__/touchdesigner-x-scope-first-connection?utm_source=youtube&utm_medium=social&utm_campaign=scope-touchdesigner  More episodes coming soon as we dive deeper into Scope\'s video models, prompting workflows, and real time creative contro...',
  publishedDate: 'Jan 24, 2026',
  duration: 'PT6M46S',
  thumbnailUrl: 'https://i.ytimg.com/vi/NVumbOMf-os/hqdefault.jpg'
}, {
  title: 'TouchDesigner ×  Scope EP 01: First Output',
  href: 'https://www.youtube.com/watch?v=K_tX255qSkw',
  author: 'By Daydream AI',
  content: 'In this first episode of TouchDesigner × Scope, I explore using TouchDesigner as a live input source for Scope running the LongLive Model.   Project files and timeline assets can be found here:  https://app.daydream.live/creators/as.ws__/touchdesigner-x-scope-first-connection?utm_source=youtube&utm_medium=social&utm_campaign=scope-touchdesigner  More episodes coming soon as we dive deeper into Scope\'s video models, prompting workflows, and real time creative control.  0:00 - Introduction & Overv...',
  publishedDate: 'Jan 24, 2026',
  duration: 'PT8M29S',
  thumbnailUrl: 'https://i.ytimg.com/vi/K_tX255qSkw/hqdefault.jpg'
}, {
  title: 'Building with Scope in Public #5: Scope Plugins + Overworld\'s World Model',
  href: 'https://www.youtube.com/watch?v=cW3ZGxZNX0g',
  author: 'By Daydream AI',
  content: 'Scope now supports plugins - and we\'re using it to explore AI-generated worlds you can actually walk around in.  In this episode, I walk you through installing the scope-overworld plugin, which brings Overworld\'s Waypoint-1 world model into Scope. Unlike regular real-time video generation, world models let you navigate 3D environments using WASD and mouse controls. It\'s like stepping inside an AI-generated video game.  We go from zero to walking on Mars, a cozy Christmas scene, and more - all ru...',
  publishedDate: 'Jan 23, 2026',
  duration: 'PT11M10S',
  thumbnailUrl: 'https://i.ytimg.com/vi/cW3ZGxZNX0g/hqdefault.jpg'
}, {
  title: 'Scope Workshop - Plugins Preview',
  href: 'https://www.youtube.com/watch?v=BYFbb6erRfw',
  author: 'By Daydream AI',
  content: 'Scope Workshop - Plugins Preview  Scope is getting a plugins feature - opening the door for extensibility and new capabilities beyond our core pipelines. We will:  1) Demo the OverWorld plugin, which brings a world model to Scope with interactive controls and real-time exploration.  2) Show you how it works, talk through the plugins architecture, and share how you can get started building your own.  3) Touch on controllability, what you can build around this, and where we\'re headed.   If you\'ve ...',
  publishedDate: 'Jan 23, 2026',
  duration: 'PT1H7M19S',
  thumbnailUrl: 'https://i.ytimg.com/vi/BYFbb6erRfw/hqdefault.jpg'
}, {
  title: 'Daydream Interactive AI Video Program  Demo Day',
  href: 'https://www.youtube.com/watch?v=pC-S9ALjB38',
  author: 'By Daydream AI',
  content: 'Join us for the Interactive AI Video Program Demo Day, where we\'ll showcase projects built during Daydream\'s Interactive AI Video Program.  ​Participants worked across two tracks: Daydream Scope Track and TouchDesigner / StreamDiffusionTD Track where they explored real-time, interactive AI video workflows. From these tracks, the top 3 projects will be selected and their creators will present their work live during Demo Day.  ​The event features: Live demos from the top three projects across both...',
  publishedDate: 'Jan 17, 2026',
  duration: 'PT43M30S',
  thumbnailUrl: 'https://i.ytimg.com/vi/pC-S9ALjB38/hqdefault.jpg'
}, {
  title: 'Scope Workshop ft. the Scope Track Winners',
  href: 'https://www.youtube.com/watch?v=NhQSLMC6hvk',
  author: 'By Daydream AI',
  content: 'This week\'s Scope Workshop ft. the Scope Track winners  We\'re running a special Scope Workshop with the top three projects from the Scope Track of the Interactive AI Video Program.  You\'ll get to see how these creators pushed Scope to build real-time, interactive AI experiences, and hear directly from them about their workflows, challenges, and breakthroughs.  Featuring: 🥇 Lars Hurrelbrink: Scope V2V Integration for Unity A live system that streams game footage, depth, and character data into S...',
  publishedDate: 'Jan 16, 2026',
  duration: 'PT1H5M17S',
  thumbnailUrl: 'https://i.ytimg.com/vi/NhQSLMC6hvk/hqdefault.jpg'
}, {
  title: 'Realtime Creator Longe',
  href: 'https://www.youtube.com/watch?v=i1D7nVCtjsU',
  author: 'By Daydream AI',
  content: 'Join us today in the Daydream Discord with the StreamDiffusionTD Track finalists from the AI Video Program.  Demo 1: Juan Franco Phone-controlled generative L-systems built with TouchDesigner + StreamDiffusion. Link: https://app.daydream.live/s/sh/creators/juanelfranco/becoming  Demo 2: Emil Petro Feedback-driven AI architecture where Brutalist structures evolve into living systems. Link: https://app.daydream.live/s/sh/creators/emilpetro/concrete  Learn more about Daydream:   X: @daydreamLiveAI ...',
  publishedDate: 'Jan 15, 2026',
  duration: 'PT1H12M22S',
  thumbnailUrl: 'https://i.ytimg.com/vi/i1D7nVCtjsU/hqdefault.jpg'
}, {
  title: 'Daydream Interactive AI Video Program: Demo Day',
  href: 'https://www.youtube.com/watch?v=0mjO9gBXCKI',
  author: 'By Daydream AI',
  content: 'Join us for the Interactive AI Video Program Demo Day, where we\'ll showcase projects built during Daydream\'s Interactive AI Video Program.  ​Participants worked across two tracks: Daydream Scope Track and TouchDesigner / StreamDiffusionTD Track where they explored real-time, interactive AI video workflows. From these tracks, the top 3 projects will be selected and their creators will present their work live during Demo Day.  ​The event will feature: - Live demos from the top three projects acros...',
  publishedDate: 'Jan 14, 2026',
  duration: 'PT45M32S',
  thumbnailUrl: 'https://i.ytimg.com/vi/0mjO9gBXCKI/hqdefault.jpg'
}, {
  title: 'Scope Workshop - Jan 7, 2026',
  href: 'https://www.youtube.com/watch?v=r_WrZAGco2o',
  author: 'By Daydream AI',
  content: 'Join us for this week\'s Scope workshop, where the Daydream team will showcase recent updates and expanded functionality we\'ve added to Scope.  What we\'ll cover: - New Scope improvements and expanded capabilities, including VACE integration for things like reference image support and more, - Demos and insights from our team members, - What\'s ahead on our roadmap,  As always, do come with your questions! We\'ll walk through what we\'ve built, show it in action, and discuss where Scope is heading nex...',
  publishedDate: 'Jan 10, 2026',
  duration: 'PT1H4M3S',
  thumbnailUrl: 'https://i.ytimg.com/vi/r_WrZAGco2o/hqdefault.jpg'
}, {
  title: 'Learning with Scope in Public #4: Scope Desktop App and Community Hub',
  href: 'https://www.youtube.com/watch?v=M0vtuNSGphc',
  author: 'By Daydream AI',
  content: 'In this episode of Building in Public with Scope, I\'m sharing why Scope suddenly feels different - and it\'s not just one feature.  Scope now has an early Windows desktop app, which means that if you have a powerful enough GPU (think RTX 4090 / 5090), you can run Scope locally, in real time, without touching the CLI or spinning up external infrastructure.  This fundamentally changes the experimentation loop.  In this video, I:  - Walk through what changes when Scope runs as a desktop app - Use th...',
  publishedDate: 'Dec 20, 2025',
  duration: 'PT8M59S',
  thumbnailUrl: 'https://i.ytimg.com/vi/M0vtuNSGphc/hqdefault.jpg'
}, {
  title: 'Scope Workshop: Building Interactive Games with Scope',
  href: 'https://www.youtube.com/watch?v=D-iUKOhPpPo',
  author: 'By Daydream AI',
  content: 'This Scope Workshop covers the latest updates to Scope, including new LoRA support, upcoming improvements, creative user scenarios, and how Scope integrates with tools like Unity and Unreal. We also introduce the Scope Hacker Program and answer questions from the community.  In this session, guest speaker Cristian (https://www.ilumineworks.com/) demonstrates how he built a playable Choose Your Own Adventure style game using Scope and Unity. He walks through the full workflow, explains how large ...',
  publishedDate: 'Dec 19, 2025',
  duration: 'PT1H3M39S',
  thumbnailUrl: 'https://i.ytimg.com/vi/D-iUKOhPpPo/hqdefault.jpg'
}, {
  title: 'MotionStream Workshop with Joonghuk',
  href: 'https://www.youtube.com/watch?v=03cZLjW_iiA',
  author: 'By Daydream AI',
  content: '​Joonghyuk Shin is one of the creators of MotionStream, the world\'s first real time video AI model controllable by motion, enabling real-time image to video that\'s highly controllable.  ​In this workshop, Joonghyuk will walk us through the technical design behind this pipeline, demonstrate diverse practical downstream applications, and discuss future directions for interactive content creation.  ​🌟 About Daydream: Daydream is a community hub for real time video world models. You can explore cre...',
  publishedDate: 'Dec 8, 2025',
  duration: 'PT1H4M20S',
  thumbnailUrl: 'https://i.ytimg.com/vi/03cZLjW_iiA/hqdefault.jpg'
}, {
  title: 'Learning with Scope in Public #3: Transform Any Video with LoRA Adapters',
  href: 'https://www.youtube.com/watch?v=qeHNE5BMQPE',
  author: 'By Daydream AI',
  content: 'What if you could turn a photorealistic video into a Pixar-style cartoon with one small file?  In this episode, we explore LoRA adapters in Scope - small add-on files that teach the AI new visual styles without retraining or changing the entire model.  I\'ll show you how to download a LoRA, where to find good ones, and the one thing you absolutely need to remember: the trigger keyword. Without it, your LoRA won\'t do anything.  We\'ll run the same prompt twice - once photorealistic, once Pixar styl...',
  publishedDate: 'Dec 6, 2025',
  duration: 'PT7M37S',
  thumbnailUrl: 'https://i.ytimg.com/vi/qeHNE5BMQPE/hqdefault.jpg'
}, {
  title: 'MotionStream Workshop w/ Joonghuk',
  href: 'https://www.youtube.com/watch?v=57JtK5QgGLU',
  author: 'By Daydream AI',
  content: '...',
  publishedDate: 'Dec 5, 2025',
  duration: 'PT1H11M27S',
  thumbnailUrl: 'https://i.ytimg.com/vi/57JtK5QgGLU/hqdefault.jpg'
}, {
  title: 'Learning with Scope in Public #2: Can AI Upscalers Fix Low-Res Video?',
  href: 'https://www.youtube.com/watch?v=VRY8CP3AzyI',
  author: 'By Daydream AI',
  content: 'Low resolution = smooth real-time generation. But can you fix it in post-production? In this episode, we put AI upscalers to the test: Video2X (free & open source) vs Topaz Video AI (commercial). We generate a cozy Thanksgiving scene in Scope using Krea Realtime, then run it through both upscalers and compare the results side-by-side.  🚀 TRY SCOPE YOURSELF (free & open source): https://github.com/daydreamlive/scope  Key Findings: - AI upscalers genuinely work - visible quality improvement - The...',
  publishedDate: 'Nov 29, 2025',
  duration: 'PT9M43S',
  thumbnailUrl: 'https://i.ytimg.com/vi/VRY8CP3AzyI/hqdefault.jpg'
}, {
  title: 'Building with Scope in Public #1: What Kills FPS in Real-Time AI Video?',
  href: 'https://www.youtube.com/watch?v=ZRI6p1iLikM',
  author: 'By Daydream AI',
  content: 'What happens when you push real-time AI video generation to its limits? In this first episode, we test how resolution and denoising steps affect video quality and frame rate across three models: StreamDiffusion V2, LongLive, and Krea Realtime.  Key Findings:  - Doubling resolution = 85% FPS drop on LongLive - Fewer denoising steps = higher FPS but lower quality - Each model has different performance sweet spots  Try Scope yourself and join our community: ⭐ GitHub: https://github.com/daydreamlive...',
  publishedDate: 'Nov 22, 2025',
  duration: 'PT16M4S',
  thumbnailUrl: 'https://i.ytimg.com/vi/ZRI6p1iLikM/hqdefault.jpg'
}, {
  title: 'LoRAs + Real-Time Video Models: Scope v0.1.0a7 Walkthrough',
  href: 'https://www.youtube.com/watch?v=OygciNFzrVo',
  author: 'By Daydream AI',
  content: 'A walkthrough of using LoRAs in Scope v0.1.0a7.  Release: https://github.com/daydreamlive/scope/releases/tag/v0.1.0a7  Additional resources:  - Demo: https://x.com/YondonFu/status/1991948288736596415 - Install instructions: https://github.com/daydreamlive/scope?tab=readme-ov-file#install - First generation guide: https://github.com/daydreamlive/scope?tab=readme-ov-file#first-generation - LoRA guide: https://github.com/daydreamlive/scope/blob/main/docs/lora.md...',
  publishedDate: 'Nov 22, 2025',
  duration: 'PT5M4S',
  thumbnailUrl: 'https://i.ytimg.com/vi/OygciNFzrVo/hqdefault.jpg'
}, {
  title: 'StreamDiffusion in TouchDesigner Workshop',
  href: 'https://www.youtube.com/watch?v=iLjksLHr2NI',
  author: 'By Daydream AI',
  content: 'Learn how to use Daydream\'s remote Stream Diffusion service to run advanced AI workflows without needing a \$3,000+ RTX 4090/5090 GPU workstation.  Below you will find all relevant links:  https://www.patreon.com/posts/streamdiffusiont-142969263 https://app.daydream.live/creators/daydream https://app.daydream.live/dashboard/api-keys  Learn more about Daydream:   X: @daydreamLiveAI  Website:  https://daydream.live/  Discord: https://discord.com/invite/daydreamlive...',
  publishedDate: 'Nov 13, 2025',
  duration: 'PT48M45S',
  thumbnailUrl: 'https://i.ytimg.com/vi/iLjksLHr2NI/hqdefault.jpg'
}, {
  title: 'Workshop: SDXL IP ADAPTERS STREAMDIFFUSIONTD',
  href: 'https://www.youtube.com/watch?v=5Lbx3lm0yMY',
  author: 'By Daydream AI',
  content: 'Catch the walkthrough of Dotsimulate\'s & Andrew\'s latest update to StreamDiffusionTD, now featuring native SDXL support. The session will show how to get started with the new component, connect to local or hosted inference, and explore real-time image and video generation.  ​For those without high-end GPUs, the update integrates Daydream\'s server-hosted SDXL service, making it easy to experiment and build directly from the cloud. We\'ll look at how to prompt with reference images, tune parameters...',
  publishedDate: 'Nov 8, 2025',
  duration: 'PT1H7M26S',
  thumbnailUrl: 'https://i.ytimg.com/vi/5Lbx3lm0yMY/hqdefault.jpg'
}, {
  title: 'SDXL IP ADAPTERS STREAMDIFFUSIONTD Release',
  href: 'https://www.youtube.com/watch?v=ZLKunWNZymY',
  author: 'By Daydream AI',
  content: 'Join us for a walkthrough of Dotsimulate\'s latest update to StreamDiffusionTD, now featuring native SDXL support. The session will show how to get started with the new component, connect to local or hosted inference, and explore real-time image and video generation.  ​For those without high-end GPUs, the update integrates Daydream\'s server-hosted SDXL service, making it easy to experiment and build directly from the cloud. We\'ll look at how to prompt with reference images, tune parameters for co...',
  publishedDate: 'Nov 7, 2025',
  duration: 'PT1H7M25S',
  thumbnailUrl: 'https://i.ytimg.com/vi/ZLKunWNZymY/hqdefault.jpg'
}, {
  title: 'How to Run Daydream Scope in the Cloud with RunPod | Complete Setup Guide',
  href: 'https://www.youtube.com/watch?v=XBFtgSQg7X4',
  author: 'By Daydream AI',
  content: 'Learn how to get started with Daydream Scope using RunPod cloud - perfect if you don\'t have a powerful GPU locally. This step-by-step tutorial covers everything from initial setup to running your first real-time AI video generation pipeline.  What you\'ll learn: Setting up Daydream Scope on RunPod.io Selecting the right GPU for your pipelines Configuring HuggingFace tokens for cloud environments Running Stream Diffusion and other pipelines Managing your cloud resources efficiently  Important link...',
  publishedDate: 'Oct 31, 2025',
  duration: 'PT4M26S',
  thumbnailUrl: 'https://i.ytimg.com/vi/XBFtgSQg7X4/hqdefault.jpg'
}, {
  title: 'Krea x Daydream Scope - Real-Time Video Model Integration',
  href: 'https://www.youtube.com/watch?v=uEvM638QWZI',
  author: 'By Daydream AI',
  content: 'The latest Daydream Scope release introduces support for the Krea AI real-time video model, enabling interactive text-to-video generation with smooth, dynamic prompt transitions.  In this video, Yondon Fu walks through the new integration, showing how the model runs live inside Scope, including real-time prompt changes and performance benchmarks: ~6 FPS at 480×832 on NVIDIA H100 ~11 FPS at 320×576 on RTX 5090 with FP8 quantization (Linux only; Windows support in progress)  Full release notes: ht...',
  publishedDate: 'Oct 31, 2025',
  duration: 'PT3M37S',
  thumbnailUrl: 'https://i.ytimg.com/vi/uEvM638QWZI/hqdefault.jpg'
}, {
  title: 'Ian Messina - Realtime Video AI Summit 2025 by Daydream',
  href: 'https://www.youtube.com/watch?v=o9sBtdnFJ28',
  author: 'By Daydream AI',
  content: 'Ian Messina presented on \"Real Time Video AI in Virtual Production\" at the Real-Time Video AI Summit, hosted by Daydream, where leading researchers and creators explored the future of real-time video generation and creative AI.  Learn more about Daydream:   X: @daydreamLiveAI  Website:  https://daydream.live/  Discord: https://discord.com/invite/daydreamlive...',
  publishedDate: 'Oct 31, 2025',
  duration: 'PT16M59S',
  thumbnailUrl: 'https://i.ytimg.com/vi/o9sBtdnFJ28/hqdefault.jpg'
}, {
  title: 'James Barnes - Realtime Video AI Summit 2025 by Daydream',
  href: 'https://www.youtube.com/watch?v=FcRGtcb5RRQ',
  author: 'By Daydream AI',
  content: 'James Barnes presented on \"If You Can Dream It, You Can Do It\" at the Real-Time Video AI Summit, hosted by Daydream, where leading researchers and creators explored the future of real-time video generation and creative AI.  Learn more about Daydream:   X: @daydreamLiveAI  Website:  https://daydream.live/  Discord:   https://discord.com/invite/daydreamlive...',
  publishedDate: 'Oct 31, 2025',
  duration: 'PT22M39S',
  thumbnailUrl: 'https://i.ytimg.com/vi/FcRGtcb5RRQ/hqdefault.jpg'
}, {
  title: 'Eddy Vajarakitipongse - Realtime Video AI Summit 2025 by Daydream',
  href: 'https://www.youtube.com/watch?v=oQex89C7naE',
  author: 'By Daydream AI',
  content: 'Eddy Vajarakitipongse presented on \"Real-Time AI for Interactive Art Installations on Only 6GB VRAM\" at the Real-Time Video AI Summit, hosted by Daydream, where leading researchers and creators explored the future of real-time video generation and creative AI.  Learn more about Daydream:   X: @daydreamLiveAI  Website:  https://daydream.live/  Discord: https://discord.com/invite/daydreamlive...',
  publishedDate: 'Oct 31, 2025',
  duration: 'PT12M53S',
  thumbnailUrl: 'https://i.ytimg.com/vi/oQex89C7naE/hqdefault.jpg'
}];

export const BorderedBox = ({children, variant = "default", padding = "var(--lp-spacing-4)", borderRadius = "var(--lp-spacing-px-8)", margin = "", accentBar = "", style = {}, className = "", ...rest}) => {
  const variants = {
    default: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "var(--lp-color-bg-card)"
    },
    accent: {
      border: "1px solid var(--lp-color-accent)",
      backgroundColor: "var(--lp-color-bg-card)"
    },
    muted: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "transparent"
    }
  };
  const accentBarColors = {
    accent: "var(--lp-color-accent)",
    positive: "var(--green-9)"
  };
  return <div data-docs-bordered-box="" data-accent-bar={accentBarColors[accentBar] ? "" : undefined} className={className} style={{
    ...variants[variant],
    padding: padding,
    borderRadius: borderRadius,
    ...margin ? {
      margin
    } : {},
    ...accentBarColors[accentBar] ? {
      position: "relative",
      '--accent-bar-color': accentBarColors[accentBar]
    } : {},
    ...style
  }} {...rest}>
      {children}
    </div>;
};

export const CenteredContainer = ({children, maxWidth = "800px", padding = "0", preset = "default", width = "", minWidth = "", marginRight = "", marginBottom = "", textAlign = "", style = {}, className = "", ...rest}) => {
  const presets = {
    default: {},
    fitContent: {
      width: "fit-content",
      minWidth: "fit-content"
    },
    readable70: {
      width: "70%",
      minWidth: "fit-content"
    },
    readable80: {
      width: "80%",
      minWidth: "fit-content"
    },
    readable90: {
      width: "90%"
    },
    wide900: {
      maxWidth: "900px"
    }
  };
  const presetStyle = presets[preset] || presets.default;
  return <div className={className} style={{
    maxWidth: presetStyle.maxWidth || maxWidth,
    margin: "0 auto",
    padding: padding,
    ...presetStyle.width ? {
      width: presetStyle.width
    } : {},
    ...presetStyle.minWidth ? {
      minWidth: presetStyle.minWidth
    } : {},
    ...width ? {
      width
    } : {},
    ...minWidth ? {
      minWidth
    } : {},
    ...marginRight ? {
      marginRight
    } : {},
    ...marginBottom ? {
      marginBottom
    } : {},
    ...textAlign ? {
      textAlign
    } : {},
    ...style
  }} {...rest}>
      {children}
    </div>;
};

export const LazyLoad = ({children, height = "200px", offset = "200px", fadeDuration = 400, className = "", style = {}, ...rest}) => {
  const ref = useRef(null);
  const [visible, setVisible] = useState(false);
  const [ready, setReady] = useState(false);
  useEffect(() => {
    const el = ref.current;
    if (!el) return;
    const observer = new IntersectionObserver(([entry]) => {
      if (entry.isIntersecting) {
        setVisible(true);
        observer.disconnect();
      }
    }, {
      rootMargin: offset
    });
    observer.observe(el);
    return () => observer.disconnect();
  }, []);
  useEffect(() => {
    if (!visible) return;
    const frameId = requestAnimationFrame(() => {
      setReady(true);
    });
    return () => cancelAnimationFrame(frameId);
  }, [visible]);
  const placeholder = <div ref={ref} className={className} style={{
    minHeight: height,
    ...style
  }} {...rest} />;
  if (!visible) return placeholder;
  return <div ref={ref} className={className} style={{
    opacity: ready ? 1 : 0,
    transition: `opacity ${fadeDuration}ms ease-in`,
    ...style
  }} {...rest}>
      {children}
    </div>;
};

export const ScrollBox = ({children, maxHeight = 300, showHint = true, ariaLabel = "Scrollable content", style = {}, className = "", ...rest}) => {
  const contentRef = useRef(null);
  const [isOverflowing, setIsOverflowing] = useState(false);
  useEffect(() => {
    const checkOverflow = () => {
      if (contentRef.current) {
        const maxHeightPx = typeof maxHeight === "number" ? maxHeight : parseInt(maxHeight, 10) || 300;
        setIsOverflowing(contentRef.current.scrollHeight > maxHeightPx);
      }
    };
    checkOverflow();
    window.addEventListener("resize", checkOverflow);
    return () => window.removeEventListener("resize", checkOverflow);
  }, [maxHeight, children]);
  return <div className={className} style={{
    position: "relative",
    ...style
  }} {...rest}>
      <div ref={contentRef} role="region" tabIndex={0} aria-label={ariaLabel} style={{
    maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight,
    overflowY: "auto",
    paddingRight: 4
  }} onScroll={e => {
    const el = e.target;
    const atBottom = el.scrollHeight - el.scrollTop <= el.clientHeight + 10;
    const hint = el.parentNode.querySelector("[data-scroll-hint]");
    if (hint) hint.style.opacity = atBottom ? "0" : "1";
  }}>
        {children}
      </div>
      {showHint && isOverflowing && <div data-scroll-hint style={{
    fontSize: 11,
    color: "var(--lp-color-text-muted)",
    textAlign: "center",
    marginTop: 8,
    transition: "opacity 0.2s"
  }}>
          Scroll for more ↓
        </div>}
    </div>;
};

export const CustomDivider = ({color = "var(--lp-color-border-default)", middleText = "", spacing = "default", style = {}, className = "", ...rest}) => {
  const spacingPresets = {
    default: {
      margin: "24px 0"
    },
    overlap: {
      margin: "-1rem 0 -1rem 0"
    },
    tight: {
      margin: "0 0 -1rem 0"
    },
    section: {
      margin: "0 0 -2rem 0"
    },
    sectionOverlap: {
      margin: "-1rem 0 -2rem 0"
    },
    deepOverlap: {
      margin: "-1rem 0 -1.5rem 0"
    }
  };
  const spacingStyle = spacingPresets[spacing] || spacingPresets.default;
  return <div role="separator" aria-orientation="horizontal" className={className} style={{
    display: "flex",
    alignItems: "center",
    ...spacingStyle,
    fontSize: style?.fontSize || "16px",
    height: "fit-content",
    ...style
  }} {...rest}>
      <span style={{
    marginRight: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
      </span>
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      {middleText && <>
          <Icon icon="circle" size={2} />
          <span style={{
    margin: "0 8px",
    fontWeight: "bold",
    color: color,
    opacity: 0.7
  }}>
            {middleText}
          </span>
          <Icon icon="circle" size={2} />
        </>}
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      <span style={{
    marginLeft: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <span style={{
    display: "inline-block",
    transform: "scaleX(-1)"
  }}>
          <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
        </span>
      </span>
    </div>;
};

export const MarkdownEmbed = ({url, className = '', style = {}, ...rest}) => {
  const [html, setHtml] = useState('');
  useEffect(() => {
    fetch(url).then(res => res.text()).then(md => {
      const converted = md.replace(/```(\w*)\n([\s\S]*?)```/g, '<pre><code>$2</code></pre>').replace(/`([^`]+)`/g, '<code>$1</code>').replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<img alt="$1" src="$2" style="max-width:100%" />').replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank" rel="noopener noreferrer">$1</a>').replace(/^######\s+(.+?)(?:\s+#+)?$/gm, '<h6>$1</h6>').replace(/^#####\s+(.+?)(?:\s+#+)?$/gm, '<h5>$1</h5>').replace(/^####\s+(.+?)(?:\s+#+)?$/gm, '<h4>$1</h4>').replace(/^###\s+(.+?)(?:\s+#+)?$/gm, '<h3>$1</h3>').replace(/^##\s+(.+?)(?:\s+#+)?$/gm, '<h2>$1</h2>').replace(/^#\s+(.+?)(?:\s+#+)?$/gm, '<h1>$1</h1>').replace(/\*\*\*(.+?)\*\*\*/g, '<strong><em>$1</em></strong>').replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>').replace(/\*(.+?)\*/g, '<em>$1</em>').replace(/^---$/gm, '<hr />').replace(/^[-*]\s+(.+)$/gm, '<li>$1</li>').replace(/\n\n/g, '</p><p>').replace(/\n/g, '<br />');
      setHtml('<p>' + converted + '</p>');
    });
  }, [url]);
  if (!html) return <div className={className} style={style} {...rest}>
        <p style={{
    color: 'var(--text-secondary)'
  }}>Loading...</p>
      </div>;
  return <div className={className} {...rest} style={{
    maxWidth: '100%',
    overflowWrap: 'anywhere',
    wordBreak: 'break-word',
    ...style
  }} dangerouslySetInnerHTML={{
    __html: html
  }} />;
};

export const DiscordAnnouncements = ({serverName = 'Livepeer', items = [], limit, ScrollBox, scrollMaxHeight = 300, className = '', style = {}, ...rest}) => {
  const sanitiseHTML = html => {
    if (!html || typeof html !== 'string') return '';
    return html.replace(/<script[\s\S]*?<\/script>/gi, '').replace(/<iframe[\s\S]*?<\/iframe>/gi, '').replace(/<object[\s\S]*?<\/object>/gi, '').replace(/<embed[\s\S]*?>/gi, '').replace(/<form[\s\S]*?<\/form>/gi, '').replace(/<style[\s\S]*?<\/style>/gi, '').replace(/<link[\s\S]*?>/gi, '').replace(/\bon\w+\s*=\s*(['"])[^'"]*\1/gi, '').replace(/\bon\w+\s*=\s*[^\s>]*/gi, '').replace(/javascript\s*:/gi, '');
  };
  const displayItems = limit ? items.slice(0, limit) : items;
  if (!displayItems || displayItems.length === 0) {
    return <Note>
        <p style={{
      color: 'var(--text-secondary)',
      textAlign: 'center'
    }}>
          No announcements at this time.
        </p>
      </Note>;
  }
  const parseContent = content => {
    const withLinks = content.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank" rel="noopener noreferrer">$1 ↗</a>');
    return withLinks;
  };
  return <div className={className} style={{
    display: 'flex',
    flexDirection: 'column',
    gap: "var(--lp-spacing-4)",
    border: '1px solid var(--lp-color-accent)',
    borderRadius: "var(--lp-spacing-2)",
    padding: "var(--lp-spacing-4)",
    ...style
  }} {...rest}>
      {displayItems.map((announcement, index) => <div key={announcement.id} href={announcement.url} target="_blank" rel="noopener noreferrer">
          <div style={{
    display: 'flex',
    alignItems: 'center',
    gap: "var(--lp-spacing-2)",
    fontSize: '0.875rem',
    marginBottom: "var(--lp-spacing-3)",
    width: '100%'
  }}>
            <Icon icon="discord" color="var(--lp-color-brand-discord)" size={16} />
            <span style={{
    fontWeight: 600,
    color: 'var(--lp-color-accent)',
    fontSize: 'medium'
  }}>
              {serverName}
              {}
            </span>
            <span style={{
    color: 'var(--lp-color-text-secondary)'
  }}>•</span>
            <time dateTime={announcement.timestamp} style={{
    color: 'var(--lp-color-text-secondary)'
  }}>
              {new Date(announcement.timestamp).toLocaleDateString('en-US', {
    month: 'short',
    day: 'numeric',
    year: 'numeric'
  })}
            </time>
            <span style={{
    fontSize: '0.875rem',
    color: 'var(--lp-color-text-secondary)',
    marginLeft: 'auto'
  }}>
              View in Discord{' '}
              <Icon icon="arrow-up-right" size={12} color="var(--lp-color-accent)" />
            </span>
          </div>
          <ScrollBox maxHeight={scrollMaxHeight} ariaLabel={`Announcement from ${serverName}`}>
            <div style={{
    color: 'var(--lp-color-text-secondary)',
    fontSize: 'small'
  }} dangerouslySetInnerHTML={{
    __html: sanitiseHTML(parseContent(announcement.content))
  }} />
          </ScrollBox>
          {index < displayItems.length - 1 && <div style={{
    marginTop: "var(--lp-spacing-3)"
  }}>
              <hr style={{
    border: 'none',
    borderBottom: '1px solid var(--lp-color-border-default)',
    margin: '0'
  }} />
            </div>}
        </div>)}
    </div>;
};

export const RssBlogCardLayout = ({items = [], cols = 2, limit, className = '', style = {}, ...rest}) => {
  const displayItems = limit ? items.slice(0, limit) : items;
  if (!displayItems || displayItems.length === 0) {
    return <Note>
        <p style={{
      color: 'var(--text-secondary)',
      textAlign: 'center'
    }}>
          No blog posts at this time.
        </p>
      </Note>;
  }
  return <Columns cols={cols} className={className} style={style} {...rest}>
      {displayItems.map((props, idx) => <RssBlogCard key={props.href || idx} {...props} />)}
    </Columns>;
};

export const RssBlogCard = ({title, content, href, author = '', excerpt = '', datePosted = null, readingTime = null, img = null, icon = 'book-open', cta = 'Read More', className = '', style = {}, ...rest}) => {
  const sanitiseHTML = html => {
    if (!html || typeof html !== 'string') return '';
    return html.replace(/<script[\s\S]*?<\/script>/gi, '').replace(/<iframe[\s\S]*?<\/iframe>/gi, '').replace(/<object[\s\S]*?<\/object>/gi, '').replace(/<embed[\s\S]*?>/gi, '').replace(/<form[\s\S]*?<\/form>/gi, '').replace(/<style[\s\S]*?<\/style>/gi, '').replace(/<link[\s\S]*?>/gi, '').replace(/\bon\w+\s*=\s*(['"])[^'"]*\1/gi, '').replace(/\bon\w+\s*=\s*[^\s>]*/gi, '').replace(/javascript\s*:/gi, '');
  };
  const displayContent = content || excerpt;
  const showScrollHint = displayContent && displayContent.length > 500;
  return <Card className={className} style={style} title={<span style={{
    alignItems: 'center',
    color: 'var(--lp-color-accent)',
    fontSize: '1.25rem',
    marginLeft: '-2px',
    marginBottom: "var(--lp-spacing-2)",
    display: '-webkit-box',
    WebkitLineClamp: 2,
    WebkitBoxOrient: 'vertical',
    overflow: 'hidden',
    textOverflow: 'ellipsis'
  }}>
          <span style={{
    alignSelf: 'top'
  }}>
            <Icon icon={icon} size={20} color="var(--lp-color-accent)" />
          </span>
          <span style={{
    marginLeft: "var(--lp-spacing-2)"
  }}>{title}</span>
        </span>} href={href} cta={cta} img={img || undefined} arrow {...rest}>
      <div style={{
    flex: 1
  }}>
        {datePosted && <div style={{
    display: 'flex',
    alignItems: 'center',
    fontSize: 12,
    color: 'var(--lp-color-text-primary)',
    gap: 6
  }}>
            <span><Icon icon="calendar" size={14} /></span>
            <span>{datePosted}</span>
          </div>}
        {readingTime && <div style={{
    display: 'flex',
    marginTop: 0,
    alignItems: 'center',
    fontSize: 12,
    color: 'var(--lp-color-text-primary)',
    gap: 6
  }}>
            <span><Icon icon="clock" size={14} /></span>
            <span>Read Time: {readingTime} minutes</span>
          </div>}
      </div>
      <div style={{
    height: 1,
    backgroundColor: 'var(--lp-color-border-default)',
    margin: '12px 0'
  }} />
      <div style={{
    maxHeight: 200,
    overflowY: 'auto',
    fontSize: '0.875rem',
    color: 'var(--text-secondary)',
    lineHeight: '1.5'
  }} role="region" tabIndex={0} aria-label={title ? `Scrollable content for ${title}` : 'Scrollable content'} onScroll={e => {
    const el = e.target;
    const atBottom = el.scrollHeight - el.scrollTop <= el.clientHeight + 10;
    const hint = el.nextSibling;
    if (hint) hint.style.display = atBottom ? 'none' : 'block';
  }} dangerouslySetInnerHTML={{
    __html: sanitiseHTML(displayContent)
  }} />
      {showScrollHint && <div style={{
    fontSize: 11,
    color: 'var(--lp-color-text-muted)',
    textAlign: 'center',
    marginTop: 10,
    marginBottom: 0
  }}>
          Scroll for more ↓
        </div>}
    </Card>;
};

export const YouTubeVideoData = ({items = [], limit, cols = 2, className = "", style = {}, ...rest}) => {
  const displayItems = limit ? items.slice(0, limit) : items;
  if (!displayItems || displayItems.length === 0) {
    return <Note>
        <p style={{
      color: "var(--text-secondary)",
      textAlign: "center"
    }}>
          No videos at this time.
        </p>
      </Note>;
  }
  const getEmbedUrl = href => {
    if (!href) return "";
    const videoId = href.split("v=")[1]?.split("&")[0];
    return videoId ? `https://www.youtube.com/embed/${videoId}` : href;
  };
  return <Columns cols={cols} className={className} style={style} {...rest}>
      {displayItems.map((item, idx) => {
    if (!item || !item.href) return null;
    const needsSpacer = idx > 0 && idx % cols === 0;
    return <>
            {needsSpacer && <div key={`spacer-${idx}`} style={{
      height: "var(--lp-spacing-6)",
      width: "100%"
    }} />}
            {needsSpacer && <div key={`spacer2-${idx}`} style={{
      height: "var(--lp-spacing-6)",
      width: "100%"
    }} />}
            <YouTubeVideo key={item.href || idx} embedUrl={getEmbedUrl(item.href)} title={item.title || ""} caption={`${item.author || ""} • ${item.publishedDate || ""}`} />
          </>;
  })}
    </Columns>;
};

export const YouTubeVideo = ({embedUrl, url, title = "", author = "", hint = "", caption, className = "", style = {}, ...rest}) => {
  const toEmbedUrl = value => {
    if (!value || typeof value !== "string") return "";
    const source = value.trim();
    if (!source) return "";
    try {
      const parsed = new URL(source);
      const host = parsed.hostname.replace(/^www\./, "");
      if (host === "youtube.com" || host === "youtube-nocookie.com") {
        if (parsed.pathname.startsWith("/embed/")) return source;
        const videoId = parsed.pathname.startsWith("/shorts/") ? parsed.pathname.split("/").filter(Boolean)[1] : parsed.searchParams.get("v");
        if (!videoId) return "";
        const params = new URLSearchParams(parsed.search);
        params.delete("v");
        const query = params.toString();
        return `https://www.youtube.com/embed/${videoId}${query ? `?${query}` : ""}`;
      }
      if (host === "youtu.be") {
        const videoId = parsed.pathname.split("/").filter(Boolean)[0];
        if (!videoId) return "";
        const query = parsed.searchParams.toString();
        return `https://www.youtube.com/embed/${videoId}${query ? `?${query}` : ""}`;
      }
    } catch (_err) {
      return "";
    }
    return "";
  };
  const resolvedEmbedUrl = toEmbedUrl(embedUrl || url);
  if (!resolvedEmbedUrl) {
    return null;
  }
  const isValidYouTubeUrl = resolvedEmbedUrl.includes("youtube.com/embed/");
  if (!isValidYouTubeUrl) {
    console.warn("Invalid YouTube embed URL:", embedUrl || url);
    return null;
  }
  const buildCaption = () => {
    if (caption) return caption;
    if (!author && !title) return null;
    return <span style={{
      display: "flex",
      flexDirection: "column",
      alignItems: "center",
      textAlign: "center",
      lineHeight: 1.2
    }}>
        <span>
          {author && <>
              <Icon icon="microphone" size={16} /> <strong>{author}</strong>
            </>}
          {author && title ? `${" "} • ${title}` : title}
        </span>
      </span>;
  };
  const captionContent = buildCaption();
  return <Frame className={className} style={style} {...hint ? {
    hint
  } : {}} {...captionContent ? {
    caption: captionContent
  } : {}} {...rest}>
      <iframe className="w-full aspect-video rounded-xl" src={resolvedEmbedUrl} title={title || author || "YouTube Video"} allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />
    </Frame>;
};

export const LinkArrow = ({href, label, description, newline = true, borderColor, className = '', style = {}, ...rest}) => {
  const linkArrowStyle = {
    display: 'inline-flex',
    alignItems: 'center',
    justifyContent: 'center',
    gap: "var(--lp-spacing-1)",
    width: 'fit-content',
    ...borderColor && ({
      borderColor
    })
  };
  return <span className={className} style={style} {...rest}>
      {newline && <br />}
      <span style={linkArrowStyle}>
        <a href={href} target="_blank" rel="noopener noreferrer">
          {label}
        </a>
        <Icon icon="arrow-up-right" size={14} color="var(--lp-color-accent)" />
      </span>
      {description && description}
      {description && <div style={{
    height: "var(--lp-spacing-3)"
  }} />}
    </span>;
};

export const SocialLinks = ({links, size = 20, gap = "var(--lp-spacing-3)", justify = "center", iconColor, color, className = "", style = {}, ...rest}) => {
  const resolvedIconColor = iconColor || color;
  const linkStyle = {
    border: "none",
    borderBottom: "none",
    textDecoration: "none",
    display: "inline-flex"
  };
  const colors = {
    discord: resolvedIconColor || "var(--lp-color-brand-discord)",
    twitter: resolvedIconColor || "var(--lp-color-text-primary)",
    github: resolvedIconColor || "var(--lp-color-brand-github)",
    forum: resolvedIconColor || "var(--lp-color-brand-forum)",
    website: resolvedIconColor || "var(--lp-color-accent)",
    blog: resolvedIconColor || "var(--lp-color-accent)",
    globe: resolvedIconColor || "var(--lp-color-brand-globe)",
    twitch: resolvedIconColor || "var(--lp-color-brand-twitch)",
    youtube: resolvedIconColor || "var(--lp-color-brand-youtube)",
    instagram: resolvedIconColor || "var(--lp-color-brand-instagram)",
    linkedin: resolvedIconColor || "var(--lp-color-brand-linkedin)"
  };
  const iconColorMap = {
    discord: "discord",
    "x-twitter": "twitter",
    github: "github",
    "comment-pen": "forum",
    "pen-line": "blog",
    "pencil-line": "blog",
    globe: "globe",
    "book-open": "website",
    twitch: "twitch",
    youtube: "youtube",
    instagram: "instagram",
    linkedin: "linkedin"
  };
  const defaultLinks = [{
    icon: "discord",
    href: "https://discord.com/invite/livepeer",
    label: "Livepeer Discord"
  }, {
    icon: "globe",
    href: "https://livepeer.org",
    label: "Livepeer Website"
  }, {
    icon: "github",
    href: "https://github.com/livepeer",
    label: "Livepeer GitHub"
  }, {
    icon: "comment-pen",
    href: "https://forum.livepeer.org",
    label: "Livepeer Forum"
  }, {
    icon: "pen-line",
    href: "https://livepeer.org/blog",
    label: "Livepeer Blog"
  }, {
    icon: "x-twitter",
    href: "https://x.com/livepeer",
    label: "Livepeer X"
  }];
  const items = links || defaultLinks;
  return <div className={className} style={style} {...rest}>
      <style>{`
        .social-links a {
          border: none;
          border-bottom: none;
        }
      `}</style>
      <span className="social-links" style={{
    display: "flex",
    justifyContent: justify,
    gap: gap,
    marginTop: "var(--lp-spacing-2)"
  }}>
        {items.map((item, i) => <a key={i} href={item.href} target="_blank" rel="noopener noreferrer" aria-label={item.label} style={linkStyle}>
            <Tooltip headline={item.label}>
              <Icon icon={item.icon} size={size} color={colors[iconColorMap[item.icon] || "website"] || "var(--lp-color-accent)"} aria-hidden="true" />
            </Tooltip>
          </a>)}
      </span>
    </div>;
};

{/* DATA */}

<CenteredContainer maxWidth="fit-content">
  <BorderedBox margin="0" padding="0.5rem 1rem 1rem 1rem" variant="muted">
    <SocialLinks iconColor="var(--hero-text)" links={daydreamSocials} />
  </BorderedBox>
</CenteredContainer>

<br />

<CenteredContainer width="80%" minWidth="fit-content">
  <Tip>
    This page is an automated workflow.
  </Tip>
</CenteredContainer>

## Videos <Icon icon="camera-movie" size={24} />

Watch the latest on the <LinkArrow label="Daydream YouTube Channel" href="https://www.youtube.com/channel/UCviyh_-8H2vkYq9ROHMBffQ" newline={false} />

<LazyLoad height="400px">
  <YouTubeVideoData items={youtubeData} limit={4} />
</LazyLoad>

<CustomDivider style={{margin: "0.5rem 0 -2.5rem 0"}} />

## <Icon icon="pencil-line" size={24} /> Blog

Read recent posts from the <LinkArrow label="Daydream Blog" href="https://blog.daydream.live" newline={false} />

<LazyLoad height="200px">
  <RssBlogCardLayout items={daydreamBlogData} limit={2} />
</LazyLoad>

<CustomDivider style={{margin: "0 0 -2.5rem 0"}} />

## <Icon icon="discord" size={24} /> Discord Announcements

Latest from the <LinkArrow label="Daydream Discord" href="https://discord.gg/pF2Akym5bV" newline={false} />

<LazyLoad height="300px">
  <DiscordAnnouncements serverName="Daydream" items={daydreamDiscordData} limit={4} ScrollBox={ScrollBox} scrollMaxHeight={200} />
</LazyLoad>

<CustomDivider style={{margin: "0 0 -2.5rem 0"}} />

## <Icon icon="twitter" size={24} /> X / Twitter

<LinkArrow label="@DaydreamLiveAI on X" href="https://x.com/DaydreamLiveAI" newline={false} />

<br />

<br />

<LazyLoad height="650px">
  <iframe src="https://platform.twitter.com/embed/Tweet.html?id=2029225629434925247&theme=dark" className="lp-tweet-frame-large" title="Daydream on X" />
</LazyLoad>

<CustomDivider style={{margin: "0 0 -2.5rem 0"}} />

## <Icon icon="github" size={24} /> GitHub

<LazyLoad height="600px">
  <BorderedBox>
    <ScrollBox maxHeight={600}>
      <BorderedBox variant="accent">
        Daydream Github

        <LinkArrow label="View Daydream on GitHub" href="https://github.com/daydreamlive/scope" newline={true} />
      </BorderedBox>

      <MarkdownEmbed url="https://raw.githubusercontent.com/daydreamlive/scope/main/README.md" />
    </ScrollBox>
  </BorderedBox>
</LazyLoad>

<CustomDivider />

## Related Pages

<CardGroup cols={2}>
  <Card title="Daydream Overview" icon="book-open" href="/solutions/daydream/overview" />

  <Card title="Daydream Changelog" icon="clock" href="/solutions/daydream/changelog" />
</CardGroup>
