<?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: Jagdish Pal</title>
    <description>The latest articles on DEV Community by Jagdish Pal (@jagdishpal02000).</description>
    <link>https://dev.to/jagdishpal02000</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%2F4003620%2F615a7b49-d024-4f9d-9950-a1c4ad4c483d.png</url>
      <title>DEV Community: Jagdish Pal</title>
      <link>https://dev.to/jagdishpal02000</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jagdishpal02000"/>
    <language>en</language>
    <item>
      <title>I Built an AI-Powered YouTube Sponsor Skipper Without Paying for LLM APIs</title>
      <dc:creator>Jagdish Pal</dc:creator>
      <pubDate>Fri, 26 Jun 2026 08:37:56 +0000</pubDate>
      <link>https://dev.to/jagdishpal02000/i-built-an-ai-powered-youtube-sponsor-skipper-without-paying-for-llm-apis-2a97</link>
      <guid>https://dev.to/jagdishpal02000/i-built-an-ai-powered-youtube-sponsor-skipper-without-paying-for-llm-apis-2a97</guid>
      <description>&lt;p&gt;Every developer has those moments where a tiny annoyance turns into a weekend project.&lt;/p&gt;

&lt;p&gt;Mine started while watching YouTube.&lt;/p&gt;

&lt;p&gt;The video itself was great.&lt;/p&gt;

&lt;p&gt;Then came:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Before we continue, today's video is sponsored by..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It was a VPN.&lt;/p&gt;

&lt;p&gt;A few minutes later, another creator was promoting a course.&lt;/p&gt;

&lt;p&gt;Another video promoted a betting app.&lt;/p&gt;

&lt;p&gt;I already had an ad blocker, so YouTube's ads weren't the problem.&lt;/p&gt;

&lt;p&gt;The problem was that these sponsorships were embedded directly into the video itself.&lt;/p&gt;

&lt;p&gt;That made me wonder:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Could AI identify sponsor segments automatically?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question eventually became &lt;strong&gt;Skipper AI&lt;/strong&gt;, an open-source Chrome extension that automatically skips in-video sponsorships.&lt;/p&gt;

&lt;p&gt;But the most interesting part wasn't building the extension.&lt;/p&gt;

&lt;p&gt;It was figuring out how to do it &lt;strong&gt;without paying for AI inference.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Existing Solution
&lt;/h2&gt;

&lt;p&gt;If you've used YouTube long enough, you've probably heard of SponsorBlock.&lt;/p&gt;

&lt;p&gt;It's an amazing open-source project.&lt;/p&gt;

&lt;p&gt;I've been using it for years.&lt;/p&gt;

&lt;p&gt;The only limitation I kept running into was that it depends on community-submitted timestamps.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Newly uploaded videos usually don't have timestamps.&lt;/li&gt;
&lt;li&gt;Small creators often never get annotations.&lt;/li&gt;
&lt;li&gt;Someone has to watch the video first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SponsorBlock isn't the problem.&lt;/p&gt;

&lt;p&gt;It simply solves a different problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Obvious AI Solution
&lt;/h2&gt;

&lt;p&gt;The first idea seemed obvious.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extract the transcript.&lt;/li&gt;
&lt;li&gt;Send it to an LLM.&lt;/li&gt;
&lt;li&gt;Ask it to identify sponsor timestamps.&lt;/li&gt;
&lt;li&gt;Skip those timestamps.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Technically simple.&lt;/p&gt;

&lt;p&gt;Financially... not so much.&lt;/p&gt;

&lt;p&gt;Running inference for thousands of users would quickly become expensive.&lt;/p&gt;

&lt;p&gt;I wanted the extension to remain completely free.&lt;/p&gt;

&lt;p&gt;So I started looking for another approach.&lt;/p&gt;




&lt;h2&gt;
  
  
  Discovering Ask Gemini
&lt;/h2&gt;

&lt;p&gt;While exploring YouTube I noticed something interesting.&lt;/p&gt;

&lt;p&gt;Logged-in users now have:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ask Gemini about this video&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That immediately made me curious.&lt;/p&gt;

&lt;p&gt;Instead of running my own LLM...&lt;/p&gt;

&lt;p&gt;Could I simply leverage the AI that YouTube already provides?&lt;/p&gt;

&lt;p&gt;That idea became the foundation of Skipper AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  The First Prototype
&lt;/h2&gt;

&lt;p&gt;My first version automated the UI.&lt;/p&gt;

&lt;p&gt;It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Opened Gemini&lt;/li&gt;
&lt;li&gt;Typed a prompt&lt;/li&gt;
&lt;li&gt;Clicked Send&lt;/li&gt;
&lt;li&gt;Waited for the answer&lt;/li&gt;
&lt;li&gt;Parsed the timestamps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It worked...&lt;/p&gt;

&lt;p&gt;But it was fragile.&lt;/p&gt;

&lt;p&gt;Everything depended on DOM elements.&lt;/p&gt;

&lt;p&gt;Any YouTube UI change could break the extension.&lt;/p&gt;

&lt;p&gt;So I went back to the drawing board.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Better Approach
&lt;/h2&gt;

&lt;p&gt;Instead of automating the interface, I explored how the feature actually works.&lt;/p&gt;

&lt;p&gt;Using Chrome DevTools, I inspected the network requests generated when asking Gemini about a video.&lt;/p&gt;

&lt;p&gt;That led to a much cleaner implementation.&lt;/p&gt;

&lt;p&gt;Instead of driving the UI, the extension communicates through the same request flow.&lt;/p&gt;

&lt;p&gt;This made the extension faster, cleaner, and far more reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User opens YouTube video
        │
        ▼
Check local cache
        │
   ┌────┴────┐
   │         │
 Hit        Miss
   │         │
   ▼         ▼
 Skip     Ask Gemini
              │
              ▼
     Parse timestamps
              │
              ▼
         Store cache
              │
              ▼
        Skip sponsor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Fallback to SponsorBlock
&lt;/h2&gt;

&lt;p&gt;Not every user has Ask Gemini.&lt;/p&gt;

&lt;p&gt;Some users aren't logged in.&lt;/p&gt;

&lt;p&gt;Some regions don't support it.&lt;/p&gt;

&lt;p&gt;Instead of failing, the extension automatically falls back to SponsorBlock.&lt;/p&gt;

&lt;p&gt;That means users get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI detection for new videos.&lt;/li&gt;
&lt;li&gt;Community timestamps whenever available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't replacing SponsorBlock.&lt;/p&gt;

&lt;p&gt;It's complementing it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Caching
&lt;/h2&gt;

&lt;p&gt;Once sponsor timestamps are generated, they're cached using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Video ID&lt;/li&gt;
&lt;li&gt;Video Duration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future views of the same video don't need another AI request.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;The project is completely open source.&lt;/p&gt;

&lt;p&gt;Transparency is important for browser extensions.&lt;/p&gt;

&lt;p&gt;Anyone can inspect the implementation, report issues, or contribute improvements.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Some improvements I'm currently exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better multilingual support&lt;/li&gt;
&lt;li&gt;Smarter timestamp validation&lt;/li&gt;
&lt;li&gt;Better caching&lt;/li&gt;
&lt;li&gt;More browser support&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jagdishpal02001/skipper" rel="noopener noreferrer"&gt;https://github.com/jagdishpal02001/skipper&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chrome Extension
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/ncchpipphiigdfbpbjofbhbahcgckaob" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/ncchpipphiigdfbpbjofbhbahcgckaob&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Website
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://skipperai.netlify.app/" rel="noopener noreferrer"&gt;https://skipperai.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, suggestions, and criticism are always welcome.&lt;/p&gt;

</description>
      <category>extensions</category>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
