<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: M Habib ur Rehman </title>
    <description>The latest articles on DEV Community by M Habib ur Rehman  (@legerise).</description>
    <link>https://dev.to/legerise</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4119771%2Fbf718f43-e4a4-4f18-96fb-f9a497030d2b.jpg</url>
      <title>DEV Community: M Habib ur Rehman </title>
      <link>https://dev.to/legerise</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/legerise"/>
    <language>en</language>
    <item>
      <title>Got Tired of SSHing Into My Server Just to View Logs</title>
      <dc:creator>M Habib ur Rehman </dc:creator>
      <pubDate>Sat, 12 Sep 2026 01:20:17 +0000</pubDate>
      <link>https://dev.to/legerise/got-tired-of-sshing-into-my-server-just-to-view-logs-5gjl</link>
      <guid>https://dev.to/legerise/got-tired-of-sshing-into-my-server-just-to-view-logs-5gjl</guid>
      <description>&lt;p&gt;Even though, I completed my degree in CS still I call my self a self-learned developer. And that’s one of the reasons that I was never confident about the approches I used to solve a problem. Be it&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying a webapp on Server&lt;/li&gt;
&lt;li&gt;Connecting Domain to an ip&lt;/li&gt;
&lt;li&gt;Planning backup Mechanism for applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apart from above common confusions I also used to have this weird confusion about the &lt;code&gt;Logs&lt;/code&gt; for an application? How am i supposed to accurately track them? When can I say that I understand the &lt;code&gt;Logging&lt;/code&gt; module well enough besides half of my applications and experiments still use &lt;code&gt;print()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;More on that another confusion was When I am actively developing an application how do I keep it live on the server? do I use&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Systemd&lt;/li&gt;
&lt;li&gt;PM2 ( a simpler alternative)&lt;/li&gt;
&lt;li&gt;Nohup&lt;/li&gt;
&lt;li&gt;Tmux&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;systemd&lt;/code&gt; was the most reliable but preparing service files for it is one thing, monitoring the logs using &lt;code&gt;journalctl&lt;/code&gt; is another. &lt;code&gt;PM2&lt;/code&gt; I had discovered it after &lt;code&gt;systemd&lt;/code&gt; so it felt simpler but due to some not sure what happened circumstances we as a team couldn’t work well on it especially when we had to update the code several times. &lt;code&gt;nohup&lt;/code&gt; has a &lt;strong&gt;no&lt;/strong&gt; at the start for a reason. Ended up on &lt;code&gt;Tmux&lt;/code&gt; yes so the utility that was built for multiple terminals in one window we utilized it as simple process manager.&lt;/p&gt;

&lt;p&gt;It was very simple. Inside tmux session we would add a separate window for each project with a descriptive name and now it was easier for us to debug because whenever something went wrong&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;there was a 3 step process&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;em&gt;SSH into the server&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Attach the tmux session&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Select the project window and see the logs on console&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Everything was great until logging into server again and again started to feel not right.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the moment where I started to wonder If there was a way to view logs directly on the browser and there my search begins. I searched here and there and to be honest, I was either&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Too naive to get comfortable with any of the famous Log viewers&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;OR&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Too developer to act as just a normal user for once.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Whatever the reason I couldn’t find anything until I hopped on to&lt;br&gt;
&lt;a href="https://github.com/mthenw/frontail" rel="noopener noreferrer"&gt;frontail&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple web based log viewer that you can simply install on your server and just point it to your log file following the exact guide and your are all set you get your logs for that project streamed on your browser with a very basic authentication&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxg74a4urqjcrgw01zmqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxg74a4urqjcrgw01zmqr.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s all what I wanted. And here my journey for a perfect way to track logs ends.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;End&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Until it restarted with a very valid concern.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if I want to track multiple projects? What if I want to give them readable names &lt;code&gt;aliases&lt;/code&gt; instead of full file path representing one log file? What if when there are multiple log files how to share streaming link of specific project?&lt;/p&gt;

&lt;p&gt;These were the few question I used ChatGPT to get the answer from. It helped me with config files other setup which it believed will work but I quickly realized that I was hitting the limit of &lt;code&gt;frontail&lt;/code&gt; it was not designed for that. and Here My journey to find another logviewer started this time with a check list&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Must be as simple as frontail&lt;/li&gt;
&lt;li&gt;Must support multiple project logs files ( 1 tab per project can be good)&lt;/li&gt;
&lt;li&gt;Aliases for projects instead of full paths&lt;/li&gt;
&lt;li&gt;Must be super easy to add or remove any new log file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is where I realized there was no such thing at least nothing I could find because it was obvious&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Professional teams used professional tools the well established ones ( naming the tools itself is problem for me because i don’t know what they call professional lets say sentry )&lt;/li&gt;
&lt;li&gt;Solo developers Never needed this level of complexity they would usually debug there way, ssh into server see the logs fix it. Or debug locally&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some curious fellows will struggle until they find a great mix of both frontail simpler + useful and will set it up as mostly they will be working on one project at a time so limit never hits&lt;/p&gt;

&lt;p&gt;But&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Those who were not Solo not a Team but were a bunch of individuals brought together under the umbrella of a yet another startup were the ones to struggle the most because few of them used to be&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Intellectual, Curious, Interested and wanting everything to be handled the best and recommened way
- While others would be too busy to just finish there job
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This is category I think I fell into and ended up engineering (ofcourse ChatGPT with help from me) &lt;code&gt;frontail&lt;/code&gt; with the updated checklist mentioned above.&lt;/p&gt;
&lt;h2&gt;
  
  
  Presenting &lt;strong&gt;&lt;a href="https://github.com/legeRise/ezlog" rel="noopener noreferrer"&gt;Ezlog&lt;/a&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A simple web based log viewer ( &lt;em&gt;Lol hope you already saw that coming&lt;/em&gt; ).&lt;/p&gt;

&lt;p&gt;Won’t brag but at least I was able to create something I and my colleagues regularly use&lt;/p&gt;
&lt;h2&gt;
  
  
  here are some quick features I made sure to add
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Tracks Multiple Project ( The Major Problem I had faced )
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe6a0xd4pfrfhiugdljo1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe6a0xd4pfrfhiugdljo1.png" alt=" " width="720" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see one tab per log file&lt;/p&gt;
&lt;h3&gt;
  
  
  2. &lt;code&gt;Aliases&lt;/code&gt; so each tab has a friendly name that you can use for tracking your project
&lt;/h3&gt;

&lt;p&gt;for example for your chatbot project which maintains a log file named &lt;code&gt;chatbot.log&lt;/code&gt; which lives at &lt;code&gt;my-projects/special/ai-chatbot/chatbot.log&lt;/code&gt; you could simply give it a name like &lt;strong&gt;chatbot&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. &lt;strong&gt;Easy CLI&lt;/strong&gt; One of my favourite features because as I started it, I quickly realized that the hardest part was to add new log file to be tracked
&lt;/h3&gt;

&lt;p&gt;Imagine always having to find &lt;code&gt;tracked_logs.json&lt;/code&gt; and manually adding a new object like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"alias"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chatbot"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-projects/special/ai-chatbot/chatbot.log"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then there is also a case when you have to remove it.&lt;/p&gt;

&lt;p&gt;Or if you want to see list of all the projects that are being tracked. And many more common scenarios like these so I spend some time on adding a few useful &lt;code&gt;cli&lt;/code&gt; commands for example&lt;/p&gt;

&lt;h4&gt;
  
  
  1. To list all tracked files &lt;code&gt;ezlog list&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsn0krgh8uayaipd6qu4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsn0krgh8uayaipd6qu4y.png" alt=" " width="720" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This command lists aliases -&amp;gt; paths &lt;/p&gt;

&lt;h4&gt;
  
  
  2.  Adding a new file to be tracked simple &lt;code&gt;ezlog add &amp;lt;alias&amp;gt; &amp;lt;file-path&amp;gt;&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01vza56o2m2dx200vill.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F01vza56o2m2dx200vill.png" alt=" " width="720" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;so you can run this &lt;code&gt;add&lt;/code&gt; command everytime you want to add a new file to be tracked and you are good to go&lt;/p&gt;

&lt;h4&gt;
  
  
  3. The only next step is starting the server so it is available on web
&lt;/h4&gt;

&lt;p&gt;for that you can use &lt;code&gt;ezlog start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1yj1zw682v7ipbs0yyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw1yj1zw682v7ipbs0yyj.png" alt=" " width="720" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;followed by &lt;code&gt;ezlog stop&lt;/code&gt; which may not seem like a major feature but is much handy when you don’t have to yourself look for the PID and manually kill it. Much simpler&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq202gp8it0tfu05eyax9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq202gp8it0tfu05eyax9.png" alt=" " width="720" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and that’s it this was all about this simple project rest of the commands and updates are just to make it better for example &lt;code&gt;ezlog update&lt;/code&gt; manually uninstalling it and reinstalling the latest version also seems like a mess so added this commad &lt;code&gt;update&lt;/code&gt; that if you have it installed on your server you can run this to update to latest version but still you will have to do it manually first time which is a very easy process you can use the quickstart part from &lt;code&gt;readme.md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff4xgoawfvulsfy051y95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff4xgoawfvulsfy051y95.png" alt=" " width="720" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please do try and let me know if you like it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s left?
&lt;/h2&gt;

&lt;p&gt;There are a few things I already know i am missing and are important like&lt;/p&gt;

&lt;p&gt;&lt;code&gt;authentication&lt;/code&gt; even simple username password would do well and will be safer than exposing your server logs for anyone to consume on web. But for now I have added guide to use basic authentication via nginx instead of having it directly in this project which works pretty well for me.&lt;/p&gt;

&lt;p&gt;Good news for you though if you install and set it up now on your server and later I update and add &lt;code&gt;authentication&lt;/code&gt; feature you will like what &lt;code&gt;ezlog update&lt;/code&gt; can do.&lt;/p&gt;

&lt;p&gt;Lastly, I know some of you will likely have suggestions for better tools and a valid reason for why I shouldn’t have spent time on this. But call it my &lt;code&gt;developer instinct&lt;/code&gt; or &lt;code&gt;Inability to just find an existing product as a normal user&lt;/code&gt; I couldn’t find anything that did everything I wanted it to do, so I spent some of my time which I could spend watching a series, on this.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thank you for giving it a read. And If you have reached till here&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Thank&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;you&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;so&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;much&lt;/p&gt;

</description>
      <category>deployment</category>
      <category>devops</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>HyperFrames — Blackbox in a Whitebox</title>
      <dc:creator>M Habib ur Rehman </dc:creator>
      <pubDate>Thu, 10 Sep 2026 20:10:23 +0000</pubDate>
      <link>https://dev.to/legerise/hyperframes-blackbox-in-a-whitebox-2d41</link>
      <guid>https://dev.to/legerise/hyperframes-blackbox-in-a-whitebox-2d41</guid>
      <description>&lt;p&gt;For the last few days, I've been trying to build a simple video editor for my own use case. And honestly, the rendering wasn't the problem — the export wasn't either.&lt;/p&gt;

&lt;p&gt;It was the timeline. The playhead. The clip bars. The drag. Split. Resize. Track layering. The scrub loop that has to stay in sync with the preview while the user drags something. All of it — I was forced to write myself.&lt;/p&gt;

&lt;p&gt;And it was a headache. A real one. &lt;/p&gt;

&lt;p&gt;I started looking for something that could handle these common issues for me — and that's when I found something super interesting: HyperFrames.&lt;/p&gt;




&lt;h2&gt;
  
  
  And then I watched every tutorial on it
&lt;/h2&gt;

&lt;p&gt;Every article. Every YouTube video. Every thread. And everyone explained it the same way.&lt;/p&gt;

&lt;p&gt;"It's just an HTML file."&lt;/p&gt;

&lt;p&gt;"Your video is just an HTML file."&lt;/p&gt;

&lt;p&gt;"Use HyperFrames in the back and it renders."&lt;/p&gt;

&lt;p&gt;Cool. Great. Very clear.&lt;/p&gt;

&lt;p&gt;And then — without fail — every single one of them would bring in Claude Code. Or GPT Codex. Or some other AI agent. And they'd say: tell the AI to build a video following this prompt. And the AI would build it. And the best part is, it actually would. But that was it. That was the tutorial.&lt;/p&gt;

&lt;p&gt;And I sat there thinking... okay, but &lt;em&gt;what actually happened?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That was a &lt;strong&gt;blackbox&lt;/strong&gt; to me.&lt;/p&gt;

&lt;p&gt;Even though, everyone kept saying "&lt;strong&gt;nothing is a blackbox, everything is in front of you, it's just HTML, it's open source, you can read it.&lt;/strong&gt;" And yeah. Technically true. But I couldn't see how it worked. I could see the inputs. I could see the outputs. I could not see the middle.&lt;/p&gt;

&lt;p&gt;And then, somewhere in the middle of exploring things here and there, a thought hit me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if this handles all the behind-the-scenes for me?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if I don't have to write the timeline. The playhead. The scrub loop. The clip model. What if HyperFrames already solved all of that, and I just build my own UI on top of it?&lt;/p&gt;

&lt;p&gt;That thought is why I'm writing this article.&lt;/p&gt;




&lt;h2&gt;
  
  
  So what is HyperFrames, really?
&lt;/h2&gt;

&lt;p&gt;Let me put it in the simplest way I can, for someone who's never touched it.&lt;/p&gt;

&lt;p&gt;HyperFrames — an AI agent framework — turns HTML into video.&lt;/p&gt;

&lt;p&gt;That's it. That's the pitch. You tell the AI what you want, it writes the HTML, you press render, and you get an MP4.&lt;/p&gt;

&lt;p&gt;Sounds too simple to be useful, right? Stay with me, because the simplicity is the whole point.&lt;/p&gt;

&lt;p&gt;Think about it. Animation, transitions, text flying in, images sliding, colors fading — all of this already exists on the web. It's called HTML, CSS, and JavaScript. Every website you've ever visited uses it. And every AI you've ever talked to can write it.&lt;/p&gt;

&lt;p&gt;So I asked myself: if the browser can already do all of this, why do we need a separate tool to make videos?&lt;/p&gt;

&lt;p&gt;The answer: we don't. We just need to teach the browser to hand over the frames one at a time.&lt;/p&gt;

&lt;p&gt;That's what HyperFrames does. It opens your HTML in a headless browser, moves a playhead through time frame by frame, takes a screenshot at every step, and stitches them together into a video.&lt;/p&gt;

&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;But that's not where the story ends. That's actually where the interesting part begins.&lt;/p&gt;




&lt;h2&gt;
  
  
  The question that I believe every tutorial was missing
&lt;/h2&gt;

&lt;p&gt;So we or an AI can write any animation in HTML and that becomes a video, right?&lt;/p&gt;

&lt;p&gt;but then why?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does that HTML only work with HyperFrames' video editor studio? Why won't it magically work with any famous editors like CapCut or so?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why do we rely on HyperFrames to have a Studio — their version of CapCut — which knows exactly what to do with the HTML you wrote?&lt;/p&gt;

&lt;p&gt;Why can't you just take any random HTML animation and drop it into any random video editor and have it work?&lt;/p&gt;

&lt;p&gt;Because it won't. It can't. And that's the answer I was missing for the past week.&lt;/p&gt;




&lt;h2&gt;
  
  
  Because they did two things, not one
&lt;/h2&gt;

&lt;p&gt;Here's what I missed at first, and I think most did too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HyperFrames&lt;/strong&gt; didn't just say to the AI &lt;strong&gt;&lt;em&gt;"write a video in HTML, do whatever you want."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because if they had, every AI would write the same scene differently. And that's the whole problem.&lt;/p&gt;

&lt;p&gt;Think about it. You open Claude and you say: &lt;strong&gt;&lt;em&gt;"Make a 5-second scene where the title fades in and slides up."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It gives you something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scene"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;#title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fadeIn&lt;/span&gt; &lt;span class="m"&gt;0.8s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt; &lt;span class="n"&gt;forwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;fadeIn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean. Works in a browser. Perfectly fine.&lt;/p&gt;

&lt;p&gt;Now you open ChatGPT and ask the exact same thing. And it gives you this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"scene"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;opacity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;opacity 0.8s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;opacity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also clean. Also works in a browser. Also perfectly fine.&lt;/p&gt;

&lt;p&gt;Now you open Gemini. Same prompt. And you get a third thing — maybe a GSAP timeline. Maybe a Web Animations API call. Maybe inline styles being toggled. Every AI, its own way. Every time, a different file.&lt;/p&gt;

&lt;p&gt;All three look like videos. None of them are video projects.&lt;/p&gt;

&lt;p&gt;Because now try to open any of those in a video editor. Try to drag that title clip on a timeline. Try to change its duration by dragging the edge. Try to split it. Try to know where it starts and where it ends without reading the code line by line.&lt;/p&gt;

&lt;p&gt;You can't.&lt;/p&gt;

&lt;p&gt;And that's the real problem. Not that AI writes bad HTML. AI writes great HTML. The problem is that AI writes &lt;em&gt;a different shape every *&lt;/em&gt;&lt;em&gt;single&lt;/em&gt;** time.* There's no agreement. There's no contract. Every video-shaped HTML file is its own little island, and no editor can dock at any of them. and that is what the real problem was.&lt;/p&gt;

&lt;p&gt;And to address this, &lt;strong&gt;HyperFrames&lt;/strong&gt; did the two things that actually matter. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, they wrote SKILLS files.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Skills files are basically instruction manuals for the AI. They spell out exactly how to write a video in HTML if you want it to be a real, editable, renderable project.&lt;/p&gt;

&lt;p&gt;Not "do whatever you want." Not "make it look nice." They said things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;data-start&lt;/code&gt; and &lt;code&gt;data-duration&lt;/code&gt; for every element's timing&lt;/li&gt;
&lt;li&gt;Register your animation on &lt;code&gt;window.__timelines[composition-id]&lt;/code&gt;, not somewhere else&lt;/li&gt;
&lt;li&gt;Always use the &lt;code&gt;.clip&lt;/code&gt; class convention for timed elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A bunch of rules. That's it. And if you follow them — all of them — your HTML stops being a webpage and becomes a proper video project.&lt;/p&gt;

&lt;p&gt;That's the first half of the trick. The input side. It's how you make sure the AI's output is &lt;strong&gt;&lt;em&gt;always&lt;/em&gt;&lt;/strong&gt; in the right shape — the same shape, every time, no matter which AI you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second, they built the Studio.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now here's the part that makes the whole thing click.&lt;/p&gt;

&lt;p&gt;Studio is HyperFrames' visual editor. Their version of &lt;strong&gt;&lt;em&gt;CapCut&lt;/em&gt;&lt;/strong&gt;. It looks like a normal editor — timeline, playhead, clip bars, drag, split, resize.&lt;/p&gt;

&lt;p&gt;But the reason Studio works at all is because it knows the &lt;strong&gt;&lt;em&gt;exact language&lt;/em&gt;&lt;/strong&gt; the &lt;strong&gt;SKILLS&lt;/strong&gt; files told the &lt;strong&gt;AI&lt;/strong&gt; to write in.&lt;/p&gt;

&lt;p&gt;When Studio opens your HTML, it doesn't guess. It looks for &lt;code&gt;data-composition-id&lt;/code&gt; on the root. It looks for &lt;code&gt;data-start&lt;/code&gt; and &lt;code&gt;data-duration&lt;/code&gt; on every element. It looks for &lt;code&gt;window.__timelines&lt;/code&gt; to find the animation. It knows the half-open visibility rule. It knows the track system.&lt;/p&gt;

&lt;p&gt;And once it has all of that, it renders your HTML file as a full visual project.&lt;/p&gt;

&lt;p&gt;Every scene, every clip, every track, every timing — all of it shows up as a real timeline you can edit.&lt;/p&gt;

&lt;p&gt;And once you're at that point? &lt;strong&gt;It's just a normal video editor.&lt;/strong&gt; Split. Resize. Drag. Rearrange. Overlay audio. Add transitions. Every basic editing feature works, because under the hood it's just editing a timeline model that was built from the HTML.&lt;/p&gt;

&lt;p&gt;So the two halves fit together perfectly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The SKILLS files&lt;/strong&gt; teach the &lt;strong&gt;AI&lt;/strong&gt; exactly what to &lt;strong&gt;write&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Studio&lt;/strong&gt; reads exactly what the &lt;strong&gt;SKILLS files teach&lt;/strong&gt; the &lt;strong&gt;AI&lt;/strong&gt; to write.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They designed both sides of the bridge to match. And that's what makes the whole thing work.&lt;/p&gt;

&lt;p&gt;That's the insight. That's the thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Let me show you what I mean
&lt;/h2&gt;

&lt;p&gt;Let's say you open any AI coding tool — Claude, GPT, Gemini, whatever — and you say:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Put a 5-second animation on this clip. Text fades in, slides up, and fades out."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I just showed you, you'll get three different answers. All of them work in a browser. None of them are a video project.&lt;/p&gt;

&lt;p&gt;Now ask the same thing, but with the HyperFrames skills files in place.&lt;/p&gt;

&lt;p&gt;It doesn't do whatever it wants. It doesn't guess. It always gives you the same shape, because the skills files told it exactly what shape to use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"root"&lt;/span&gt;
     &lt;span class="na"&gt;data-composition-id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;
     &lt;span class="na"&gt;data-width=&lt;/span&gt;&lt;span class="s"&gt;"1920"&lt;/span&gt;
     &lt;span class="na"&gt;data-height=&lt;/span&gt;&lt;span class="s"&gt;"1080"&lt;/span&gt;
     &lt;span class="na"&gt;data-duration=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"clip"&lt;/span&gt; &lt;span class="na"&gt;data-start=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;data-duration=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeline&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paused&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;tl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;tl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__timelines&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;main&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same prompt. But every AI, every time, produces this structure. Because the skills files removed the guessing.&lt;/p&gt;

&lt;p&gt;That's a real, complete, renderable video. Five seconds long.&lt;/p&gt;

&lt;p&gt;And here's the beautiful part — &lt;strong&gt;that exact HTML can now be opened in HyperFrames Studio and edited visually.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can scrub through it. You can drag the clip around on the timeline. You can split it. You can duplicate it. You can add another clip after it. You can change the duration by dragging the edge. All the things you'd do in CapCut, you can do with this HTML.&lt;/p&gt;

&lt;p&gt;Not because the HTML is magic. Because the HTML &lt;strong&gt;follows&lt;/strong&gt; the &lt;strong&gt;rules&lt;/strong&gt;, and the &lt;strong&gt;Studio&lt;/strong&gt; knows the &lt;strong&gt;rules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's what I mean when I say HyperFrames didn't build magical HTML. They built the rules, they taught the AI the rules, and they built an editor that speaks the rules.&lt;/p&gt;

&lt;p&gt;The magic isn't in the code. It's in the &lt;strong&gt;agreement&lt;/strong&gt; between the two sides.&lt;/p&gt;




&lt;h2&gt;
  
  
  And this is when it hit me
&lt;/h2&gt;

&lt;p&gt;Building a visual video editor used to mean solving five hard problems.&lt;/p&gt;

&lt;p&gt;What's the project file format? How do you represent clips and timing and layers? How do you render it? How do you build the editor UI — timeline, playhead, drag, split, resize? And how do you exchange projects with anything else?&lt;/p&gt;

&lt;p&gt;The first three are the ones that kill you. They take months. They require decisions you can't undo.&lt;/p&gt;

&lt;p&gt;HyperFrames solved all three by fiat and documented the answer.&lt;/p&gt;

&lt;p&gt;And once you see that — once you realize the format is just HTML, following some simple rules, and the AI can already write it, and the editor already knows how to read it — the whole thing flips. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can now build your own mini editor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not from scratch. Not in six months. Not even in six weeks.&lt;/p&gt;

&lt;p&gt;Because the hard problems were already solved — by the &lt;strong&gt;Standard&lt;/strong&gt; the &lt;strong&gt;SKILLs&lt;/strong&gt; files introduced.&lt;/p&gt;

&lt;p&gt;So now it's just a question of how you want to plug in.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You can take any editor that already handles the timeline, the playhead, the drag, the split — and write one parser on top of it that reads the HyperFrames standard. That's the whole job.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can fork Studio and reskin it. They already built the parser. They already built the timeline model. They already built the scrub loop.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;you can sit down and write your own parser from scratch, and then everything else — resize, drag, split, effects, audio overlay — is just normal editor work you'd be doing anyway.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Three routes. One outcome. And none of them require you to solve the same five problems every editor before you had to solve.&lt;/p&gt;

&lt;p&gt;Because that was the headache I was trying to escape. The timeline. The playhead. The scrub loop. The clip model. All of it. HyperFrames already wrote it.&lt;/p&gt;

&lt;p&gt;I just have to plug in.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thing I keep coming back to
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Standards&lt;/strong&gt; sound boring. They sound like paperwork. But they're actually the most powerful thing in technology.&lt;/p&gt;

&lt;p&gt;Think about how we used to have a different charger for every phone. Then USB-C came along. Now one cable charges your laptop, your phone, your headphones.&lt;/p&gt;

&lt;p&gt;Or a more recent one — &lt;strong&gt;MCP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before MCP, every AI app wrote its own way to get the weather. Its own way to read the news. Its own way to send an email. If you wanted your tool to work with Claude, you built one thing. If you wanted it to work with GPT, you built another. If you wanted it to work with Gemini, another.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;MCP&lt;/strong&gt; came along. One protocol. One format. And now any tool that speaks MCP works with any agent that supports MCP — Claude, GPT, Gemini, whoever comes next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Standards do that. They turn messes into ecosystems.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After a standard exists, everything connects. Anyone can build on top. Nobody has to build from underneath anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HyperFrames&lt;/strong&gt; is doing that for video. A small contract — A bunch of rules — and suddenly the whole game changes.&lt;/p&gt;

&lt;p&gt;But the part I want you to remember is the pair. &lt;strong&gt;The SKILLs files&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt; &lt;strong&gt;the Studio&lt;/strong&gt;. The instruction &lt;em&gt;and&lt;/em&gt; the editor that reads exactly those instructions. That's the two-sided trick. That's why it works when nobody else's does.&lt;/p&gt;

&lt;p&gt;And the twist that makes it urgent rather than just neat — in a world where AI is going to write most of our video content, the format AI can write is the format that wins.&lt;/p&gt;

&lt;p&gt;AI already writes HTML. Fluently. Every day.&lt;/p&gt;

&lt;p&gt;So if the video format is HTML, and the AI has instructions to write it correctly, and an editor exists that reads exactly what the AI was told to write —&lt;/p&gt;

&lt;p&gt;Then the AI's output &lt;em&gt;is&lt;/em&gt; the video project. Ready to edit. Ready to render. Ready to ship.&lt;/p&gt;

&lt;p&gt;That's not a feature. That's the future.&lt;/p&gt;




&lt;h2&gt;
  
  
  A note before I go
&lt;/h2&gt;

&lt;p&gt;I'm writing this because I struggled.&lt;/p&gt;

&lt;p&gt;I spent the past week staring at videos, reading documentation, watching people do it on YouTube — and every time, they'd say "it's just HTML, it's easy, you just ask the AI" and move on. And I kept thinking, okay, but &lt;em&gt;how&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And I think maybe some of you have felt the same. You see people use something magical, everyone tells you it's simple, and somehow you still can't see how the trick works.&lt;/p&gt;

&lt;p&gt;And honestly, maybe this blackbox was never a blackbox at all.&lt;/p&gt;

&lt;p&gt;Maybe it was obvious from everything that had been handed to me all along.&lt;/p&gt;

&lt;p&gt;Maybe I just didn't see it.&lt;/p&gt;

&lt;p&gt;But I felt the pain. So I shared the cure.&lt;/p&gt;

&lt;p&gt;If you've been through the same struggle with HyperFrames, or Remotion, or anything else — doesn't have to be a video tool — I'd love to hear about it. And if you find anything wrong in this article, please point it out. I'd be thankful for the generosity.&lt;/p&gt;

&lt;p&gt;Thanks for being here.&lt;/p&gt;

&lt;p&gt;Stay happy, stay blessed.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
