# AutoShow Updates with Dev Agrawal

> Anthony and Dev discuss sync engines for reliable AI apps and demonstrate AutoShow’s expanding multimodal content-processing CLI.

- **Collection:** Video
- **Published:** 2026-04-21
- **Author:** Anthony Campolo
- **Canonical URL:** https://ajcwebdev.com/videos/autoshow-updates-with-dev-agrawal/
- **Markdown URL:** https://ajcwebdev.com/videos/autoshow-updates-with-dev-agrawal/index.md
- **JSON URL:** https://ajcwebdev.com/videos/autoshow-updates-with-dev-agrawal/index.json
- **Channel:** [Anthony Campolo](https://www.youtube.com/channel/UCpdzti0GURPfMjKzYK5FVSA)
- **Original URL:** https://www.youtube.com/watch?v=0GyMsF9is40
- **Original Label:** Watch original

---

## Episode Description

Anthony and Dev discuss sync engines for reliable AI apps and demonstrate AutoShow’s expanding multimodal content-processing CLI.

## Episode Summary

Anthony Campolo and Dev Agrawal compare emerging agent-authorization protocols before examining why reliable AI chat and agent apps increasingly resemble sync engines. Dev explains how database-backed state can replace fragile client-server token streams, enabling resumable work, offline queuing, cross-device updates, and multiplayer experiences. Anthony then demonstrates AutoShow’s rebuilt Bun-based CLI, which ingests media, documents, web pages, and prompts; performs transcription or OCR; generates structured writing, speech, images, videos, music, and lyric videos; and records timing and cost metadata. They review transcription benchmarks, local and hosted providers, document-to-concept-album workflows, and plans for agent-friendly commands. The conversation closes by considering code-generated media through tools such as Remotion, suggesting that future content pipelines will combine generative models, programmable visuals, and composable transformation primitives.

## Speakers

- Anthony Campolo
- Dev Agrawal

## Chapters

### 00:00:03 - Current Projects and Agent Authorization

Anthony and Dev open the third episode of Web Devs at Night by sharing what they have worked on during the previous two weeks. Dev mentions several AI-related articles, a collaborative multi-agent application, and experiments with Hermes on Discord. Anthony discusses articles about AgentAuth and sync engines, his transcription benchmarking work, and progress toward a second version of AutoShow’s front end.

Their updates lead into the limitations of authentication systems designed for people rather than autonomous software. Anthony explains why agents acting for users require different credential and authorization patterns, while Dev notes that BetterAuth and Clerk appeared to announce competing solutions within a short period. The comparison establishes a broader theme: foundational web infrastructure is being reconsidered as agents become active participants.

### 00:04:38 - Competing Protocols for an Agentic Web

Dev argues that many existing protocols must be reconsidered because they were never designed for agents. Anthony locates Clerk’s Agent Pass announcement, an open protocol intended to let agents authenticate with third-party services on a user’s behalf without exposing long-lived credentials. They observe that it addresses much the same problem as BetterAuth’s AgentAuth, although its harness, service, and authority protocols suggest a different architecture.

The discussion expands to the rapidly changing relationship between websites and automated traffic. Cloudflare historically helped sites block bots and verify human visitors, but useful agents now need recognition as first-class web participants. Anthony connects this shift to newer robots.txt controls, while both hosts expect today’s competing approaches to evolve substantially before common standards emerge.

### 00:07:22 - Why AI Applications Become Sync Engines

Dev introduces an article arguing that developers of AI applications, especially chat products, often recreate sync-engine infrastructure while trying to make their systems reliable. He uses T3 Chat as an example: an initially simple IndexedDB implementation became increasingly complicated before its migration to Convex. Anthony recalls their earlier distinction between Convex as a backend platform and PowerSync as a client-oriented synchronization layer connected to a backend.

Anthony then describes how AutoShow differs from an agentic chat application. It exposes many third-party AI APIs as composable endpoints and produces artifacts across text, images, video, and music. Those files and records must remain connected across object storage and databases, but the workflow still resembles a conventional full-stack application because external providers perform the AI computation and no autonomous agent is acting continuously for the user.

### 00:11:25 - One-Shot Generation Versus Streaming Responses

Dev walks through the conventional architecture of an AI chat request: the client contacts a server, the server calls a language model, tokens stream back, and the completed response is eventually stored. Anthony compares this with AutoShow’s original workflow, which submitted a transcript and prompt, waited for the full generation, and returned a completed page rather than rendering a token stream in real time.

AutoShow’s one-shot approach reflects the substantial, multimodal artifacts it creates. A result may combine language-model output with an image or other generated material, so waiting several seconds is less disruptive than it would be during an interactive conversation. Dev confirms that the user sees nothing until completion, setting up a contrast between simpler batch processing and the fragile but responsive streaming experience common in chat products.

### 00:15:27 - Fragile Streams and Cross-Device Failures

The hosts examine what happens when a long-lived HTTP request fails. If the connection carrying a model’s streamed response breaks, generation may stop before anything is saved, forcing the user to submit the prompt again. Anthony says avoiding streaming helped him sidestep that failure mode, although Dev acknowledges that streaming provides a compelling sense of immediate progress.

Cross-device behavior presents another problem. Dev describes beginning a ChatGPT request on his phone and being unable to observe its unfinished result from a laptop without later refreshing. Discord offers a better model because updates appear across devices. These weaknesses become more serious for cloud coding agents that may run for hours, where keeping one browser tab open and untouched is unreasonable and risks losing valuable work.

### 00:18:03 - Jobs, Durable State, and PowerSync

Anthony explains that AutoShow’s first version suffered from the same “do not close this tab” problem. Version two addresses it with a durable job system, allowing users to refresh or return later without interrupting a generation. Dev uses this as a bridge to his central argument: an AI response should be represented as synchronized state rather than as a client-owned stream.

In his PowerChat architecture, the client writes a user message to a local database and immediately finishes its responsibility. PowerSync carries that mutation to the server, which creates an agent placeholder, invokes the model, and writes each received chunk into the database. The interface simply queries and renders messages, remaining unaware of tokens, model streams, or direct server connections while synchronization handles delivery in the background.

### 00:22:46 - Evaluating Sync Benefits for AutoShow

Anthony agrees that the state-based approach is valuable for streaming-heavy applications but questions whether AutoShow needs it. The clearest benefit would be immediate updates between devices, since AutoShow’s current job results generally require a refresh. He remains unconvinced that this improvement alone justifies adding a sync engine to a primarily asynchronous generation product.

Dev says the strongest advantage may actually be simpler developer code, with multiplayer updates, resumability, offline queuing, and cross-device behavior arriving as additional benefits. Anthony recommends linking technical examples to a working repository, and Dev points to PowerChat’s source. They describe it as a Slack-like multiplayer environment where agents participate alongside people, leaving room for a future episode focused on its implementation.

### 00:27:44 - Introducing the Rebuilt AutoShow CLI

After considering autonomous overnight agents and scheduled content processing, Anthony begins the AutoShow demonstration. Dev recalls the original product as a tool that accepted video and produced descriptions, chapters, and social posts. Anthony explains that it has grown into a pipeline-oriented CLI capable of classifying many kinds of input and persisting generated artifacts, metadata, costs, and timings in versioned manifests.

The supported targets now include individual files, directories, Markdown, URL lists, YouTube collections, podcast feeds, local text, and direct prompts for image, video, or music generation. Anthony runs the CLI through Bun and introduces its processing stages. Rather than hiding everything behind one fixed pipeline, the rebuild exposes smaller commands that can be used independently or composed according to the user’s needs.

### 00:32:23 - YouTube Metadata, Downloads, and Extraction

Anthony demonstrates AutoShow against a Rick Astley YouTube link, joking about the accidental meta-Rickroll. The metadata stage returns structured JSON containing the title, duration, channel, publication date, thumbnail, channel URL, source URL, and description. A separate download command wraps yt-dlp and saves the media file for later processing, although most users will usually rely on higher-level combined commands.

Speech-to-text is now available as its own short command, separating transcription from later language-model generation. AutoShow also adds OCR for document inputs, expanding beyond the audio and video focus of earlier versions. Anthony lists support for PDFs, common image formats, EPUB books, Word documents, PowerPoint files, and spreadsheets, giving the tool a much broader foundation for extracting and transforming source content.

### 00:35:22 - Benchmarking Transcription Providers

Anthony explains AutoShow’s transcription defaults and provider selection. It first attempts local Whisper, while Reverb offers local speaker diarization. Numerous hosted services are also integrated because transcription was one of the project’s original use cases. He expects to remove weaker options from the primary CLI and maintain a separate benchmarking repository for more exhaustive comparisons.

Recent tests show AssemblyAI achieving nearly perfect results, possibly because its model is much newer than many competitors. ElevenLabs repeatedly performs poorly despite its strength in text-to-speech, while less familiar providers such as Sonix and Gladia offer attractive combinations of price, speed, and accuracy. AWS and Google Cloud fare badly on both quality and processing time, illustrating why independent measurements are more useful than provider marketing claims.

### 00:39:50 - OCR Pipelines and Books as Concept Albums

Anthony plans to merge the separate speech-to-text and OCR commands into a unified extract command that automatically selects the correct process for each input. He demonstrates OCR using a PDF of AWS documentation, noting the irony of building extraction support partly because Amazon’s own documentation was inconvenient to copy. AutoShow routes different document formats through appropriate local or hosted tools.

The document pipeline supports richer book workflows as well. EPUBs can be separated by chapter, while PDFs can be analyzed through their tables of contents to detect chapter boundaries. Anthony proposes prompting over each chapter to create a set of lyrics, then generating songs from those lyrics to produce an instant concept album. Dev suggests Harry Potter, while Anthony compares the result to a personalized theatrical musical.

### 00:44:33 - Structured Writing and Text-to-Speech

The write command combines AutoShow’s earlier extraction stages with language-model generation, closely matching the original product’s core behavior. Anthony processes a ten-minute recording about Lambda School using local Whisper and GPT-5.4 Nano. The run records transcription time, model time, predicted and actual costs, source metadata, prompts, and generated outputs, with local transcription carrying no provider charge.

Generated writing now uses structured JSON for stronger guarantees, including a one-sentence description, a paragraph summary, and timestamped chapters. A future formatting step will restore convenient Markdown output while preserving this structured foundation. Anthony also explains that users can append text-to-speech to generated writing or run speech synthesis directly on arbitrary extracted text, making audiobook-style document conversion possible within the same set of composable commands.

### 00:48:48 - Speech Output and Generated Artwork

Anthony plays a short text-to-speech test that produces a WAV file from a simple passage. He then demonstrates speech synthesized from an AutoShow summary, revealing a current issue: the voice reads Markdown headings and symbols aloud. The example identifies a cleanup step needed before generated text can flow naturally into narration.

The pipeline can continue from writing into image generation. One earlier run transformed generated chapter content into a poster-like visual with readable typography, something older image models handled poorly. Anthony and Dev look for the exact prompt and discuss the need to record every input clearly in metadata. Users will eventually be able to choose purpose-specific prompts for thumbnails, blog covers, abstract artwork, and other assets rather than passing undifferentiated text to an image model.

### 00:53:13 - Image Models as Content Primitives

The hosts compare modern image providers, agreeing that Nano Banana is especially strong at typography and infographic-like compositions. Anthony mentions a comic-book project whose generation pipeline will soon connect with AutoShow. He discovers that the CLI currently lacks the built-in image prompt presets already available in the front-end application, although it can accept arbitrary prompts and run multiple providers for comparison.

Dev describes a practical writing workflow in which a draft article generates a header image and supporting illustrations placed between sections. Anthony says document chunks could already be transformed this way with some orchestration. Dev characterizes AutoShow’s commands as useful content-transformation primitives that an agent such as Codex or Hermes could assemble into personalized workflows for creating, summarizing, or reorganizing material.

### 00:57:08 - Agent-Friendly Design and Video Generation

Anthony has not yet handed the CLI to an agent, but he is intentionally designing it for automated use. Guidance he found recommends avoiding mandatory interactive modes, making every operation expressible through flags and options, and supporting machine-readable output such as JSON. Dev adds that precise, actionable error messages are essential when software agents rather than people must diagnose failures.

They then test video generation with a short prompt describing a neon city street and a slow camera pan. Video is currently AutoShow’s least-developed and most expensive modality, with provider capabilities varying around sound, duration, resolution, and aspect ratio. Anthony plans to benchmark video systems just as he benchmarked transcription, allowing users to compare quality and cost instead of relying on promotional claims.

### 01:02:02 - Longer Video Workflows and Visual Consistency

A Minimax-generated city clip impresses both hosts with its lighting and rain effects. Anthony estimates that most current providers produce clips of roughly fifteen seconds or less and says multiple commands can generate additional segments. Dev highlights the harder issue: separately generated clips rarely preserve consistent characters, settings, or motion well enough to form one continuous scene.

They outline a possible solution involving more elaborate pipelines. An image model could first establish a character, with that reference passed into multiple video generations. Anthony’s comic-book project could function as a storyboard, pairing each panel with text-to-speech and image-to-video animation. Even limited lip movement could support dialogue-heavy cartoons. The idea prompts speculation about continuing canceled television shows, generating endless sitcom episodes, and creating fan crossovers, subject to legal and platform restrictions.

### 01:06:08 - Music, Lyric Videos, and Automated Albums

Anthony demonstrates music generation with ElevenLabs and plays a brief Suno song created specifically as a repository example. AutoShow can also produce lyric videos by synchronizing lyrics with a visual background. He built this feature because Suno’s own lyric-video output did not meet his preferences, although the migrated implementation still has issues such as insufficient contrast and missing background dimming.

The lyric-video stage completes a larger concept-album workflow: ingest a book, separate it into chapters, generate lyrics, turn those lyrics into songs, and render uploadable videos. Dev notes that generated video could eventually replace static backgrounds with full music videos. Anthony also mentions reporting and configuration commands, which support benchmarking across outputs and let users save preferred providers and models as defaults for shorter everyday commands.

### 01:09:42 - Remotion and Media Generated Through Code

Dev introduces Remotion, a React-based framework for creating videos programmatically, as a counterpoint to fully generative video models. They discuss Anthropic’s emphasis on code rather than native image or video generation. Code can still produce SVG artwork, MIDI music, animations, diagrams, advertisements, and other media, suggesting that strong coding models may reach multimodal outcomes through programmable tools.

Remotion is unlikely to reproduce a cinematic rainy Tokyo scene as naturally as a specialized video model, but it may be better for precise infographics, motion graphics, and branded promotional material. Anthony is impressed by the examples and sees potential for animated diagrams explaining AutoShow. Dev prepares to show a winner-announcement video made through prompting without manually editing the underlying code.

### 01:13:50 - Combining Generative Models with Programmable Design

Dev shows a polished Remotion announcement video that he created without touching a line of code and says substantially more refinement would be possible with additional prompting. The example raises a central design question: which parts of media creation should be handled by probabilistic generation, and which should be expressed through code or established design applications.

They mention agents controlling Photoshop, Figma, HTML, and browser screenshots to produce editable visual assets. A hybrid workflow could use an image model for rich artwork while relying on code for typography, layout, animation, and repeatable structure. Anthony has already experimented with generated diagrams for AutoShow’s homepage and agrees that HTML-based images and Remotion videos could become additional primitives within the CLI’s broader content pipeline.

### 01:17:27 - Release Plans, CLI Architecture, and Closing

Anthony shows the large pull request containing months of AutoShow work on the Bun branch and expects it to be ready within a week or two. The project has moved from Node.js and Commander to Bun and Clerc, a lightweight CLI library selected for its compatibility with web standards, ESM, and the project’s preference for Bun-native tooling. Publishing through npm remains one of the final release tasks.

Dev suggests Effect CLI as a more fully featured alternative, and Anthony notes that he has recently begun experimenting with Effect. They close by inviting practical use cases, especially workflows that could support Dev’s YouTube channel or professional content creation. The episode ends at 01:22:44, for a total duration of 01:22:44, with plans to return in two weeks and demonstrate AutoShow’s nontechnical front end.

## Resources and Links

- [powersync.com/blog/most-ai-chat-apps-are-broken-sync-engines-are-the-fix](https://www.powersync.com/blog/most-ai-chat-apps-are-broken-sync-engines-are-the-fix)
- [github.com/clerk/agentpass](https://github.com/clerk/agentpass)
- [agentpass.com/spec](https://agentpass.com/spec)

## Transcript

[00:00:03] - Anthony Campolo
And we're live. Welcome back to Web Devs at Night, episode 3, with Anthony and Dev. What's up, Dev?

[00:00:12] - Dev Agrawal
It's going good. Um, happy 4/20, everyone.

[00:00:16] - Anthony Campolo
Yeah, happy 4/20. If you are celebrating, you will enjoy this episode, and if you're not, you'll also enjoy this episode.

[00:00:25] - Dev Agrawal
Maybe just a few percent, uh, 5% less.

[00:00:29] - Anthony Campolo
That's what you've been up to over the last 2 weeks.

[00:00:33] - Dev Agrawal
Um, a decent bit.

[00:00:34] - Anthony Campolo
I've—

[00:00:35] - Dev Agrawal
I have like 4 to 3 to 4 AI-related blog posts, um, some published, some in the pipeline, um, building, uh, like a multiplayer multi-agent collaborative app. And yeah, just like getting deeper and deeper into AI every single day, I feel like. I've been playing with Hermes on a brand new Discord server for the last couple days. Yeah, it's fun stuff.

[00:01:02] - Anthony Campolo
How about you? Yeah, no, that's great. Yeah, I've been keeping busy as well. I've been working on these 2 blog posts for the— so it's called Systems and Signal, or Signals I think is what it's called. I might share that a little later, but I've been working on one on the AgentAuth protocol from the BetterAuth team, which has been really interesting. Glad I picked that topic 'cause it's something that I wouldn't have known much about otherwise. I haven't tried to build any sort of auth with agents. I never messed around with auth and MCP. I remember people talking about that at the time, especially like Kent. And yeah, it makes sense why our current auth is just not set up for agents 'cause it was created for humans, you know? So something new in some respect has to be built. It's just a question of how different does it need to be, you know? So that's cool. And then I have a PowerSync one coming up, or a sync engine one coming up that was inspired by a talk you and I had. So we'll get into that probably on a later episode. But, um, yeah, aside from that, just been working on some auto show stuff in the background. Um, I have— I think I told you this last time— I transcribed my entire catalog of content now. And now I'm actually working on like transcription benchmarks between all the different services. So I was like, I have He's like 10 integrations, but if I'm trying to think of like, what will be the ones that are actually the highest quality so I can just use those and kind of average across them to get like the best quality without having to go through hand by hand for each one. So that's another thing we'll show later. And then yeah, the Auto Show front end V2 is pretty close to being ready. I wanna get my wife to start using it very soon. So yeah, I feel like I'm juggling a lot of things, but for the most part, like it's all going well.

[00:02:48] - Dev Agrawal
Nice. Yeah, I remember the BetterAuth team kind of like publishing this, uh, agent auth protocol thing. And the most funny part for me was that I feel like within a span of a week, I saw like both the BetterAuth, uh, BetterAuth and Clerk, they both released an agent auth protocol at the same, like at the same time. I haven't looked like into either of them at all. But it was just funny, like, uh, yeah, it's, I guess me and multiple companies are kind of like jumping on the same kind of bandwagon or trying to solve the same problems. I don't even know how similar they are. I haven't seen any interaction between them. It's just like, yeah, both of them trying to, uh, define some sort of a protocol in this space. Maybe they end up collaborating on that at some point.

[00:03:38] - Anthony Campolo
Interesting. I mean, I'm looking at their docs and they have like skills section. They have an MCP server integration. A lot of stuff on MCP. So I assume it's something to do with that. I don't think they would have built their own actual protocol the way—

[00:03:51] - Dev Agrawal
No, I think they have. I don't think it's on the thing, on their documentation yet.

[00:03:56] - Anthony Campolo
Where do they share it?

[00:03:59] - Dev Agrawal
If you go to the CEO's— I'll look through the— I saw the CEO Colin talk about it on his Twitter. So I'll have to look for his tweet about it.

[00:04:15] - Anthony Campolo
What's him? What's Colin's last name?

[00:04:17] - Dev Agrawal
Colin Sidoti. But it's his Twitter is just Tweets by Colin.

[00:04:25] - Anthony Campolo
There it is. Yeah, like I know I follow him. Let's see.

[00:04:29] - Dev Agrawal
I'll probably have to scroll up a decent bit to find it anyways. Yeah, that was just a funny incident.

[00:04:38] - Anthony Campolo
You can probably scroll through his thing to see what it was.

[00:04:41] - Dev Agrawal
Yeah, I mean, it's an interesting space. I definitely agree that a lot of the things that we have, a lot of the infrastructure, the protocols that we have today, obviously they were never built for agents because agents didn't exist until a year ago. So a lot of stuff has to be rethought from— I don't know if rethought is an actual word, but to be thought—

[00:05:05] - Anthony Campolo
rethought. Yeah.

[00:05:07] - Dev Agrawal
Okay. Yeah. Rethought from scratch. But, um, everyone's gonna be taking different shots at it and, uh, a year from now, all of them are going to be probably wrong and something else entirely is going to come out on top, which is kind of what happened with MCP.

[00:05:22] - Anthony Campolo
That's how it always goes. Okay. I found it. This is useful actually. You can hit the grok button on someone's Twitter profile. And I just asked, yeah, did he announce a new thing? So it's called Agent Pass, an open protocol for agent authorization.

[00:05:35] - Dev Agrawal
Let's—

[00:05:36] - Anthony Campolo
agents authenticate to third-party services on behalf of users without exposing long-lived credentials to the agent itself. Yeah, this is exactly like Agent Auth, the full specification meant to solve the exact same problem. That's funny.

[00:05:49] - Dev Agrawal
Yeah, I wonder how much overlap they have.

[00:05:53] - Anthony Campolo
Yeah, I just have to look at this. Yeah, probably should include a At least a little explanation of this in the current blog post. I'm glad I found out about this. So this has, it has a harness protocol, a service protocol, and an authority protocol. So that's definitely different than the BetterAuth one. The BetterAuth one is just like a single protocol, I believe. It doesn't, I think, have much to do with the harnesses.

[00:06:18] - Dev Agrawal
Okay. Yeah, so maybe like attacking kind of the same problem from different angles, seeing what they can come up with. Um, yeah, it's, uh, it's gonna be interesting to see where the space goes. I know Cloudflare has been trying to do some stuff to, um, uh, I don't know, like make— try to make agents more of a first-class web citizen because like that obviously like they're the main company that try— that, uh, offers the, the bot protection thing. Like, hey, we, we'll make sure that your users are actually humans, but Uh, but that's when bots were undesirable. Now people actually want bots on the internet. So, uh, yeah, things are changing very fast.

[00:07:03] - Anthony Campolo
Yeah, and that's kind of what the stuff we were looking at last time, like with the different bot things you can put in your robots.txt now.

[00:07:11] - Dev Agrawal
Yeah. Um, cool. But, uh, we want to talk about, I guess, sync agents very quickly, and I'm really excited to see what's going on with AutoShow.

[00:07:22] - Anthony Campolo
Yeah, yeah, it's been a lot of development and it, it does a lot of things now.

[00:07:29] - Dev Agrawal
Nice. Okay, uh, should I start with sharing my screen for the blog post or do you— okay, uh, I'm— let's see, Chrome tab. There it is. Okay, so this is a blog post that I wrote, um, last week. I've— that I've kind of been thinking of for a while. Um, I've been tweeting about this for a while as well. Um, but yeah, basically like the idea is that if you, if you're building like any sort of an AI app, or especially if it's like an AI chat app, uh, there's a certain level of like infrastructure, uh, requirements or discipline that goes into like, um, making it actually reliable in many ways. And the more you try to solve those problems, the more you basically reinvent your own sync engine. And, uh, I kind of went— I kind of saw Theo go through this entire journey last year where he started with like a very minimal, um, kind of local IndexedDB setup.

[00:08:34] - Anthony Campolo
Um, and this is basically T3 Chat, right?

[00:08:37] - Dev Agrawal
T3 Chat. Yes. Yeah. So he basically, like, that's basically what he ended up doing, like, uh, build his own sync, a little sync engine. That got super, super complicated. Then he moved to Convex and everything got so much better. Um, and yeah, Convex is like almost a sync engine, not entirely, but that is something that we talked about in our first sync engine episode.

[00:09:00] - Anthony Campolo
That was one of the things I asked you, like, what does Convex have to do with all of this? And if I remember correctly, Convex is more like the backend versus PowerSync, which is more providing that client sync part that connects to the backend.

[00:09:15] - Dev Agrawal
Yeah, and there's going to be an integration between Convex and PowerSync soon as well. Um, but yeah, before I get into this, like, yeah, obviously you've been building AI apps for a while as well, and not just chat apps, but you've been building multimodal apps, so like audio, video, and everything in between. So maybe you have some insight here as well, like, okay, what, what does it actually take to to make good reliable AI apps that can actually survive things like, um, like, like, I don't know, spotty networks, hitting refresh, or like sending things twice? I don't know.

[00:09:52] - Anthony Campolo
Like, what's your experience? My stuff, there's no agents in the mix at all, and it's very much the way I kind of have approached it is I'm trying to expose all of the AI APIs to users In a way that makes it very simple for them to interact with them, for them to kind of mix and match them and combine them to each other. So I'm kind of treating it like just a series of endpoints that you hit with different prompts that the user can provide to tell it like what to create. And so it's not, it hasn't required necessarily a sync engine. The thing that it does do is though, is it generates lots of different artifacts and lots of different file types. That need to be saved in S3 and also stuff being saved in databases, and they all kind of have to interact with each other. Because a lot of times now, what's interesting is that every modality feeds into every other modality. So you have text-to-image, you also have image-to-image, and you have text-to-video, and you have image-to-video. And then you have also text-to-music now and all these different ways of having them kind of interact with each other. So yeah, they're There needs to be some way to kind of have that all be connected together, but it's not so far. Everything I've built has nothing really different from a traditional full stack web app using just third party services. So all the AI stuff is all happening just within the third party services. So I don't know how necessarily relevant the sync engine stuff is because I don't have an AI agent that's going out on someone's behalf to like do a bunch of tasks and return back, you know.

[00:11:25] - Dev Agrawal
Okay. Okay. Yeah, I think like right after this, if once we start digging into AutoShow, we can uncover more of that. Yeah. But so the main thing that I try to focus on in this blog post is the idea that basically like, okay, let's go through this like quick flow of how you might build things today and we can zoom in a little bit. So if you were building like kind of an agent or a chat app, what would happen is like you submit your prompt, you click generate, the client sends a request to the server, server calls the LLM, and eventually LLM starts streaming tokens. And the server basically, once the server starts receiving those tokens, like there's a branch where It sends those to, like, it streams those tokens back to the client. Um, and the client like renders them in the UI in real time. And then once like, so what's, go ahead.

[00:12:27] - Anthony Campolo
Yeah. So then you save it to the database. So what you have here, this is like the very first thing AutoShow did. You would have first, you'd have a transcription that would be included with a prompt. And then that's what's kind of sent to the LLM API. I wouldn't have it stream tokens back though. I would have it generate the entire thing and then give you a page back. That has the, because they're only getting one response. It's not a back and forth. So that's also what makes AutoShow kind of different. You're essentially always doing these like one-shot kind of generations. You, there's never really a back and forth type chat interaction. At least not yet. There will be eventually chat with your show notes feature so that then we'll have a chat window that will be interacting with like embeddings and stuff. Basically.

[00:13:11] - Dev Agrawal
Yeah. Uh, so, okay, so, so you save the result in the database once like the entire response is generated, um, and the, the user on the, uh, the user on the other end has to wait for the entire thing to complete before they see anything instead of like seeing the result as it streams in, right?

[00:13:31] - Anthony Campolo
Yeah, exactly. And part of that also is because they're not just going to be getting an LLM output, they also may be getting an image. As well, or other things. So once they've selected what they want for the LLM, they'll have more things in the form to select while it's generating. Actually, technically none of it generates the background until you create right at the end, but all this stuff can work pretty quickly if you use the faster models, I find. So it's not, like I said, it's not like a chat back and forth interaction. So you're creating a kind of more substantial artifact at the end. So waiting a couple seconds is not as big of a deal, I feel like.

[00:14:08] - Dev Agrawal
Right. I'm sorry if there was some background noise. A car alarm randomly went off. Um, okay, cool. Um, give me a second here. Okay. Uh, yeah, so, uh, for like a more, um, I don't know, would you say that, you know what, we'll, we'll quickly get back to AutoShow, uh, in a, in a, in a bit because I'm, I suspect that there's still a place for a Sync Engine Yeah, in an app like that. Yeah, but the main thing that happens in this kind of a setup is that, uh, the client made an HTTP request, uh, the server made an HTTP request, the LLM starts streaming back, and the server starts streaming to the client. This entire thing happens in a single HTTP request, right? Which means if that HTTP request for any reason breaks this entire thing kind of breaks. The server, like, note, the server kind of like stops the stream there. The LLM response has been cut off in the middle and you probably didn't even save anything to the database because it, you didn't get to like finish the response and it's now just lost. So you, the only thing you can really do now is like go back and send the same prompt again and start the whole thing over.

[00:15:27] - Anthony Campolo
Yeah, this is one of the reasons why I avoid streaming also, because then I get to avoid this entire problem.

[00:15:32] - Dev Agrawal
Yeah, exactly. Um, I mean, streaming makes for a really nice UX because you can see everything happening in real time, but yeah, it's fragile to say the least. Um, and then the other one is that, um, a lot of times, like, I'm, I'm on my phone talking to ChatGPT and, uh, Like maybe I'm outside or maybe I'm like on the road, I come back home, I'm waiting for, like I sent it a prompt, it's still generating the response, but I close my phone, I open my laptop and I can't see the result because the output isn't finished yet. And once the output finishes, I have to refresh the page before I can see the result on my screen, on my laptop screen. So very poor like kind of cross-device syncing. They have kind of, fix this, um, but like not really. ChatGPT doesn't really do a great job at this.

[00:16:27] - Anthony Campolo
And then this differs for things like Discord where you'll see the text being inputted on each device kind of in sync with each other.

[00:16:35] - Dev Agrawal
Yeah, exactly. Um, so yeah, very much like, uh, like most AI apps kind of have like this single device, um, real-time thing. And if you try to, uh, do anything on a, on a second device. It's just not gonna work.

[00:16:51] - Anthony Campolo
Oh yeah, I definitely— I'm switching between the two a lot, so I've definitely noticed a lot of these issues. Most of the time I just will go out of the chat and come back in once I know the message is done, and then that, you know, then it will update. So, but yeah, it's definitely annoying.

[00:17:06] - Dev Agrawal
Yeah, exactly. And now if you think— if you take that to like a something more long-running like a Codex or a Claude Code, uh, on the, like, in the cloud, um, that's, that's not something— that's not, uh, an AI that runs for like, uh, like 30 seconds to generate a response. That's something that can run for hours for on a single task. Um, so the more, the more like you try to do these like long-running, longer horizon things, the more this becomes a problem because now you definitely want to be able to like, I mean, you definitely don't want things to be fragile because I don't want to send Codex a request and then have like, have the window open and not touch it for like forever. Like we, you've seen a bunch, we've probably seen a bunch of like those screens where don't close this browser tab or your work will be lost.

[00:18:03] - Anthony Campolo
Yes, that's actually, that was an issue with the first version of Auto Show and a big part of V2 was fixing that issue. So there's a whole job system now. As soon as something starts generating, there's a job that is going and you can refresh and come back and you won't lose the same thing. Yeah.

[00:18:20] - Dev Agrawal
Yeah. So you are very familiar with the problem I'm trying to talk about so far.

[00:18:24] - Anthony Campolo
Yes. Yeah, yeah, for sure.

[00:18:26] - Dev Agrawal
Perfect. So the idea with like sync engines is that the response should just be a state and we shouldn't really need to think about like streams as much because that kind of complicates things. Things. And this is actually similar to what you, what you were talking about in terms of jobs. So this is how, um, uh, kind of like the agent interactions work in PowerChat, which is a multiplayer chat AI agent, uh, agent app that I'm building. Um, basically instead of making an HTTP request from the client to the server to like get, uh, talk to the agent, the client just writes the message into the, into the local database. And that's it. The client doesn't wait for a response. It doesn't handle streaming. It doesn't like, uh, make it— it doesn't even like make any request directly in my UI component. I just write it to the database like this. And from that point, the sync engine picks it up. So in PowerSync in this case, um, because it's responsible for making sure the client and the server state are in sync. So as soon as I write something to my— as soon as I put the message in my client database, it will take the— it will take that mutation, send it to the server, and get pro— and make sure that it gets written to my actual database on the server side, right? Now the backend picks it up, and when the backend actually receives it— and again, this is happening like kind of in the background because it's a sync engine. The client mostly doesn't even know about it, but the server looks at it. Okay, I sent a message in this channel. Clearly I want to trigger an agent. Let's add a new message here, which is from author type agent. So this was a user message. Here the server sends an agent message and with like a— just a placeholder thinking. So the server adds this message It requests, or it sends a request to the AI, to the LLM. We get the stream back from the LLM and every time like we get a token or we get a chunk of text from the LLM, we just write it to the database. No other code. The server receives the request or the mutation that I added something, the user sent a message, it calls the AI, And, uh, it just writes each, each, uh, like response or each, um, each chunk of the token stream back to the database. And that's it. There's no like server-client streaming. Uh, the client here just simply queries the database, the messages table. It has all the messages and it renders them to the UI. So the UI doesn't even need to know about a stream. It doesn't need to know about AI. It doesn't need to know about tokens or like anything like that. So this is like the simplest possible thing you could do on the UI side, which is query a bunch of messages and show them on this, on the UI.

[00:21:36] - Anthony Campolo
Yeah.

[00:21:36] - Dev Agrawal
So it's, it's like it handles all the edge cases where things run in the background. You can refresh and everything still works. You can change your devices from phone to phone to laptop or desktop, whatever. You can even have like 2 people in the same channel looking at the same message. So all those edge cases are handled at the same time. The code is pretty simple. So this, this is kind of like, for me, it's the best of both worlds where you get all the kind of fancy things. Okay, yeah, here, multiplayer by default, resumable everything. So close your laptop, open Open it on your phone, you don't never lose anything. Offline queuing, which is like if even if I'm offline, I can send a message and as soon as I'm online, it'll get synced automatically and it'll it'll go to the backend. It'll request a response or generation from the LLM and it'll start putting that in into the database and obviously simpler client code. What do you think about that?

[00:22:46] - Anthony Campolo
No, I think it's cool. I think, um, the— is definitely like for people who do a lot of streaming stuff, I can imagine it would be really, really useful. So I guess I'm just wondering in what cases it's useful. I guess for, for me, the thing I would be getting if I put this into AutoShow is that you have that instant updates between like different devices because that's, that's the one thing that The way I have it set up right now, it's just like, um, you would need to refresh the page, just like get the new episode or whatever. So it would be more kind of interactive in that sense. I guess I just don't know if that's like really worth it is kind of what I'm thinking about right now, you know, like how important is that? Is that really, you know, for, for my app's use case? But I'm still open to be, open to be convinced.

[00:23:30] - Dev Agrawal
Yeah. I mean, yeah, we can, uh, we can go and get into that a bit more, but Uh, to me, like the, the, honestly, the biggest selling point of all of this is not even that you get like all of— okay. Yeah. I should put the focus here. Like this is to me the biggest kind of selling point. Like, uh, as a developer, I honestly like developers were never really good at caring about UX anyways. Uh, like we, we always care more about our own experience than the users. Um, so some part of me is like, oh, this is so much simpler in terms of like the code I have to write. Um, but obviously everything else is a good bonus as well. Um, yeah, uh, there's some stuff here about latency and write volume that's not like too big of a concern right now. But yeah, that's, uh, that's kind of all I had for this blog post. Um, I'm— yeah, so I— this is probably a bit more focused on kind of the foreground real-time, back and forth interactive chat apps. There's obviously a lot of other kind of things that people do with AI, like mostly run them in the background, like what AutoShow does. So I, yeah, I think eventually I will try to look more into those use cases and address them as well. Yeah, I was speaking off.

[00:24:55] - Anthony Campolo
Yeah, no, that's cool. And, um, you had a chat example also that I don't think you linked to it in there, but that would probably be useful having a link to something or some sort of like repo or something for the code examples. 'Cause it's a, that's, and that's just how for me, I always like, I don't like technical blog posts that just have code examples that are like free-floating, don't do anything. That's just my preference though. Lots of articles are written that way and it's a lot more work to have to maintain a whole repo. So.

[00:25:25] - Dev Agrawal
Yeah, definitely. Yeah, I have like a footnote here with like ParChat sources available. Um, there's a link to the GitHub repo.

[00:25:32] - Anthony Campolo
That's actually— that's exactly what I was hoping for. Yeah, can you click that then just as a reminder of what we're, we're talking about here?

[00:25:38] - Dev Agrawal
Yeah, so this is the part— I don't have it deployed anywhere because it doesn't have like real authentication yet. Um, but yeah, this is, this is almost like I don't know, a Slack replacement almost, where agents are like kind of a first-class citizen within like a multiplayer chat, uh, with channels and everything. Um, uh, we can probably do like a whole dedicated, uh, stream going over this.

[00:26:07] - Anthony Campolo
Um, this is actually some of the things I could imagine being really useful because there's some parts where with AutoShow that I want to have the ability to have like almost like cron jobs running so that you could check basically like you could subscribe to a YouTube channel and then whenever like subscribe to Ryan's and every time he puts a new episode out, it would instantly run a new thing or run like a preset prompt based on how you want your show notes to be created. So get like the chapter titles out is what I would want. And then you would need somebody to be notified by that, which right now everything I'm just having go through like email. But with something like this, you would have kind of like a centralized hub where you get like messages back from your agent saying, hey, you have this new content ready and stuff like that.

[00:26:51] - Dev Agrawal
Yeah. Yeah, I think, I think a lot of different AI apps are kind of get— getting into the autonomously running overnight kind of like, or yeah, automations basically. I know I have like basically every, like Codex, I think started with automations. Now Claude Code has it as well. And eventually I'm sure others will as well.

[00:27:10] - Anthony Campolo
Let's check that out. Yeah, I don't yet have my agents doing stuff overnight yet. I'm just sitting there like a chump on my computer.

[00:27:21] - Dev Agrawal
Yeah, I mean, it's, uh, that's a whole different rabbit hole, uh, to go down. Autonomous agents and stuff. I've just barely started experimenting with the, the sort of like overnight agents. Uh, dark software factory is what some people are calling it. Interesting.

[00:27:39] - Anthony Campolo
Give me just one second to fix up my windows and then I'll start screen sharing.

[00:27:44] - Dev Agrawal
Cool, that's, uh, almost on the dot 30 minutes. 27. Okay, all right, so, okay, AutoShow. The last time I saw AutoShow was, I, I guess it started as something where you plug up, uh, you, you give it a video and it gives you, gives you like show notes that you can, uh, use as a description, timestamps, chapters, or like social, social posts. But from what it sounds like, it's gone through some major evolution.

[00:28:20] - Anthony Campolo
Indeed it has. Oh, and I actually— let me— I can share my sound, I think, if I do it through the window. So let me do share. Um, is there—

[00:28:34] - Dev Agrawal
yes, share system audio. That's the thing.

[00:28:37] - Anthony Campolo
Okay, so be careful, screen audio, you have a guest, they will hear themselves. You're sharing everything you hear, including their voice. This won't happen if you share browser tabs, which will only share audio from that tab. Okay, I think that's fine.

[00:28:49] - Dev Agrawal
Uh, I don't think I hear myself, so we're good.

[00:28:53] - Anthony Campolo
Okay, hopefully There's nothing weird happening on the backend.

[00:28:57] - Dev Agrawal
Yeah, I only see VS Code right now though.

[00:29:01] - Anthony Campolo
Yeah, that's, that's perfect. That's, that's what I want.

[00:29:04] - Dev Agrawal
Okay. And is that actually VS Code or is that like Cursor? Is that—

[00:29:08] - Anthony Campolo
it's not Cursor.

[00:29:09] - Dev Agrawal
Okay.

[00:29:10] - Anthony Campolo
Yeah. Okay. So I have—

[00:29:12] - Dev Agrawal
I haven't looked at VS Code in a very long time.

[00:29:15] - Anthony Campolo
Are you using Cursor now?

[00:29:17] - Dev Agrawal
I was using Cursor for a long time. Now I'm mostly on Zed.

[00:29:22] - Anthony Campolo
Oh, is that interesting?

[00:29:23] - Dev Agrawal
Yeah, but also I don't write a lot of code anymore by myself.

[00:29:28] - Anthony Campolo
Yeah, I mean, sure, same. Uh, yeah, for me it's just what I'm familiar with, so that's what I'm sticking with now. Okay, so I'm kind of planning on like having the CLI finally be released as like a v0.1. So this is a, this is a very rough release page so far. All this is AI written, so there's gonna be a lot of changes here. But there's this part here actually I thought turned out pretty good. So it says AutoShow is a pipeline-oriented CLI that can ingest a target, classify it as media, document, article, HTML, image, batch source, or direct prompt input, then run the relevant processing steps, persist every artifact to a timestamped output directory, and record step metadata, cost estimates, actual cost and timing in versioned manifests. So I also kind of accidentally built a benchmarking tool, which is what's really cool now because I'm able to take all of these different services and actually benchmark them in terms of like how long it takes to get a response, how much is it costing? Because every, like, like every single transcription company says that their tool has the, is the best transcription tool, has the highest accuracy or whatever. Like, um, it's definitely not the case.

[00:30:39] - Dev Agrawal
Yes. So, um, So it sounds like you have like separate pipelines for different types of media.

[00:30:44] - Anthony Campolo
Yeah, so we'll get to that. Okay, so it supports single targets, directories, markdown, text, URL lists, YouTube collections, podcast feeds, local text files, prompts-driven image, video, and music generation. So a lot of that is kind of gobbledygook until you see it in action, but, um, these are the main— and actually I'm gonna do the Actually looks better with the help output. So let's check this out.

[00:31:14] - Dev Agrawal
Actually, wait, that's a thing? Bun as help?

[00:31:18] - Anthony Campolo
So as is the CLI. So I'm just running it from Bun. It's not installed as a global.

[00:31:25] - Dev Agrawal
Got it.

[00:31:26] - Anthony Campolo
So the main— these are the main processing steps. So they kind of go in order and actually Let me just start by running the first couple ones, 'cause it'll be clearer. So the first thing you can do, let me just get one of the YouTube URLs. I actually don't have any in here yet. Okay.

[00:31:55] - Dev Agrawal
There's people cheering in the fraternity house next to me. Yeah, yeah, I guess Monday evenings are Greek life, and I think it's like a chant for the fraternity itself. I don't know, I was never part of frats. I don't know what they do. Yeah, okay, so I'm guessing this is pulling metadata for that YouTube video.

[00:32:23] - Anthony Campolo
That's what it should do. All right, sweet. So let me actually do it where it's gonna save it. This is the thing that these freaking— these LLMs do when you ask them for a YouTube link, they'll give you Rick Astley. It's kind of funny actually.

[00:32:39] - Dev Agrawal
Wow. Wait, is that— is that not actually, uh, uh, the Rick Astley link, or is it?

[00:32:46] - Anthony Campolo
I mean, it's okay, right? Original. Okay, so this is the very first step. This is— it'll just give you the metadata. So back when I first had this tool built, this was also the first step because it would take that metadata and then build a Markdown front matter thing so that at the end you would have kind of like a full page created. So, but it gives you now in JSON so you can kind of do, you can be more flexible in terms of what you do with it. So it will grab the video title, um, the duration, the channel, the URL, publish date, thumbnail, channel URL, and then the description. So that's the first step.

[00:33:23] - Dev Agrawal
Does this count as a meta Rickroll?

[00:33:28] - Anthony Campolo
Yeah, it is. That's funny. So if you then— the next step then is download. So this is if you just want to down— so this is basically like just a yt-dlp wrapper, so it will download as yt-dlp and then you'll have the file. So this is what will eventually be used for the transcription. So for the most part, you usually won't run either of those 2 commands. That's more so if you just want to really separate the workflow atomically. But the main thing you'll do is— so I've broken it down even more. It used to just be one kind of pipeline that would include then the transcription, then it would feed it to the LLM. But there are times that I would just only want to do the transcription part. So you can now just do— so you'll do fun astt. So that's speech-to-text.

[00:34:28] - Dev Agrawal
Speech-to-text.

[00:34:30] - Anthony Campolo
Yeah. So all of the commands now are all pretty short. And there's a parallel one with speech-to-text now that is OCR. And so OCR is something that you couldn't do with the old versions of AutoShow either. It only took video and audio input, but now it takes document inputs as well. Nice.

[00:34:49] - Dev Agrawal
Like PDFs?

[00:34:50] - Anthony Campolo
Yeah. Exactly.

[00:34:52] - Dev Agrawal
Yeah. Does it take images? Okay. It was already able to take images.

[00:34:57] - Anthony Campolo
It'll take, yeah, I'll take JPEGs or PNGs or TIFFs and it'll take PDFs. Also takes EPUBs so we can work with books and takes Google Docs or not Google Docs. I mean Microsoft Docs, like doc. Docx, um, and PowerPoints, and, uh, I think, uh, Excel sheets too. So you could feed almost any freaking file you could possibly think of at this point.

[00:35:22] - Dev Agrawal
Cool. Um, and I'm guessing like, yeah, I'm guessing like you can configure exactly what model it's using for doing these things, and there's some default settings that you have kind of benchmarked and used, like, okay, this is a good default, but I'll let you configure Yeah, so right now the default it's using is, uh, it uses Whisper as the default under the hood.

[00:35:46] - Anthony Campolo
So it starts with, um, the local version, um, if it can, and it will fall back to setting it up even if you haven't configured it yet. And then Reverb is also available, which can do local, um, speaker diarization, which is really nice because that's like a huge problem with Whisper. And then there's a crapload of different transcription services because this is one of the main things I was using it for is transcription. So I really wanted to know which ones were the best or not. I'm going to end up probably removing half of these now that I've benchmarked them and create a separate repo that has like just benchmarks and that I can kind of maintain separately. So if we look at— actually, let me show you the most recent one that I ran. This is really interesting. So this includes I think 8 or 9 services because some of them have 2 models in there. And if you see here, basically AssemblyAI is blowing away everything else. It's getting like almost 100% correct. And I'm pretty sure I know the reason for this. That model is only 2 months old. It was released in the beginning of February and almost every other model here is at least a year, if not 2, if not 3 years old. What's funny is the other most recent one I believe is ElevenLabs and ElevenLabs is terrible apparently. And I've run a couple of these. This is the only one I've run. It's gotten last place every time. So I think part of the reason for that is that they were originally focusing on text-to-speech and then have kind of branched out to these other things. So I think they just kind of felt like they needed a transcription model and they wanted to like build their own for whatever reason. And then they just didn't quite pull it off that well. So makes sense. So this is kind of giving me really, really useful Insight, and you have ones that people have never even heard of, like Soniex and Gladia. Soniex especially is, um, it's the cheapest one that they have, and it also tends to have some of the highest quality. So, and then Gladia is more expensive, but it has better processing time, and, and so on and so forth. Your like AWSs and your Google Clouds, I, I, for a long time I didn't include those because I didn't want to have to mess with their services. But I eventually decided to just to, so again, the benchmark and they're terrible. They give you really low accuracy and they take ridiculously long. They take like 10 times longer. Google Cloud takes 10 times as long as almost all the other ones.

[00:38:10] - Dev Agrawal
And expensive.

[00:38:12] - Anthony Campolo
Wow. Yeah. And it's really expensive. Yeah. So yeah, so this is like, you know, this is a really, really high value benchmark, at least for, for me. So I'm going to eventually do this with all the different services because especially for image, video, and music, those are even more expensive. It can cost you like 10 cents per second of video processing. You're paying multiple dollars just for a single clip.

[00:38:40] - Dev Agrawal
Yeah. All these are cloud-hosted models. Do you have a similar one for local models?

[00:38:54] - Anthony Campolo
So that's one thing that I actually thought of just when I was working on this last time that, yeah, I need to get the Whisper and Reverb ones in there as well. Part of the reason why those aren't in there is because this is just benchmarking the diarization models also. So that's why you see it has speaker-aware WER. It's also comparing: are they getting— are the words being given to the right speaker? Not just are the words correct, but are they tracking the number of speakers correctly? So it's slightly a higher level. So it would be harder to benchmark against Whisper because it's just giving you, I would have to do a similar benchmark where these are just giving you non-diarized outputs. But I am gonna probably throw it in there because I should throw the Reverb one in there because that also has diarization. But this is something I just did a couple days ago. So that's a good call out. But yeah, anything else?

[00:39:45] - Dev Agrawal
This is pretty cool.

[00:39:46] - Anthony Campolo
I move on.

[00:39:48] - Dev Agrawal
No, we can move on. This is pretty cool.

[00:39:50] - Anthony Campolo
Yeah, totally. So if you then flip that to OCR, you can do it with, like I said, all the documents. What I am going to probably do is one of the last things I need to do before the release will be ready is I'm going to combine the OCR and STT commands into a single command called extract. So you don't have to think about whether you're doing one versus the other. You'll just point it at a file and it will know what kind of file it is and know what to do with it.

[00:40:18] - Dev Agrawal
Nice.

[00:40:18] - Anthony Campolo
Let me show you what this is. So this is actually just a— this is the PDF from AWS's docs. This is so stupid. They don't offer any way to copy their docs beyond letting you just print out a PDF. This is one of the first reasons why I even built the PDF functionality in the first place. I wanted to do OCR on the Amazon docs so I can get the Amazon OCR tool to work. So that's, that's what it's gonna— that's what it's gonna—

[00:40:52] - Dev Agrawal
never change, Amazon, never change.

[00:40:57] - Anthony Campolo
Okay, so then that— this is pretty simple, it just extracts the text and then, then you got it. So this also has, um, a local option that it's using by default and then some paid services as well. I haven't run the benchmark on this one yet. This is the next thing I wanted to compare. But, okay. Yeah. This doc is super messy. I need to update this one still. But the main— yeah. It doesn't even say anywhere where all the services are. But this tells you all of the doc formats that it accepts and kind of which things it's gonna route it to. Based on, on that. So this, this doc needs to— I need to put some work into it. But, um, there's some in here that I didn't even know it supported, like RTF, because LibreOffice is one of the first PDF tools I think I put in here to work with like EPUBs and stuff. One cool thing is that if you're giving it an EPUB, you can get it to extract it by chapter. And then I built a custom thing in for PDFs where it will figure out a way to detect the chapters by reading the table of contents and then discovering them. I'm building this functionality where I can take a book, break it up into chapters, and then take each of those chapters and give it a prompt to generate lyrics. Then you have an album's worth of lyrics based on a certain topic, and then you can generate songs based on all of those lyrics. You got an instant concept album. I think that's going to be a super cool feature.

[00:42:30] - Dev Agrawal
Definitely. I wanna do that with the Harry Potter series.

[00:42:34] - Anthony Campolo
Yeah, there you go. You could create your own Harry Potter Hamilton.

[00:42:38] - Dev Agrawal
Yeah. I mean, I was thinking of converting books into audiobooks, but converting books into concept albums is—

[00:42:43] - Anthony Campolo
Yeah. And you could also do that. So that's where we'll get to the text-to-speech stuff as well. Okay. So we don't need to go. So there's not— the last thing actually with the OCR is that you can also feed it just a link and it uses this tool Defuddle. To extract that. So this is just pointing at my blog homepage and it pulls it out into nice markdown for you. And I also have an integration with Firecrawl, which is a service that does this with like an API key. And for OCR, I also have it supports Mistral's OCR tool and GLM's. They're the ones behind them. Or there are the big— GLM is the models. Z.ai is the company. Yeah, ZAI. Yeah. So they have an OCR model.

[00:43:31] - Dev Agrawal
So are these also using cloud models or are these local as well?

[00:43:36] - Anthony Campolo
So each of them have both. So Defuddle is a local model and then Firecrawl is hosted. And then for OCRMyPDF and PaddleOCR, those are 2 both local open source tools that you can use. So essentially everything for OCR and transcription gives you local ways to do everything and also local LLMs, which unfortunately kind of suck. And there's also a local TTS option as well. It does not have local image, video, or music options yet.

[00:44:13] - Dev Agrawal
That makes sense.

[00:44:14] - Anthony Campolo
Those you just can't really run on a MacBook. So I have not built those in yet because I won't be able to use them, but If I have a nice rig at some point, I'll probably have ways to do that locally. But, uh, yeah, so most of the functionality you can do locally up to a certain point.

[00:44:33] - Dev Agrawal
Mm-hmm. Cool. Yeah, this is pretty cool. Yeah, I have like a 64 GB M4, which can probably run like some decent size models, but I, I don't think video models can still be Uh, like video models are probably much bigger.

[00:44:51] - Anthony Campolo
Yeah, totally. Uh, okay, so since some of these I already, already ran ahead of time, um, so if we— now the write command is where things kind of all combine. So the write command is what the original AutoShow was because it would stack all of those previous steps together and then it would feed that to an LLM. In the last place. So that would be like if you ran this. So this is going to take a URL, which is like a 10-minute-long podcast recording I have where I'm talking about like Lambda School. And so we see here it's using Whisper, so there's a Whisper progress bar, and then it's going to take the transcript and a prompt and then feed that to ChatGPT 5.4 Nano. So, and then also if you look at the— actually, no, it doesn't. It just shows the cost at the end. So it tells you here that it took about 10 seconds for Whisper to transcribe and it cost $0. It's local. And then the LLM took about 12 seconds and cost point— this is $0.22. Yeah. So, yeah.

[00:46:09] - Dev Agrawal
So, not 22 cents.

[00:46:10] - Anthony Campolo
Not a whole lot. And then you'll see the metadata here. There's a— let me go to here. So, this is the— there's a bunch of metadata and a lot of information in terms of predicting the cost and then getting the actual cost. Because you're always going to be guessing to a certain amount because it's going to depend on the exact amount of tokens. But this is the transcription here, and then this is the prompt that is going to get fed to the LLM. This is pretty much exactly the same as the very first time I created this prompt because this is just the default. It has a short summary, which is like a one-sentence description. Then one paragraph description and then chapters. Then here's the result. Right now it's given the result in structured JSON. Actually, sorry, this is the transcription result. This is the text result. Here we go. I have them all using structured outputs now. I still have to go— I still have to build in a thing where it takes that and actually gives you the Markdown file finally for it to kind of be feature parity with the first one. But having it do this is better so you can get more guarantees on what you're getting back and then do more interesting things with it after the fact. So, yeah, so the speaker explains how learning React, GraphQL, and Redwood came through Lambda School, sharing nuanced advice on bootcamps and dropout churn. Yeah, so this is the original thing that the tool did. So the right command is the original kind of version. And then if you also feed it additional flags, you can have it do text-to-speech with the generated output. And then you can also do text-to-speech just based on arbitrary input. Like if you have like a Like you were saying before, if you wanna create an audiobook, you could feed in anything into the document one and then do the OCR command, and then you'll have an output that you can feed to the text-to-speech. So this is the— this is a short little example here. This is a short test passage used by the AutoShow CLI. So let me run that one.

[00:48:48] - Dev Agrawal
So this is going to take, uh, what did you have in that document?

[00:48:52] - Anthony Campolo
So it's just some text.

[00:48:53] - Dev Agrawal
Oh, just a test. Okay, okay.

[00:48:55] - Anthony Campolo
Yeah, it's just short little tests with like, you know, 2 sentences that they're gonna say, right?

[00:49:01] - Dev Agrawal
Okay, and it generated a WAV file.

[00:49:04] - Anthony Campolo
So let me know if you can hear this.

[00:49:05] - Dev Agrawal
AutoShow TTS test. This is a short test passage used by the AutoShow CLI end-to-end test suite. To verify text-to-speech generation. The quick brown fox jumps over the lazy dog. Auto. Yeah, of course.

[00:49:22] - Anthony Campolo
So that's if you just feed it your own input, but you can also, if you append it to the write command, it's going to take whatever was generated by the LLM and then turn that into text-to-speech. So I already ran that one before, and for this it's kind of stupid because the thing it generated is I think almost as long as the original video.

[00:49:44] - Dev Agrawal
Hashtag short summary.

[00:49:46] - Anthony Campolo
Episode description.

[00:49:47] - Dev Agrawal
Short summary. The speaker shares how React, Redwood.js, and GraphQL shaped their path from Lambda to jobs, offering nuanced guidance on choosing bootcamps.

[00:49:57] - Anthony Campolo
Yeah.

[00:49:58] - Dev Agrawal
So that's hashtag episode summary because it's like, it's reading the markdown.

[00:50:03] - Anthony Campolo
Exactly. Yeah. So that's something I gotta fix.

[00:50:06] - Dev Agrawal
That's. Um, yeah, so yeah, I probably want to remove the SymbolStorm from it.

[00:50:10] - Anthony Campolo
Yeah, exactly. Okay, so that's— so then the, the text-to-speech stuff kind of follows on from the write command to add like another step into the chain. And then you can go a couple steps further and then feed things like image models to it. And so this one I already ran, but the thing it created was pretty cool, so I think it was this. Okay, great. So this I think was with Nano Banana. So what it did, it kind of created this, which is it basically took the chapters and created a nice little poster. So I thought that was actually not too bad in terms of what it created there. So I'm not sure what the actual prompt was that was fed to that. I wonder if it will say here.

[00:51:16] - Dev Agrawal
Yeah, it should be in the metadata of like what was the input given.

[00:51:23] - Anthony Campolo
Okay. It says the—

[00:51:24] - Dev Agrawal
sure.

[00:51:29] - Anthony Campolo
Okay, I know, I know what to do here because, um, this is one command that I don't use a lot, but, um, oh, because they're, they're— it's like, um, with the LLM step where there's a default prompt and then you can, you can modify that with, with other prompts. So, I just have to figure out where's— actually, I think I might know where it is.

[00:52:02] - Dev Agrawal
Makes sense. Yeah. So, if the idea is like here is some source piece of content, I want an image out of it, I should definitely be able to specify exactly what I want the image for.

[00:52:16] - Anthony Campolo
Yeah, exactly. So, if you want like a thumbnail or if you want, you know, an abstract, blog cover post or something like that. So yeah, this is one thing that I need to spend more time actually coming up with the image use cases myself so I can try them out more. This is, um, because I've been mostly using this to generate text. And, um, now though, though, the image models have gotten really good. It can do a lot of stuff they couldn't do when I first started building this project. Like the, just that one that we were looking at, like there's no way that you could have done this with any of the Any of the first models because they couldn't like write text at all. They couldn't spell like words. Yeah.

[00:52:57] - Dev Agrawal
And I don't think anything before Nano Banana could have produced this.

[00:53:02] - Anthony Campolo
I mean, the latest ChatGPT one can, can do it better. Yeah. And that one came out before Nano Banana, but the like DALL-E, the very, very first ChatGPT ones definitely could not.

[00:53:13] - Dev Agrawal
Yeah.

[00:53:13] - Anthony Campolo
And that was one of the big tells for AI images is that you would just look at the lettering and it would just be like all like run together, like surrealist, and there weren't real letters, you know.

[00:53:22] - Dev Agrawal
Mm-hmm. Yeah, I, I feel like I've still— I've seen the latest ChatGPT model mess up sometimes as well, um, where Gemini or like Nano Banana, just like, it's, it's not just— it's not only good at text, but it can like actually draw infographics pretty well.

[00:53:42] - Anthony Campolo
Yeah, no, Nano Banana is definitely better. It's like, it's way, way, way, way better. Yeah. Because, um, this is something that I've been building with my friends. I think I've mentioned this before, is that we're trying to create a comic book. And, um, I have now— I have a whole pipeline now of stuff that's going to get fed into the AutoShow CLI very soon. So, um, that's a really interesting use case.

[00:54:05] - Dev Agrawal
There isn't a built-in image prompt.

[00:54:07] - Anthony Campolo
Okay, that actually makes sense. So it's basically just feeding the entire text prompt to to them and just having it create whatever it wants. That actually kind of makes more sense. Um, yeah, because the, the reason why I'm confusing this is because the AutoShow, um, the front-end app, um, has built-in image prompts already and you can choose between like 6 of them. But, uh, that's what I haven't gotten in here yet. Okay, so that makes sense.

[00:54:33] - Dev Agrawal
That's on like the front-end side and not like on the server side. You just like pass the configuration. Yeah, it makes sense.

[00:54:39] - Anthony Campolo
Yeah, so that's something I still need to add in here. This is good. It's one of the reasons why I want to go through this with you is to remind me of the stuff I still need to build. But you can just give it any arbitrary image prompt. So this is a sunset over a lake. And also, like, for the transcription, you can do multiple services at once now. So you can— this will do Gemini and OpenAI. I think I had that here. Yeah, so just a sunset over a lake. Yeah, so those look nice, you know. And here's the metadata. And this is actually not Nano Banana. Gemini has another thing called Imagen4. Um, there's a— it has its certain use cases that's supposedly better at that I don't remember, right? I feel like that works exactly like image, and I'll show that in a second, but go ahead.

[00:55:33] - Dev Agrawal
I feel like the main use case, at least for me, the main use case for image generation is less of like, here's a blog post, give me an image, but more of a, um, like I am in process of writing this blog post and I need images to put in between, or like maybe as a header image. Um, I mean, this is, this can probably, like if I point this to my draft blog post, it can probably do that. Um, with like some prompts, right?

[00:56:01] - Anthony Campolo
Because that would be giving it an input like with one of the document types, and then you could have it— you can take— have it take like chunks of it and then generate images for each. Um, that functionality wouldn't necessarily be like turnkey yet, but it'd be very easy to, to do something like that.

[00:56:17] - Dev Agrawal
Yeah, yeah, man, this is pretty cool. I feel like what, uh, what you have here is like a pretty— a very nice set of primitives for any sort of like content transformation. And for any sort of like, it should, like these are really nice primitives to stitch together in whatever sort of pipeline you want at any point. So I feel like what I really wanna do is hand the CLI to my Codex or my Hermes agent. I'm like, here's a bunch of stuff you have for content stuff and now help like just Either figure out how to like best use all of this to help me, or here's how I want you to use this for, uh, like whatever. Uh, either like helping me create content or digesting a bunch of content and like creating summaries and feeds for me.

[00:57:08] - Anthony Campolo
Yeah. Yeah, totally. That's something that I still haven't done yet. I haven't had an agent point at the CLI, but I've been building it in a way where, um, it's going to work well for that. There's actually a specific skill I found that was like how to make your CLIs. Agent ready. And a lot of it was already stuff that I was getting from another thing. There's a CLI kind of like best practices doc that, um, I built a skill from that does a lot of things like ensures that there's like conventions. And the main thing is like, don't, don't, the main things to avoid are interactive mode, which I already don't like. Always allow any command to be run, which is a combination of flags or whatever and options. And then always have the ability to like configure the output. So you can get it in just like JSON or however. And then if, as long as you do those, you're gonna have a lot better time getting an agent to use it.

[00:58:00] - Dev Agrawal
Yeah. And the only thing I would add is like really, really helpful error messages. Yes.

[00:58:05] - Anthony Campolo
Yeah. Yeah, for sure. Cool. So here was the video one.

[00:58:09] - Dev Agrawal
So yeah, video is the most interesting one for me.

[00:58:11] - Anthony Campolo
Neon city street, slow camera pan. And it's gonna be very short. It's only gonna be 4 seconds.

[00:58:16] - Dev Agrawal
Okay.

[00:58:17] - Anthony Campolo
There's no sound.

[00:58:19] - Dev Agrawal
Right. I mean, you can probably combine the, um, I don't know. I guess, uh, some of the videos do give sound as well.

[00:58:29] - Anthony Campolo
It depends on the model you're using.

[00:58:32] - Dev Agrawal
Got it. Okay. But like maybe you can pair it with a separate like audio generation or music generation thing to do that.

[00:58:40] - Anthony Campolo
Yeah. Yeah, the video one is the one I've spent the least time with because they're the most expensive to run. But, uh, of course, and actually there's, there's way more providers than this in the, the Auto Show Bun, um, front-end one. So, uh, it's actually— I'm not gonna spend too much time talking about that one. Um, so Minimax is the other one right now that I haven't integrated with because these are a lot cheaper. I'm not sure how actually good they are. Let's actually, let's just try. Let me see what the most expensive one is.

[00:59:20] - Dev Agrawal
Are you planning on doing similar benchmarks for all of these?

[00:59:24] - Anthony Campolo
Yes. Yeah.

[00:59:26] - Dev Agrawal
Nice. That would make for a really nice blog post.

[00:59:30] - Anthony Campolo
That's one of the things I'm planning to do. Is make a, make a blog post comparing them because it cuts through a lot of the noise.

[00:59:41] - Dev Agrawal
Actually, I didn't know Minimax had video models. That's really nice.

[00:59:44] - Anthony Campolo
Actually, Minimax is almost the only other service that essentially has everything, has all modalities, I think, except would be transcription.

[00:59:55] - Dev Agrawal
I thought Kami was trying to do something like that as well. They just launched 2.6, which I haven't Had a chance to look at.

[01:00:02] - Anthony Campolo
The, the ZGLMs also is in a similar boat now where they kind of offer almost everything. So a lot of these providers seem to be going.

[01:00:13] - Dev Agrawal
Yeah. Anthropic is kind of like the odd one out where they're like hard focused on code, which I wanna talk about after this as well.

[01:00:23] - Anthony Campolo
Yes.

[01:00:31] - Dev Agrawal
Nice. So, okay, these are estimated cost. Okay. So these can generate like pretty short videos.

[01:00:39] - Anthony Campolo
Yeah, you can select. And so you can configure the video duration and a lot of these are just going to depend on the underlying services and you can configure the aspect ratio and resolution. Basically, the idea is that it doesn't do this yet, but eventually I want to just have exposed all of the different things that you can configure, especially for video and image. There's a lot of different stuff that will kind of make a big difference in terms of what you're generating. This also will help if you can specify things like this should be widescreen or this should be, you know, whatever aspect ratios you kind of want. The problem is all of them have different terms and ways of like doing it. There's a lot of that goes on to kind of creating, like you said, the primitives to put them all together. So video still needs a decent amount of work, but I've been okay with not really emphasizing because I know the video models right now are at the point where they're good, but they're going to be really, really good in a year from now, I think. It's just really wild, especially with SeedDance 2. The videos that people are putting out now, they're insane.

[01:01:50] - Dev Agrawal
See dance. Okay, that's— oh, of course, ByteDance. Yeah, that makes sense. Um, nice.

[01:01:58] - Anthony Campolo
Okay, so here's going to be the minimax version of the same prompt.

[01:02:02] - Dev Agrawal
It's not bad at all.

[01:02:04] - Anthony Campolo
It looks really good.

[01:02:05] - Dev Agrawal
Yeah, yeah, I like the little rain effects on the, on the road.

[01:02:13] - Anthony Campolo
Awesome. Yeah, so video stuff, there's gonna be more to come there.

[01:02:17] - Dev Agrawal
What's the kind of like maximum duration of videos that you could, you can generate from these services?

[01:02:23] - Anthony Campolo
You know, I'm not 100% sure offhand, but I think ballpark at most like 15 seconds usually.

[01:02:31] - Dev Agrawal
Right.

[01:02:32] - Anthony Campolo
But you can have it generate multiple videos, I think, or you can just kind of chain multiple commands. Like I said, I actually just spent more time looking at the video one. So.

[01:02:44] - Dev Agrawal
Yeah, I think the main problem with like gener— like chaining them and having like multiple clips that are stitched together is that it's probably very—

[01:02:53] - Anthony Campolo
sorry, they don't connect. They don't connect with each other.

[01:02:55] - Dev Agrawal
Yeah, exactly. Yeah, it's like very difficult to get consistency. Like if you have— if you want a single character, um, to appear in all of them, um, I mean, you, you— there's probably tricks to do that. For example, you do an— you run an image model first to generate an image of that character and then you pass that into each of them. Uh, yeah, so maybe like that, maybe those sort of like complicated pipelines can be set up eventually to do a longer form generation.

[01:03:25] - Anthony Campolo
Yeah, that's definitely the idea. And that's why I'm starting with the comic book because, right, what I'm thinking is that once you have the comic book generated, each individual, yeah, panel you can combine with both the text, which you could then TTS a voice from and then sync that with a video based on the initial image. So I know that's already a workflow. I know some of the, the AI video shows that I've checked out are doing— they'll, they'll have like voices that go along with an image, and then that just kind of— they animate just the lips. And so there's not really a lot of, you know, cinematic motion going on, but it's good for like if you have like a cartoon with like, you know, 2 characters just kind of talking. Yeah.

[01:04:07] - Dev Agrawal
Yeah, basically like the comic book acts as a storyboard for like a blueprint for the video.

[01:04:12] - Anthony Campolo
Yeah, yeah.

[01:04:13] - Dev Agrawal
I, I wanna, you know, I wanna use this for all the, um, all the shows that I like that never got a like a, a season, that left on a cliffhanger and then got canceled.

[01:04:24] - Anthony Campolo
Dude, yeah. And so I heard— was talking about this on a podcast— was like you could just generate infinite Seinfeld right now because you could just have it write Just more and more, and they're not going to be as good. They're not even going to be close to as good. But if you're just someone who watches the show in the background, you know, like you, you almost won't notice that it's, you know, just, yeah, very commentary. I also think, um, like mashups, like someone who wanted to like create their own like Lego Star Wars movie or, yeah, crossovers, like, or a Simpsons Star Trek or, you know, something like that. You know, you can do any of those things now if, you know, the tools allow you to, but based on copyright rules and all that, you know.

[01:05:04] - Dev Agrawal
Iron Man fighting Batman, I want to see that.

[01:05:07] - Anthony Campolo
Exactly. Yeah. Okay, so what this is going to do, I think this is the command I ran, was, um, uh, actually, yeah, lo-fi chill hop with soft piano and vinyl texture.

[01:05:21] - Dev Agrawal
Nice.

[01:05:29] - Anthony Campolo
Cool.

[01:05:30] - Dev Agrawal
Yeah, that doesn't sound too different from the kind of lo-fi beats I just have like in the— normally in the background. It's very nice.

[01:05:41] - Anthony Campolo
Yeah, so that was from ElevenLabs and it was just an instrumental. Minimax is the other music one I have. Actually, I already have some examples I can show here. Let's look at. So this is something I created with Suno. This is a song that is used as an example.

[01:06:08] - Dev Agrawal
Nice. For the repo that needs an example.

[01:06:12] - Anthony Campolo
This example will be used as the example, and it is very short. This is the whole song.

[01:06:18] - Dev Agrawal
Lazy rhyming. You just repeat the words.

[01:06:20] - Anthony Campolo
Yeah. So what that's going to be for is this is actually something different. This creates a lyric video. So this is something that actually I demoed this when I was on Nicky T's stream. So this is very, very cool. It's something I built myself because Suno has the ability to create lyric videos, but I just didn't like them. There's like a lot of things that, that bothered me about them. So I was like, I'm just gonna build my own, my own version of this. So this is what it's gonna end up looking like.

[01:07:00] - Dev Agrawal
No. Okay. Oh yeah. There's no sound.

[01:07:02] - Anthony Campolo
Imagine the sound is there.

[01:07:03] - Dev Agrawal
Yeah. I mean, the, the previous one, we can just combine them. Doesn't have great contrast, but yeah. Yeah. At least it works.

[01:07:13] - Anthony Campolo
Yeah, there's like, there's a couple things actually here. This, I had this in a different repo and I just upstreamed it. So there's actually a couple things that are still kind of broken that I'm realizing in there. But, um, yeah, so what the thing you said actually is something that I had specifically fixed that's supposed to dim the background image a certain amount. So, um, I'm realizing now that I think I didn't port that part over. But, um, yeah, so the lyric videos are cool, especially when you Combine it with the concept album idea because then you'll have the ability to go straight from an input like a book or something to the song lyrics and the songs and then the lyric videos that have an actual video you can then put up just on YouTube and the entire process almost is automated.

[01:07:57] - Dev Agrawal
Yeah. I mean, you can use like a video model to do music videos as well.

[01:08:03] - Anthony Campolo
Exactly, yeah, all sorts of cool stuff that can be done. So I think that's pretty much all of the functionality that it has. Now there's also, there's other kind of convenience commands as well that we won't go too deep into. Things like, yeah, the report one is the main one. That's probably important because that's what's helping do the benchmarking because I start with taking, like, for the transcriptions, I'll take all the ones that it outputted and then I'll have it basically look at all of them and compare them across each other to see what is the closest to being correct and then which ones overlap with each other. And that's how it's doing the benchmarking. And then there's a config one where you can set, like, defaults. So if you want, because right now I have some defaults set kind of implicitly in the tool. But I'm really— you probably want to pick whatever models you're going to want to be usually using and things like that. So that's one thing that I need to document better, but that is one thing that's like really useful now, especially with so many models available. There's so many things to do. So you can kind of put a lot of— if you, if you only are using some of the same ones most of the time, you could put them in your config and then you just run a really short set of commands, right?

[01:09:21] - Dev Agrawal
Yeah, that makes sense.

[01:09:24] - Anthony Campolo
Sweet.

[01:09:24] - Dev Agrawal
Damn.

[01:09:25] - Anthony Campolo
All right, this will be a good place to start winding down.

[01:09:29] - Dev Agrawal
Yeah, no, I, I really like this.

[01:09:31] - Anthony Campolo
Um, yeah, and there's a front end too, which we'll, we'll go through on a later stream where most of this functionality is exposed through just a UI interface for non-technical users.

[01:09:42] - Dev Agrawal
Mm-hmm. Got it. Um, okay, so there's something I wanted to get your thoughts on. Have you seen this, uh, ReMotion? Uh, do you know about ReMotion?

[01:09:54] - Anthony Campolo
Uh, could you just pull it up and share your screen?

[01:09:57] - Dev Agrawal
Uh, yeah. So, okay, basically, um, yes, I have heard of this. Okay. The main idea is that— okay. That's fair. That's fine. Um, let me, uh, Chrome tab. Okay. There we go. And if I do this, uh, okay, I'm sharing my screen. Why do I have the pricing page open? Okay, make videos programmatically. Okay, so this is one of the things that kind of makes, um, yeah, so, okay, so we, we were just talking about how like the Chinese modern providers, uh, model provider, sorry, AI Labs and, uh OpenAI, like all of these labs are kind of like dipping their toes into like multimodal, like video generation, image generation.

[01:10:48] - Anthony Campolo
OpenAI specifically has pulled out of video on purpose.

[01:10:53] - Dev Agrawal
Sorry. Yeah.

[01:10:55] - Anthony Campolo
But the American labs have been good at video compared to the Chinese labs, which is a very interesting phenomenon.

[01:11:01] - Dev Agrawal
Definitely. Yeah. At the same time, Anthropic very famously has not Uh, invested in any of that at all. Uh, yeah, and their kind of like entire focus has been on making the models really, really good at writing code. And their kind of philosophy is that code is the way to AGI. Um, which like at— on kind of like first, uh, thought, like it doesn't quite make sense. But when, uh, when I saw things like this, especially like Remotion here, Um, I kind of started getting a better feeling of what they're really, uh, like onto.

[01:11:39] - Anthony Campolo
Um, so basically like, because it's like also how it could, you know, Claude can write SVGs which create images, you know, it's the same thing.

[01:11:48] - Dev Agrawal
Yeah, exactly. Uh, you can like, you can make images with code, you can make videos with code.

[01:11:54] - Anthony Campolo
Um, you can think about recently with like MIDI, like I want to use, I want to start trying to generate like music based on like creating MIDI that then you could actually have it run through instruments, you know, 'cause there's, I'm sure there's, you know, open source MIDI libraries and stuff.

[01:12:09] - Dev Agrawal
Right, exactly. Yeah. Now if you try to get Claude to like generate the scene of Tokyo at night with like neon colored neon signs and raindrops, it's probably not gonna be able to do that with Remotion or with most of these tools. Um, but there are, if you wanted to generate like, uh, like an animated infographic or like an advertisement, ReMotion is probably going to be a better choice than using an im— video model.

[01:12:38] - Anthony Campolo
So there's like this balance of, do you have examples of stuff that's generated that we could see?

[01:12:44] - Dev Agrawal
Um, yeah, I mean, there you go. There, there have, they have examples here. So it's like all using React components.

[01:12:53] - Anthony Campolo
Yeah.

[01:12:53] - Dev Agrawal
Yeah. Landing page stuff or like, uh, like simple motion graphics.

[01:12:58] - Anthony Campolo
Hey, this is cool. I wanna create some stuff like this for like, um, you know, diagrams and stuff.

[01:13:02] - Dev Agrawal
Mm-hmm.

[01:13:03] - Anthony Campolo
To explain AutoShow.

[01:13:05] - Dev Agrawal
Yeah. And, uh, let me actually pull up, uh, something that I made with Remotion.

[01:13:12] - Anthony Campolo
Oh, great. Uh, yeah, I should look into this. I might actually do another stream on this. This could be fun to check out.

[01:13:21] - Dev Agrawal
Yeah, where is that? Okay, there it is. No, that's not the right one. Okay, um, cancel share my screen and check this. Okay, so if you can see this, uh, this is, this is like the winner announcement that I made, and I did not touch Yes, and I did not touch a single line of code.

[01:13:50] - Anthony Campolo
This is really good actually. This is better than I was expecting.

[01:13:54] - Dev Agrawal
Yeah, and this is like, I, I didn't touch any, any code. I, I honestly didn't even put that much of effort in, uh, into like this. Like if I spent a whole week, uh, prompting and coding on this, this would probably be like 100 times better. Um, so this is this, uh, I wouldn't even say like this is like my highest effort thing. Um, yeah, and there's some— I mean, the music wasn't AI generated, but, uh, I'm not sharing audio, that doesn't matter. Yeah, but this is, this is the kind of sort of thing that has me thinking of like, there has to be a— like, we haven't quite figured out what we want the models to do and what we want code to do. And probably one of the things in this space of like AI-powered content transformation generation will be like, what, what, like, how much should we just let it write code to do these things? Or maybe even like, okay, um, I don't know, like I, I saw recently somewhere that, um, um, like there, there's a Photoshop skills file so that models can just like use Photoshop programmatically to do a bunch of image editing.

[01:15:06] - Anthony Campolo
Um, wild.

[01:15:08] - Dev Agrawal
Exactly. Yeah.

[01:15:08] - Anthony Campolo
That's really interesting. Yeah. I'm sure there's a similar thing with like Figma too.

[01:15:14] - Dev Agrawal
Exactly.

[01:15:14] - Anthony Campolo
Figma must have their own AI thing in general at this point, I would guess.

[01:15:18] - Dev Agrawal
Yeah, they do. I don't think it's very good, but that also reminds me that for image generation, you can, uh, okay. Like some images are probably like you want the models to generate, but for example, like if I want a YouTube thumbnail, oftentimes I just tell Claude to like make an HTML file with a bunch of different variants and I'll Uh, like I'll select from there or I'll do something there. So like images also, you can just get models to write HTML or like build, uh, like build kind of visuals that way and just take screenshots of that. Um, so I mean, ideally I probably want to combine them. Like I, I can imagine that for some part I don't want like, uh, React components. I just want like a nice, uh, like graphical— like I want Nano Banana to build a nice visual for me, but for a lot of other things, I probably want code-based generation. I don't know if you've thought about bringing that into AutoShow at some point. Let's have it make images and videos out of code.

[01:16:22] - Anthony Campolo
I'm glad you're bringing this up because it's something that I have played around with a little bit myself just in the chat UIs with the models. I did this about a month ago. I created a bunch of diagram visuals and stuff that kind of go through because I want to— I need to add, you know, visuals to the AutoShow homepage right now. And I was— thought it was pretty interesting, some of the stuff that I could create. So I hadn't thought about actually bringing that into AutoShow because I'm just leveraging the models right now. But it does make a lot of sense and it's something I should probably think about how that would make sense to do. But yeah, no, it's a good thought.

[01:17:00] - Dev Agrawal
Yeah. And then at that point, like kind of stitching that together into like the whole pipeline of Uh, like whatever sort of content transform. Again, like, uh, like everything that you have right now are really good, really nice primitives. This would probably just be like another primitive, like build an image using HTML or, uh, build, make video using ReMotion. Um, and then like, however, like people want to stitch them together into their own workflow. Um, cool.

[01:17:27] - Anthony Campolo
No.

[01:17:27] - Dev Agrawal
Okay. This is, uh, this, so the CLI. It's, I guess it's on GitHub. People can install it, play around with it.

[01:17:35] - Anthony Campolo
Yeah, let me just show that real quick. Everything that we saw is gonna be in this PR right now. So it's on the bun branch. And if you look here, this is like many, many, many months of work. A ton of code being added in this one PR. I'm hoping that this will be ready to go in the next week or two. Then I'll also eventually probably— the big thing right now I just need to figure out is publishing it through npm. Wait, I never showed this, did I? Sorry. There we go. You go to autoshow/cli if you do ajc-web-dev. Instead of auto show, it will forward you. And so people wanna— everything that we showed here is on this, um, because this is— this also represents a wholesale migration from the old stack because we previously was using Commander and Node.js, and now I'm using Bun and a CLI library I already forgot the name of. Uh, it is—

[01:18:48] - Dev Agrawal
let me 827 down.

[01:18:51] - Anthony Campolo
That was massive. Massive. So now using— that's what it is. Clerk with a C. Clerk.

[01:19:02] - Dev Agrawal
Of course.

[01:19:05] - Anthony Campolo
So this is CLI library.

[01:19:09] - Dev Agrawal
Never heard of this one. What made you choose this over some of the more popular options?

[01:19:15] - Anthony Campolo
'Cause I wanted something that was going to— I wanted— I was trying to do everything just through, like, Bun and Bun Native APIs and avoid Node stuff entirely. So I wanted something that didn't have a bunch of Node dependencies. I'm not really sure if this is even that different in that respect, but it was at least, like— I did a search through a bunch of different stuff. I was asking, like, ChatGPT. I was like, I'm looking to try to have something like this. What would be the best? CLI thing. Because you also have Oakcliff and Commander and all these other Node-based ones which are really good. That's what I've been using. I've been using Commander forever. But this is somewhat like Commander. This is a similar type of syntax you get where you kind of just define a command and then what the commands do. But I think it was, you know, more lightweight and more composable and more built around just like WebP ESM kind of standard stuff. So, I think that was the idea. And yeah, so far it's been fine. Because I originally had been doing it just with Bun, literally parsing the arguments and everything like that when I did the first migration. And then I was like, you know, probably should pick at least some library. But—

[01:20:31] - Dev Agrawal
yes.

[01:20:32] - Anthony Campolo
Yeah. So, if you want to check this out, just Check out PR 19. This should be merged fairly soon. And then yeah, and then for that auto show app that is still pretty close as well. We'll probably demo that next time in 2 weeks when we meet again. Was there anything you wanted to talk about for next episode?

[01:20:57] - Dev Agrawal
For next episode. Like as in a plan, what we're gonna talk about.

[01:21:04] - Anthony Campolo
Yeah, we can figure this out off stream. I was just wondering if you had anything top of mind right now.

[01:21:08] - Dev Agrawal
Um, nothing top of mind right now. Uh, just talking about CLI stuff. Uh, there's also like Effect CLI, which is definitely not like a minimal lightweight thing. It's, uh, it's a bit more like fully featured. It's built on top of Effect TS, which means you get like—

[01:21:25] - Anthony Campolo
I just started using Effect actually. I integrated it into my blog repo just to kind of see what it would be like.

[01:21:32] - Dev Agrawal
Okay, cool.

[01:21:33] - Anthony Campolo
CLI thing now.

[01:21:35] - Dev Agrawal
Yeah, they've had it for a while and it's, it's almost certainly going to be like much better than most other CLI tools. Yeah, that might, that might be something interesting as well. Um, yeah, no, I, I, I'm really excited to play around with the CLI. Um, um, uh, yes, it kind of fits together something that I can actually use for my daily kind of like content creation. But I mean, if I, if this, if this actually helps me with my YouTube channel or with my job, then that would be amazing.

[01:22:14] - Anthony Campolo
That's, that's the hope. So if you have use cases, let me know. I will make sure to make them very sweet. I can build in stuff you want to do specifically. That's kind of the where I've gotten a lot of ideas is just showing this to people and then be like, oh, I wanna do this with it. So yeah, that'd be great.

[01:22:30] - Dev Agrawal
Perfect. Perfect. Okay. Yeah, that's a good, that's a good note to end on. Go use AutoShow. Go try out whoever's watching this. Content creation, content transformation has never been easier.

[01:22:44] - Anthony Campolo
Yeah, for sure. All right, well, thank you everyone who was watching. Um, we'll be back same time in 2 weeks, so we will catch you guys next time.
