Skip to content

ChromuSx/SkipTubeAI

SkipTube AI

SkipTube AI Logo

AI-powered Chrome extension that automatically detects and skips sponsorships, intros, outros, and promotional content in YouTube videos using Claude AI or OpenAI.

Version License Chrome Web Store GitHub Stars

GitHub Sponsors Ko-fi Buy Me a Coffee PayPal

Install from Chrome Web Store β€’ Video β€’ Screenshots β€’ Support


🎬 See It in Action

skiptube-ai-promo.mp4

β–Ά Press play for sound. Not rendering in GitHub? Download the MP4.


πŸš€ Features

  • πŸ€– Multiple AI Providers: Choose between Anthropic Claude or OpenAI GPT for transcript analysis
  • 🎯 Smart Model Selection: Pick the best model for your needs (Haiku/Sonnet for Claude, GPT-4o/4o-mini for OpenAI)
  • ⚑ Automatic Skipping: Seamlessly skips detected segments without interruption
  • 🎨 Visual Timeline Markers: Color-coded segments on YouTube's progress bar
  • βš™οΈ Customizable Categories: Choose what to skip (sponsors, intros, outros, donations, self-promo)
  • πŸ’Ύ Smart Caching: Stores analysis results locally for 30 days
  • πŸ“Š Detailed Statistics: Track time saved, segments skipped, and analyzed videos
  • πŸ”’ Privacy-First: All data stored locally, you control your own API key
  • 🎯 Channel Whitelist: Exclude specific channels to support your favorite creators
  • ⚑ Advanced Settings: Configure AI model, confidence threshold, and skip buffer

πŸ“Έ Screenshots

Popup settings Advanced configuration
SkipTube AI popup settings SkipTube AI advanced configuration
Statistics Channel exclusions
SkipTube AI statistics dashboard SkipTube AI channel exclusion manager

SkipTube AI analyzed video cache viewer


πŸ“¦ Installation

For Users

  1. Install from Chrome Web Store (Recommended)

  2. Get Your API Key

    Choose your preferred AI provider:

    Option A: Anthropic Claude (Recommended)

    • Visit Anthropic Console
    • Create a free account if you don't have one
    • Generate a new API key (starts with sk-ant-)

    Option B: OpenAI GPT

    • Visit OpenAI Platform
    • Create an account if you don't have one
    • Generate a new API key (starts with sk-)
  3. Configure the Extension

    • Click the SkipTube AI icon in your Chrome toolbar
    • Select your AI Provider (Claude or OpenAI)
    • Paste your API key in the corresponding section
    • Click "Save"
    • Choose your preferred AI model
    • Select which categories to skip
    • Done! Start watching YouTube videos

For Developers

See Development Setup below.


🎬 How It Works

  1. Transcript Extraction: When you watch a YouTube video with captions, SkipTube AI extracts the transcript from the page
  2. AI Analysis: The transcript is sent to Claude AI for intelligent analysis
  3. Segment Detection: Claude identifies sponsorships, intros, outros, donations, and self-promotions
  4. Smart Caching: Results are cached locally for 30 days to avoid re-analysis
  5. Visual Feedback: Colored markers appear on the video timeline
  6. Automatic Skipping: The extension automatically skips identified segments during playback

πŸ”’ Privacy & Security

  • βœ… Your API key is stored locally in your browser (encrypted by Chrome)
  • βœ… All settings and cache are stored locally on your device
  • βœ… No tracking - we don't collect any personal data
  • βœ… No remote servers - we don't operate any backend
  • βœ… Open source - all code is publicly auditable
  • βœ… Transparent - only video transcripts are sent to Anthropic for analysis

Read our full Privacy Policy.


πŸ“‹ Detected Categories

Category Description Color
🎯 Sponsorships Paid promotions, sponsored content, discount codes πŸ”΄ Red
🎬 Intros Opening sequences, channel intros πŸ”΅ Cyan
πŸ‘‹ Outros Closing sequences, end screens 🟣 Purple
πŸ’ Donations SuperChat readings, patron mentions 🟒 Green
πŸ“’ Self-Promotion Merch plugs, social media callouts 🟠 Orange

❓ FAQ

Does it work on all YouTube videos?

It works on videos with available captions/transcripts. If a video doesn't have captions, the extension cannot analyze it.

Is my API key secure?

Yes! Your API key is stored locally using Chrome's secure storage API. It's never transmitted to us or third parties (except Anthropic for analysis).

Can I exclude certain channels?

Absolutely! Go to "Advanced Settings" β†’ "Excluded channels" and add channels you want to support.

Does it slow down YouTube?

No! Analysis happens in the background. Already-analyzed videos load instantly (< 100ms) thanks to caching.

Can I customize what gets skipped?

Yes! You can individually enable/disable each category and adjust the AI confidence threshold (0.5-1.0).


πŸ› οΈ Development Setup

Prerequisites

1. Clone and Install

git clone https://github.com/ChromuSx/SkipTubeAI.git
cd SkipTubeAI
npm install

2. Build the Extension

# Development build (with source maps)
npm run build

# Watch mode (rebuilds on file changes)
npm run watch

# Production build (minified)
NODE_ENV=production npm run build

3. Load in Chrome

  1. Open Chrome and navigate to chrome://extensions/
  2. Enable "Developer mode" (toggle in top-right)
  3. Click "Load unpacked"
  4. Select the dist directory (not the root directory!)
  5. The extension is now loaded!

4. Configure API Key

  1. Click the extension icon in Chrome toolbar
  2. Enter your Claude API key in the popup
  3. Click "Save"

Note: Unlike the old version, the API key is now configured through the UI, not hardcoded in source files.


πŸ“ Project Structure

SkipTubeAI/
β”œβ”€β”€ src/                                # πŸ“‚ SOURCE CODE (edit here)
β”‚   β”œβ”€β”€ background/                     # Background service worker
β”‚   β”‚   └── background-main.js          # Main background orchestrator
β”‚   β”‚
β”‚   β”œβ”€β”€ content/                        # Content script (YouTube page)
β”‚   β”‚   └── content-main.js             # Main content orchestrator
β”‚   β”‚
β”‚   β”œβ”€β”€ popup/                          # Extension popup
β”‚   β”‚   β”œβ”€β”€ popup.html                  # Popup UI
β”‚   β”‚   └── popup-main.js               # Popup logic
β”‚   β”‚
β”‚   β”œβ”€β”€ cache-viewer/                   # Cache viewer page
β”‚   β”‚   β”œβ”€β”€ cache-viewer.html           # Cache viewer UI
β”‚   β”‚   └── cache-viewer-main.js        # Cache viewer logic
β”‚   β”‚
β”‚   β”œβ”€β”€ help/                           # Help page
β”‚   β”‚   β”œβ”€β”€ help.html                   # Help page UI
β”‚   β”‚   └── help.js                     # Help page script
β”‚   β”‚
β”‚   β”œβ”€β”€ shared/                         # Shared modules
β”‚   β”‚   β”œβ”€β”€ config.js                   # Configuration constants
β”‚   β”‚   β”œβ”€β”€ constants.js                # Application constants
β”‚   β”‚   β”œβ”€β”€ utils.js                    # Utility functions
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ errors/                     # Error classes
β”‚   β”‚   β”‚   β”œβ”€β”€ base-error.js
β”‚   β”‚   β”‚   β”œβ”€β”€ api-error.js
β”‚   β”‚   β”‚   β”œβ”€β”€ storage-error.js
β”‚   β”‚   β”‚   β”œβ”€β”€ validation-error.js
β”‚   β”‚   β”‚   β”œβ”€β”€ transcript-error.js
β”‚   β”‚   β”‚   └── error-handler.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ logger/                     # Logging system
β”‚   β”‚   β”‚   β”œβ”€β”€ log-levels.js
β”‚   β”‚   β”‚   └── logger.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ models/                     # Data models
β”‚   β”‚   β”‚   β”œβ”€β”€ segment.js
β”‚   β”‚   β”‚   β”œβ”€β”€ transcript.js
β”‚   β”‚   β”‚   β”œβ”€β”€ settings.js
β”‚   β”‚   β”‚   └── analysis-result.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ validators/                 # Validation logic
β”‚   β”‚   β”‚   β”œβ”€β”€ segment-validator.js
β”‚   β”‚   β”‚   β”œβ”€β”€ settings-validator.js
β”‚   β”‚   β”‚   β”œβ”€β”€ api-validator.js
β”‚   β”‚   β”‚   └── transcript-validator.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ repositories/               # Data access layer
β”‚   β”‚   β”‚   β”œβ”€β”€ cache-repository.js
β”‚   β”‚   β”‚   β”œβ”€β”€ settings-repository.js
β”‚   β”‚   β”‚   └── stats-repository.js
β”‚   β”‚   β”‚
β”‚   β”‚   └── services/                   # Business logic
β”‚   β”‚       β”œβ”€β”€ ai-service.js           # AI analysis
β”‚   β”‚       β”œβ”€β”€ storage-service.js      # Chrome storage wrapper
β”‚   β”‚       β”œβ”€β”€ analytics-service.js    # Statistics tracking
β”‚   β”‚       β”œβ”€β”€ transcript-service.js   # Transcript extraction
β”‚   β”‚       └── providers/              # AI provider implementations
β”‚   β”‚           β”œβ”€β”€ base-provider.js    # Abstract provider class
β”‚   β”‚           β”œβ”€β”€ claude-provider.js  # Anthropic Claude
β”‚   β”‚           └── openai-provider.js  # OpenAI GPT
β”‚   β”‚
β”‚   β”œβ”€β”€ manifest.json                   # Chrome extension manifest
β”‚   β”œβ”€β”€ icons/                          # Extension icons
β”‚   └── logo.png                        # Extension logo
β”‚
β”œβ”€β”€ dist/                               # πŸ“¦ BUILD OUTPUT (load this in Chrome!)
β”‚   β”œβ”€β”€ manifest.json                   # Copied from src/
β”‚   β”œβ”€β”€ popup.html                      # Copied from src/popup/
β”‚   β”œβ”€β”€ cache-viewer.html               # Copied from src/cache-viewer/
β”‚   β”œβ”€β”€ help.html                       # Copied from src/help/
β”‚   β”œβ”€β”€ help.js                         # Copied from src/help/
β”‚   β”œβ”€β”€ icons/                          # Copied from src/
β”‚   β”œβ”€β”€ logo.png                        # Copied from src/
β”‚   β”œβ”€β”€ background-bundle.js            # Compiled from src/background/
β”‚   β”œβ”€β”€ content-bundle.js               # Compiled from src/content/
β”‚   β”œβ”€β”€ popup-bundle.js                 # Compiled from src/popup/
β”‚   └── cache-viewer-bundle.js          # Compiled from src/cache-viewer/
β”‚
β”œβ”€β”€ rollup.config.*.js                  # Build configurations
β”œβ”€β”€ package.json                        # Dependencies and scripts
β”œβ”€β”€ marketplace/                        # Chrome Web Store listing text and assets
β”‚   └── chrome-web-store/
β”‚       β”œβ”€β”€ screenshots/                # Store screenshots
β”‚       β”œβ”€β”€ promotional-images/         # Store promo tiles
β”‚       β”œβ”€β”€ promotional-video/          # MP4, thumbnail, YouTube metadata
β”‚       └── video/                      # Remotion source for the promo video
β”œβ”€β”€ PRIVACY.md                          # Privacy policy
β”œβ”€β”€ CLAUDE.md                           # Claude Code instructions
└── README.md                           # This file

πŸ›’ Chrome Web Store Assets

All store-ready assets live in marketplace/chrome-web-store/:

Render the promo video locally with:

npm run promo:video:render
npm run promo:video:thumbnail

πŸ’‘ Development Workflow

  • Edit files in src/ - This is your source code
  • Run npm run build - Compiles everything to dist/
  • Load dist/ in Chrome - Load the dist folder as unpacked extension
  • Changes not showing? - Rebuild and reload the extension

πŸ—οΈ Architecture

Message Flow

YouTube Page (content.js)
      ↓
  Extract Transcript
      ↓
  Send to Background ──→ Background Service Worker
                              ↓
                         Check Cache
                              ↓
                      AI Analysis (Claude)
                              ↓
                      Parse & Validate
                              ↓
                         Save Cache
                              ↓
  Content Script ←──── Return Segments
      ↓
  Render Markers
      ↓
  Monitor & Skip

Key Components

Background Service Worker

  • AIService: Handles Claude API communication
  • StorageService: Manages Chrome storage operations
  • CacheRepository: Dual-layer caching (memory + persistent)
  • AnalyticsService: Tracks statistics

Content Script

  • TranscriptService: Extracts transcripts from YouTube DOM
  • VideoMonitor: Monitors playback and executes skips
  • SegmentManager: Manages skip segments
  • UIManager: Renders visual markers and notifications

Popup

  • PopupManager: Manages settings UI
  • SettingsRepository: Persists user preferences

Shared Infrastructure

  • Models: Type-safe data structures (Segment, Transcript, Settings, AnalysisResult)
  • Validators: Input validation and sanitization
  • Errors: Custom error hierarchy
  • Logger: Structured logging with levels

πŸ”§ Configuration

AI Models

// src/shared/config.js
API: {
  ENDPOINT: 'https://api.anthropic.com/v1/messages',
  MODELS: {
    HAIKU: 'claude-3-5-haiku-20241022',    // Fast & economical
    SONNET: 'claude-sonnet-4-5-20250929'   // More accurate
  }
}

Cache Settings

CACHE: {
  MAX_AGE_DAYS: 30,        // Auto-clean cache older than 30 days
  KEY_PREFIX: 'analysis_'
}

Default User Settings

DEFAULTS: {
  skipSponsors: true,
  skipIntros: false,
  skipOutros: false,
  skipDonations: true,
  skipSelfPromo: true,
  autoSkip: true,
  enablePreview: true
}

πŸ“¦ Build System

The project uses Rollup for bundling with the following features:

  • βœ… Modular ES6+ source code
  • βœ… Tree-shaking for optimized bundles
  • βœ… Source maps in development mode
  • βœ… Minification in production mode
  • βœ… Separate bundles for background, content, popup, and cache-viewer

Build Commands

npm run build                  # Build all bundles
npm run build:content          # Build content script only
npm run build:background       # Build background script only
npm run build:popup            # Build popup only
npm run build:cache-viewer     # Build cache viewer only
npm run watch                  # Watch mode for development

πŸ§ͺ Testing

Manual Testing

  1. Load extension in Chrome (see Development Setup)
  2. Open a YouTube video with captions
  3. Open DevTools Console (F12)
  4. Verify analysis starts automatically
  5. Check timeline for colored markers
  6. Test auto-skip functionality

Debugging

  • Background logs: chrome://extensions/ β†’ Click "service worker" link
  • Content logs: F12 on YouTube page β†’ Console tab
  • Storage: DevTools β†’ Application β†’ Storage β†’ Extension
  • Clear cache: Click "Clear all" in extension popup
  • Force reanalysis: Click "Reanalyze" button

πŸ› Common Issues

Extension not working

  1. Verify the extension is enabled in chrome://extensions/
  2. Check that the Active toggle is ON in the popup
  3. Ensure you've configured a valid API key
  4. Verify the video has captions/transcripts available

"API Key not configured" error

  1. Click the extension icon
  2. Enter your Claude API key in the "API Configuration" section
  3. Click "Save"
  4. Reload the YouTube page

Segments not appearing

  • Video must have captions/transcripts
  • Try manually opening the transcript panel on YouTube
  • Check browser console for errors
  • Verify at least one skip category is enabled

Build errors

rm -rf node_modules dist
npm install
npm run build

πŸ“Š Performance

Metric Value
First analysis 2-5 seconds
Cached video < 100ms
Memory usage 5-10 MB
Storage per video 1-2 KB

🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes
  4. Build and test: npm run build
  5. Commit: git commit -m "Add amazing feature"
  6. Push: git push origin feature/amazing-feature
  7. Open a Pull Request

Development Guidelines

  • Follow existing code style
  • Add JSDoc comments for new functions
  • Test thoroughly before submitting
  • Update documentation if needed

πŸ’– Support the Project

This project is completely free and open source. If you find it useful and would like to support its continued development and updates, consider making a donation. Your support helps keep the project alive and motivates me to add new features and improvements!

GitHub Sponsors Ko-fi Buy Me a Coffee PayPal

Every contribution, no matter how small, is greatly appreciated! ❀️


πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ™ Acknowledgments

  • Claude AI by Anthropic for providing the AI analysis engine
  • Chrome Extensions API for the extension framework
  • Rollup for the build system
  • YouTube for providing transcript data
  • All contributors and users who provide feedback

πŸ“ž Support


πŸ”— Links


If you find this extension helpful, consider ⭐ starring the repository!

Made with ❀️ by Giovanni Guarino

About

AI-powered Chrome extension that automatically detects and skips sponsorships, intros, outros, and promotional content in YouTube videos using Claude AI or OpenAI.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors