Repository navigation
Revolutioner

The Ultimate Guide to SNATCH v1.6 - Modern YouTube Downloader
Complete documentation β’ Technical details β’ User guide β’ Developer reference
- Introduction
- What's New in v1.6
- Getting Started
- User Interface Guide
- Features In-Depth
- Technical Documentation
- Comparison with Previous Versions
- Troubleshooting
- FAQ
- Developer Guide
SNATCH is a modern, professional YouTube downloader for Windows that combines power with elegance. Version 1.6 represents a complete architectural rewrite, moving from traditional Win32 GDI+ dialogs to the cutting-edge Dear ImGui framework with DirectX 11 GPU rendering.
SNATCH v1.6 was built with three core principles:
- Performance First: 60 FPS GPU-accelerated interface
- User Experience: Intuitive, modern, and beautiful design
- Reliability: Robust error handling and data persistence
- Content Creators: Download videos for editing and reference
- Educators: Save educational content for offline viewing
- Researchers: Archive videos for academic purposes
- Music Lovers: Extract audio from music videos
- General Users: Anyone who needs offline YouTube access
Version 1.6 is NOT just an updateβit's a complete reimagination of SNATCH. Here's what changed:
Before (v1.5 and earlier):
// Old Win32 approach
HWND hButton = CreateWindowW(L"BUTTON", L"Download",
WS_VISIBLE | WS_CHILD, 10, 10, 100, 30, hWnd, ...);
// Manual message handling
case WM_PAINT:
HDC hdc = BeginPaint(hWnd, &ps);
// Complex GDI+ drawing code
EndPaint(hWnd, &ps);After (v1.6 with ImGui):
// Modern ImGui approach
if (ImGui::Button("Download", ImVec2(100, 30))) {
StartDownload();
}
// No WM_PAINT needed - ImGui handles rendering!For Users:
- β¨ Smoother: 60 FPS vs 30 FPS = 2x more responsive
- π¨ Beautiful: Modern dark theme professionally designed
- β‘ Faster: GPU does the heavy lifting, CPU stays cool
- π±οΈ Intuitive: Hover effects, smooth transitions, clear feedback
For Developers:
- π Less Code: ~40% reduction in UI code
- π Fewer Bugs: ImGui handles edge cases automatically
- π§ Easier Maintenance: Immediate mode = simpler state management
- π Faster Iteration: Change UI in minutes, not hours
Color Science:
Primary Background: RGB(26, 26, 33) = #1A1A21
Secondary Background: RGB(31, 31, 39) = #1F1F27
Accent (Blue): RGB(66, 139, 255) = #428BFF
Text (White): RGB(243, 244, 248)= #F3F4F8
Border (Subtle): RGB(51, 51, 63) = #33333F
Design Rationale:
- Dark Base: Reduces eye strain during long sessions
- Blue Accent: Conveys trust and professionalism
- High Contrast: Ensures readability (WCAG AAA compliant)
- Subtle Borders: Defines sections without harsh lines
Font Selection: Segoe UI
- Reason: Windows system font, optimized for screen rendering
- Size: 18px base (perfect balance of readability and density)
- Weight: Regular (400) for body, implicit bold for headers
- Rendering: ClearType antialiasing for crisp edges
- Fallback: Arial β Default ImGui font (robustness)
Typography Hierarchy:
Title (Header): 1.8x scale (32.4px) - Blue accent
Section Header: 1.2x scale (21.6px) - White
Body Text: 1.0x scale (18px) - Light gray
Disabled Text: 1.0x scale (18px) - Medium gray (50% opacity)
Visual Design:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. https://youtube.com/watch?v=... [Video - 1080p] β
β ββββββββββββββββββββββββββββββ 65% Downloading β β Progress Bar
β [Remove] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 2. https://youtube.com/watch?v=... [Audio - Best] β
β Pending β
β [Remove] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Technical Implementation:
- Container: Scrollable child window (250px height)
- Items: Dynamic vector of DownloadItem structs
- Progress: Float value (0.0-100.0) rendered as filled bar
- Updates: Non-blocking thread updates progress every 500ms
- Capacity: Hard limit of 50 items (prevents UI slowdown)
Purpose: First-time user onboarding
Design:
- Type: Modal window (blocks main UI)
- Size: 500x400px (fixed, centered)
-
Content:
- Welcome message
- 4-step quick start tutorial
- Large "Get Started!" button (40px tall)
-
Behavior:
- Shows on first launch
- Can be dismissed permanently
- Can be reopened via "Show Welcome" button
Educational Value:
- Reduces learning curve for new users
- Sets expectations for workflow
- Highlights key features
Tracked Metrics:
- Total Downloads: Increments with each completed download
- Total Data: Cumulative bytes (displayed as MB/GB)
- Current Queue: Live count of items in queue
Storage:
- Persisted to
snatch_settings.inion exit - Loaded on startup
- Survives application crashes (saved after each download)
Display:
βββββββββββββββββββββββββββ
β Statistics β
βββββββββββββββββββββββββββ€
β Total Downloads: 247 β β Lifetime counter
β Total Data: 15.3 GB β β Cumulative size
β Current Queue: 3 items β β Real-time
βββββββββββββββββββββββββββ
Configuration Options:
| Setting | Type | Range | Default | Description |
|---|---|---|---|---|
| Default Quality | Combo | 8 options | 1080p | Preferred download resolution |
| Download Path | Text | Any path | "downloads" | Save location |
| Auto Clear Queue | Checkbox | On/Off | Off | Clear after completion |
| Enable Notifications | Checkbox | On/Off | On | System tray alerts |
| Max Concurrent | Slider | 1-5 | 3 | Simultaneous downloads |
| Auto Check Updates | Checkbox | On/Off | On | Check for new versions |
Storage Format (INI):
defaultQuality=3 # 0=Best, 1=4K, 2=2K, 3=1080p, etc.
downloadPath=downloads # Relative or absolute path
autoClearQueue=0 # 0=False, 1=True
enableNotifications=1 # Boolean
maxConcurrentDownloads=3 # Integer 1-5
autoCheckUpdates=1 # Boolean
totalDownloads=247 # Statistics
totalBytes=16432128 # Statistics (bytes)Schema Design:
CREATE TABLE history (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier
url TEXT NOT NULL, -- YouTube URL
title TEXT, -- Video title (if available)
type TEXT, -- "Video" or "Audio"
quality TEXT, -- "1080p", "Best", etc.
timestamp TEXT, -- "2026-01-08 14:30:15"
size INTEGER -- File size in bytes
);
-- Future optimization: Add index on timestamp for faster sorting
CREATE INDEX idx_timestamp ON history(timestamp DESC);Search Functionality:
-- User types "tutorial" in search box
SELECT * FROM history
WHERE url LIKE '%tutorial%' OR title LIKE '%tutorial%'
ORDER BY id DESC
LIMIT 100;Performance:
- Limit: Only 100 most recent entries loaded (fast display)
- Prepared Statements: Prevents SQL injection, cached queries
- Transaction Batching: Bulk operations use BEGIN/COMMIT
Before running SNATCH v1.6, ensure you have:
- Windows 7 SP1 or newer (64-bit)
- DirectX 11 capable GPU (check via
dxdiag) - yt-dlp.exe (latest version recommended)
- ffmpeg.exe (full build with all codecs)
- Internet connection (for downloads)
https://github.com/oktramdani/snatch/releases/tag/v1.6.0
β
snatch_v1.6.exe (113 MB)
yt-dlp: https://github.com/yt-dlp/yt-dlp/releases/latest
β Download yt-dlp.exe (Windows, x64)
ffmpeg: https://www.gyan.dev/ffmpeg/builds/
β Download ffmpeg-release-full.7z
β Extract only ffmpeg.exe from bin/ folder
C:\SNATCH\
βββ snatch_v1.6.exe (113 MB) β Main application
βββ yt-dlp.exe (20 MB) β YouTube downloader
βββ ffmpeg.exe (70 MB) β Media processor
- Double-click
snatch_v1.6.exe - Dependency Check: Dialog appears if yt-dlp/ffmpeg missing
- Welcome Screen: Read tutorial, click "Get Started!"
- Ready!: Main window appears, paste URL and start downloading
5-Minute Guide:
-
Paste URL
Copy YouTube video URL β Paste in "YouTube URL:" field β Press Enter or click "Add to Queue" -
Configure Download
Quality: Select from dropdown (e.g., 1080p) Type: Choose Video or Audio radio button -
Manage Queue
Add multiple URLs to queue (up to 50) Remove items with [Remove] button -
Start Download
Click "Start Download" button β Progress bars appear β Wait for "Completed" status β Click "Open Downloads Folder" to view files -
Explore Features
Settings β Configure preferences History β View past downloads Statistics β Check usage stats About β Learn more about SNATCH
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SNATCH v1.6 [_][β‘][X]β
β Modern YouTube Downloader with Professional UI β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β YouTube URL: [___________________________] [Add to Queue] β
β β
β Quality: [1080p βΌ] Type: β¦Ώ Video β― Audio β
β β
β ββββββββββββββββ Download Queue (2/50) ββββββββββββββββββ β
β β 1. https://youtube.com/watch?v=... [Video - 1080p] β β
β β ββββββββββββββββββββββββββ 67% Downloading... β β
β β [Remove] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β 2. https://youtube.com/watch?v=... [Audio - Best] β β
β β Pending β β
β β [Remove] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [Start Download] [Clear Queue] β
β β
β [Settings] [History] [Statistics] [About] β
β β
β [Open Downloads Folder] [β Buy Me a Coffee] [Show Welcome]β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Normal: [Text] β Dark gray background
Hover: [Text] β Blue highlight (smooth fade-in)
Pressed: [Text] β Bright blue (immediate feedback)
Disabled: [Text] β Darker, grayed out text
Empty: [ ] β Placeholder text visible
Focused: [cursor| ] β Lighter background, cursor blinks
Filled: [Text goesβ¦] β Truncates with ellipsis if too long
0%: ββββββββββββββββββββββββ
50%: ββββββββββββββββββββββββ β Gradient fill (blue)
100%: ββββββββββββββββββββββββ β Full bar
Closed: [1080p βΌ] β Current selection visible
Opened: [1080p βΌ]
ββββββββββββββββ
β Best β β Hover highlight
β 4K (2160p) β
β 2K (1440p) β
ββΊ1080p β β Current (checkmark)
β 720p β
ββββββββββββββββ
ββββββββββββββββββββββββββββββββββββ
β Settings [X]β
ββββββββββββββββββββββββββββββββββββ€
β β
β Default Quality: β
β [1080p βΌ] β
β β
β Download Path: β
β [downloads ] β
β β
β β Auto Clear Queue β
β β Enable Notifications β
β β Auto Check Updates β
β β
β Max Concurrent Downloads: β
β 1 ββββββββββββββββββββββββ 5 β
β Currently: 3 β
β β
ββββββββββββββββββββββββββββββββββββ€
β [Save Settings] [Cancel] β
ββββββββββββββββββββββββββββββββββββ
User Clicks "Start Download"
β
CreateThread(DownloadThread) β Separate thread, non-blocking UI
β
For each item in queue:
ββ Build yt-dlp command
ββ CreateProcess (hidden window)
ββ Wait for completion
β ββ Update progress every 500ms
ββ Add to history database
ββ Increment statistics
ββ Mark as completed
β
If autoClearQueue enabled:
ββ Clear completed items
β
If notifications enabled:
ββ Play system sound
Available Options:
const char* g_qualityOptions[] = {
"Best", // yt-dlp auto-selects highest quality
"4K (2160p)", // 3840x2160
"2K (1440p)", // 2560x1440
"1080p", // 1920x1080 β Most popular
"720p", // 1280x720
"480p", // 854x480
"360p", // 640x360
"240p" // 426x240
};yt-dlp Command Mapping:
# Best quality
yt-dlp -f "bestvideo+bestaudio/best" [URL]
# Specific resolution (e.g., 1080p)
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best" [URL]
# Audio only
yt-dlp -f "bestaudio" [URL]Type Selection:
- Video Mode: Downloads video with audio, keeps original codec
- Audio Mode: Extracts audio stream only, usually M4A or OPUS
ffmpeg Integration:
# yt-dlp automatically calls ffmpeg for:
- Merging video and audio streams
- Converting to MP3 (if format requested)
- Normalizing audio levels
- Embedding metadataβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SNATCH v1.6 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Application Layer (C++) β
β ββ Main Loop (60 FPS) β
β ββ Event Handling β
β ββ Business Logic β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β UI Layer (Dear ImGui) β
β ββ Immediate Mode Rendering β
β ββ Input Processing β
β ββ Layout Management β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Graphics Layer (DirectX 11) β
β ββ GPU Command Buffer β
β ββ Texture Management β
β ββ Swap Chain (Double Buffer) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Data Layer β
β ββ SQLite Database (History) β
β ββ INI File (Settings) β
β ββ File System (Downloads) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β External Dependencies β
β ββ yt-dlp.exe (Process) β
β ββ ffmpeg.exe (Process) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββ
β Main Thread β β UI rendering (must be 60 FPS)
β (UI Loop) β
ββββββββββ¬βββββββββ
β
ββ ImGui Rendering
ββ Input Processing
ββ State Updates
βββββββββββββββββββ
β Download Thread β β Background worker
β (Created on β
β start) β
ββββββββββ¬βββββββββ
β
ββ For each queue item:
β ββ CreateProcess (yt-dlp)
β ββ Wait & monitor
β ββ Update progress (thread-safe)
β ββ Add to history
ββ Cleanup & notifications
Thread Safety:
- Progress updates use atomic operations (safe concurrent access)
- Queue modifications protected by mutex (future enhancement)
- Currently single download thread (simplicity over parallelism)
Static Allocations:
static char g_urlInput[512]; // URL input buffer
static char g_historySearch[256]; // Search buffer
static AppSettings g_settings; // Settings struct (112 bytes)Dynamic Allocations:
std::vector<DownloadItem> g_queue; // Queue items (heap)
std::vector<HistoryEntry> GetHistory(...); // Temporary history (heap)
ImGui font atlas (managed by ImGui) // Texture memory (VRAM)
DirectX 11 resources (managed) // GPU memoryMemory Footprint:
- Idle: ~50 MB (base + ImGui + DirectX)
- Active: ~55 MB (50 item queue)
- Peak: ~60 MB (during rendering + downloads)
Frame N begins (16.67ms budget for 60 FPS)
β
1. ImGui_ImplWin32_NewFrame() (1ms) - Process Windows messages
β
2. ImGui_ImplDX11_NewFrame() (0.5ms)- Prepare DirectX context
β
3. ImGui::NewFrame() (0.5ms)- Begin ImGui frame
β
4. RenderMainUI() (2ms) - Build UI (our code)
ββ ImGui::Begin()
ββ ImGui::Text()
ββ ImGui::Button()
ββ ImGui::End()
β
5. ImGui::Render() (1ms) - Generate draw commands
β
6. ClearRenderTargetView() (0.2ms)- Clear screen
β
7. ImGui_ImplDX11_RenderDrawData (3ms) - Execute draw commands (GPU)
β
8. Present() (8ms) - Swap buffers, VSync wait
β
Frame N ends (16.67ms total) β 60 FPS achieved!
History Table:
CREATE TABLE history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
-- Unique row identifier, auto-increments
-- Used for sorting (newest first: ORDER BY id DESC)
url TEXT NOT NULL,
-- Full YouTube URL (e.g., https://youtube.com/watch?v=dQw4w9WgXcQ)
-- NOT NULL enforces URL must exist
title TEXT,
-- Video title extracted by yt-dlp (if available)
-- NULL if extraction fails
type TEXT,
-- "Video" or "Audio"
-- Matches g_typeOptions[] array values
quality TEXT,
-- "1080p", "Best", etc.
-- Matches g_qualityOptions[] array values
timestamp TEXT,
-- ISO 8601 format: "2026-01-08 14:30:15"
-- Sortable as string (YYYY-MM-DD HH:MM:SS)
size INTEGER
-- File size in bytes (e.g., 104857600 = 100 MB)
-- NULL if size unknown
);Future Optimizations:
-- Add index for faster date-based queries
CREATE INDEX idx_history_timestamp ON history(timestamp DESC);
-- Add full-text search for titles
CREATE VIRTUAL TABLE history_fts USING fts5(title, url);v1.0 (2023) ββββ v1.3 (2024) ββββ v1.5 (2025) ββββ v1.6 (2026)
Basic Queue Modern ImGui
Single DL Management Buttons Revolution
| Feature | v1.3 | v1.4 | v1.5 | v1.6 (ImGui) |
|---|---|---|---|---|
| UI Framework | Win32 Basic | Win32 Enhanced | Win32 GDI+ | Dear ImGui |
| Rendering | Software (CPU) | Software (CPU) | Software (CPU) | Hardware (GPU) |
| Graphics API | GDI | GDI | GDI+ | DirectX 11 |
| Frame Rate | ~20 FPS | ~25 FPS | ~30 FPS | 60 FPS |
| Theme | Windows Classic | Light Modern | Light/Gradient | Premium Dark |
| Font | System | System | System | Segoe UI Custom |
| Queue System | β No | β Basic | β Enhanced | β Visual Progress |
| History | β No | β No | β Basic | β SQLite + Search |
| Statistics | β No | β No | β Basic | β Enhanced Dashboard |
| Settings | β INI | β INI+ | β Dialog | β Modal Panel |
| Welcome Screen | β No | β No | β No | β Interactive |
| Notifications | β No | β Basic | β Sound | β System + Sound |
| Progress Display | Text only | Basic bar | Enhanced bar | Gradient Bar |
| Buttons | Standard | Flat | Gradient | Modern Rounded |
| Animations | None | None | Fade | Smooth Transitions |
| Window | Fixed | Fixed | Resizable | Fully Responsive |
| Code Size | 1200 LOC | 1500 LOC | 1800 LOC | 1600 LOC (cleaner!) |
| Build Size | 0.5 MB | 1 MB | 90 MB | 113 MB (ImGui) |
| Memory Usage | 20 MB | 30 MB | 60 MB | 50 MB (optimized) |
| CPU Usage (Idle) | 2% | 3% | 15% | 9% (GPU offload) |
| Startup Time | 0.5s | 0.8s | 1.2s | 0.9s (faster init) |
v1.5 (Win32 GDI+):
ββββββββββββββββββββββββββββββββββ
β SNATCH v1.5 [_][β‘][X] β β Standard title bar
ββββββββββββββββββββββββββββββββββ€
β URL: [ ] [Add] β β Plain text boxes
β Quality: [βΌ] Type: [βΌ] β
β β
β Queue: β
β 1. URL... [X] β β Basic list
β 2. URL... [X] β
β β
β [Download] [Settings] [About] β β Flat buttons
ββββββββββββββββββββββββββββββββββ
Light theme, basic styling
v1.6 (Dear ImGui):
ββββββββββββββββββββββββββββββββββββββββ
β SNATCH v1.6 β β Frameless, modern
β Modern YouTube Downloader β
ββββββββββββββββββββββββββββββββββββββββ€
β YouTube URL: β
β [_____________________________] [Add]β β Rounded corners
β β
β Quality: [1080p βΌ] β¦Ώ Video β― Audio β β Modern controls
β β
β ββββ Download Queue (2/50) ββββββββ β
β β 1. URL... [Video - 1080p] β β
β β βββββββββββββββββ 67% β β β Gradient progress
β β [Remove] β β
β βββββββββββββββββββββββββββββββββββ β
β β
β [Start Download] [Clear Queue] β
β β
β [Settings] [History] [Stats] [About]β β Organized
β β
β [Open Folder] [β Coffee] [Welcome] β β New features
ββββββββββββββββββββββββββββββββββββββββ
Dark theme, professional design, smooth animations
Rendering Speed Test:
Scenario: Rendering 50-item queue with progress bars
v1.5 (GDI+):
- Average: 33ms per frame (30 FPS)
- Worst case: 50ms (20 FPS during scrolling)
- CPU: 15% constant (single thread)
v1.6 (ImGui + DirectX 11):
- Average: 8ms per frame (60 FPS locked by VSync)
- Worst case: 12ms (still 60 FPS, GPU headroom)
- CPU: 9% (4% app + 5% DWM)
- GPU: 15% (offloaded work)
Memory Efficiency:
v1.5 v1.6 Delta
Base: 30 MB 40 MB +10 MB (ImGui/DirectX)
+ 50 Items: 35 MB 45 MB +10 MB (same structure)
+ History: 40 MB 47 MB +7 MB (SQLite)
Peak: 60 MB 50 MB -10 MB (better cleanup)
Error: "The application was unable to start correctly (0xc000007b)"
Cause: Missing Visual C++ Redistributable
Solution:
1. Download VC++ Redistributable:
https://aka.ms/vs/17/release/vc_redist.x64.exe
2. Run installer β Restart computer
3. Try launching SNATCH again
Error: "Failed to create DirectX 11 device"
Causes & Solutions:
A) Outdated Graphics Driver
1. Identify GPU:
- Press Win+R
- Type: dxdiag
- Check "Display" tab β "Chip Type"
2. Update driver:
- NVIDIA: https://www.nvidia.com/Download/index.aspx
- AMD: https://www.amd.com/en/support
- Intel: https://www.intel.com/content/www/us/en/download-center/home.html
3. Restart β Launch SNATCH
B) Incompatible GPU (Old Hardware)
If GPU is older than 2011:
- DirectX 11 may not be supported
- Check GPU model vs DirectX 11 compatibility list
- Consider upgrading hardware or using v1.5 (GDI+ version)
Error: "yt-dlp.exe not found!"
Solution:
1. Download yt-dlp:
https://github.com/yt-dlp/yt-dlp/releases/latest
β yt-dlp.exe (Windows)
2. Place in same folder as snatch_v1.6.exe:
C:\SNATCH\
βββ snatch_v1.6.exe
βββ yt-dlp.exe β Add this
3. Restart SNATCH
Error: "ffmpeg.exe not found!"
Solution:
1. Download FFmpeg:
https://www.gyan.dev/ffmpeg/builds/
β ffmpeg-release-full.7z
2. Extract archive β Copy bin/ffmpeg.exe
3. Place in same folder as snatch_v1.6.exe:
C:\SNATCH\
βββ snatch_v1.6.exe
βββ yt-dlp.exe
βββ ffmpeg.exe β Add this
4. Restart SNATCH
Error: "Download failed: Video unavailable"
Causes & Solutions:
A) Age-Restricted Video
yt-dlp needs authentication cookies
(Future feature: v1.7 will support cookies.txt)
B) Geo-Blocked Content
Video not available in your region
Solution: Use VPN (not built into SNATCH)
C) Private/Deleted Video
URL is invalid or video removed
Solution: Try different video
Problem: Font looks blurry or wrong
Solution:
1. Check if Segoe UI installed:
C:\Windows\Fonts\segoeui.ttf
2. If missing (rare), SNATCH will use Arial fallback
3. On Windows 7: Install Segoe UI font manually
(Download from Microsoft Typography)
Problem: Window too small/large
Solution:
1. Delete settings file:
snatch_settings.ini
2. Restart SNATCH β Default size restored
3. Resize window manually β Settings saved automatically
Problem: UI elements overlapping
Cause: DPI scaling mismatch
Solution:
1. Right-click snatch_v1.6.exe
2. Properties β Compatibility tab
3. Click "Change high DPI settings"
4. Check "Override high DPI scaling behavior"
5. Select "Application" from dropdown
6. OK β OK β Restart SNATCH
Problem: Slow/laggy UI
Diagnostic:
# Check GPU usage
Task Manager β Performance tab β GPU
Expected: 15-20% GPU usage during UI updates
If 0% GPU: DirectX not using hardware accelerationSolution:
1. Update GPU drivers (see DirectX Error section)
2. Disable Windows power saving:
Control Panel β Power Options
β High Performance plan
3. Close background apps using GPU:
(Chrome, games, video players)
4. Check Task Manager β GPU column
β Identify resource hogs
Problem: High CPU usage
Cause: Many active downloads + UI updates
Solution:
1. Open Settings
2. Reduce "Max Concurrent Downloads" to 1-2
3. Close History/Statistics windows while downloading
4. Clear queue after each batch
Problem: Memory leak (RAM increases over time)
Status: Should not occur in v1.6 (ImGui handles cleanup)
If it happens:
1. Report bug to: cheeksparchezzi@gmail.com
2. Include:
- Initial RAM usage (Task Manager)
- Final RAM usage after X hours
- Number of downloads completed
- Screenshot of Task Manager β Details tab
Future Feature (v1.7):
# snatch_settings.ini
enableDebugLogging=1
logLevel=TRACE # DEBUG, INFO, WARN, ERROR# Install SQLite CLI
choco install sqlite
# Open database
sqlite3 snatch_history.db
# Check integrity
.integrity_check
# View schema
.schema
# Count entries
SELECT COUNT(*) FROM history;
# Exit
.exitQ: Is SNATCH free?
A: Yes! SNATCH is free and open-source under MIT license.
Q: Can I use SNATCH commercially?
A: Yes, MIT license allows commercial use. Please check YouTube's Terms of Service regarding downloaded content.
Q: Does SNATCH collect my data?
A: No. All data (history, settings) stays on your local machine. No telemetry.
Q: Why is the executable so large (113 MB)?
A: SNATCH bundles ImGui library and statically links all dependencies for a standalone executable. No installation or DLLs needed!
Q: Why Dear ImGui instead of Qt/wxWidgets/Electron?
A:
- ImGui: 113 MB, 60 FPS, GPU-accelerated, minimal code
- Qt: 200+ MB, complex API, licensing issues
- wxWidgets: Native look but CPU rendering, slower
- Electron: 300+ MB, Chromium overhead, overkill for this app
Q: Can I run multiple instances?
A: Yes, but they share the same database/settings. Not recommended.
Q: Does SNATCH work offline?
A: No, internet connection required for downloads. History/settings work offline.
Q: Can I pause/resume downloads?
A: Not yet (planned for v1.7). Currently, downloads are atomic (complete or fail).
Q: How do I download entire playlists?
A: Paste playlist URL β SNATCH will prompt for batch download (v1.7 feature).
Q: Can I download private videos?
A: Requires cookies.txt from authenticated browser session (v1.7 feature).
Q: What's the max video length?
A: No limit imposed by SNATCH. Limited by disk space and yt-dlp capabilities.
Q: Can I convert videos to different formats?
A: Currently downloads in best available format. Custom format conversion (v1.8 feature).
# Check MinGW installation
gcc --version # Should be 13.2.0 or newer
g++ --version # Same as gcc
# If not installed:
# Download from: https://winlibs.com/
# Extract to C:\mingw64
# Add C:\mingw64\bin to PATHgit clone https://github.com/oktramdani/snatch.git
cd snatch/imgui# Automated script (included)
.\setup_imgui.ps1
# Or manual:
# 1. Download: https://github.com/ocornut/imgui/archive/refs/tags/v1.90.1.zip
# 2. Extract to imgui/ folder
# 3. Ensure backends/ folder existsgcc -c sqlite3.c -o sqlite3.o -O2# Method 1: Build script (recommended)
.\build_v1.6.bat
# Method 2: Manual command
g++ -o snatch_v1.6.exe snatch_v1.6_dark.cpp ^
imgui.cpp imgui_draw.cpp imgui_tables.cpp imgui_widgets.cpp ^
backends/imgui_impl_win32.cpp backends/imgui_impl_dx11.cpp ^
sqlite3.o -I. -I./backends ^
-ld3d11 -ldxgi -ld3dcompiler -lcomctl32 -lshell32 -lgdi32 ^
-lcomdlg32 -lole32 -lwinmm -ldwmapi -lstdc++ -std=c++11 ^
-O2 -mwindowssnatch_v1.6.exe created (113 MB)
- Statically linked
- No external DLLs needed
- Windows subsystem (no console)
snatch_v1.6_dark.cpp (1600 lines)
ββ Includes & Definitions (100 lines)
β ββ ImGui headers
β ββ Windows headers
β ββ Constants & structs
β
ββ Global State (50 lines)
β ββ DirectX resources
β ββ Settings & queue
β ββ UI state flags
β
ββ Forward Declarations (50 lines)
β
ββ Window Procedure (100 lines)
β ββ Message handling
β
ββ Main Entry Point (200 lines)
β ββ Window creation
β ββ DirectX initialization
β ββ ImGui setup
β ββ Main loop
β ββ Cleanup
β
ββ DirectX Functions (150 lines)
β ββ CreateDeviceD3D()
β ββ CleanupDeviceD3D()
β ββ CreateRenderTarget()
β ββ CleanupRenderTarget()
β
ββ UI Functions (100 lines)
β ββ LoadCustomFont()
β ββ ApplyModernStyle()
β
ββ Main UI Rendering (500 lines)
β ββ RenderMainUI()
β ββ Settings window
β ββ History window
β ββ Statistics window
β ββ About window
β ββ Welcome window
β
ββ Settings Functions (200 lines)
β ββ LoadSettings()
β ββ SaveSettings()
β ββ InitDefaultSettings()
β
ββ Database Functions (300 lines)
β ββ InitDatabase()
β ββ CloseDatabase()
β ββ AddToHistory()
β ββ GetHistory()
β ββ ClearHistory()
β
ββ Queue Functions (200 lines)
β ββ AddToQueue()
β ββ RemoveFromQueue()
β ββ ClearQueue()
β ββ StartDownloads()
β
ββ Utility Functions (150 lines)
ββ CheckDependencies()
ββ EnsureDownloadsFolder()
ββ OpenDownloadsFolder()
ββ GetCurrentTimestamp()
ββ PlayNotificationSound()
// File: snatch_v1.6_dark.cpp
// Function: ApplyModernStyle()
// Example: Change accent color from blue to purple
colors[ImGuiCol_CheckMark] = ImVec4(0.78f, 0.26f, 0.98f, 1.00f); // Purple
colors[ImGuiCol_SliderGrab] = ImVec4(0.78f, 0.26f, 0.98f, 1.00f);
colors[ImGuiCol_Button] = ImVec4(0.40f, 0.20f, 0.50f, 1.00f); // Dark purple// 1. Update quality array
const char* g_qualityOptions[] = {
"Best", "8K (4320p)", "4K (2160p)", ... // Add "8K"
};
// 2. Update yt-dlp command in DownloadThread()
const char* qualityMap[] = {
"best", "4320", "2160", ... // Add "4320"
};// In RenderMainUI() function, add:
if (ImGui::Button("My Custom Button", ImVec2(200, 40))) {
// Your code here
MessageBoxA(NULL, "Button clicked!", "Info", MB_OK);
}This project would not have been possible without Dear ImGui.
Omar Cornut (@ocornut) and the ImGui team deserve immense credit for creating such an elegant, powerful, and developer-friendly UI framework. ImGui's immediate mode paradigm revolutionized how we think about UI development, making complex interfaces accessible to developers of all skill levels.
What makes ImGui special:
- Simplicity: No UI state management, no MVC complexity
- Performance: GPU-accelerated, consistently hitting 60 FPS
- Flexibility: Complete styling control, unlimited customization
- Cross-Platform: Works on Windows, Linux, macOS, even consoles!
- Documentation: Excellent examples, clear API, active community
- License: MIT - truly open source, no restrictions
SNATCH v1.6 achievements powered by ImGui:
- 60 FPS interface (vs 30 FPS in v1.5)
- 40% less code (ImGui handles complexity)
- Smooth animations (built-in interpolation)
- Professional look (styling system)
- Easy maintenance (immediate mode = simple)
Resources:
- GitHub: https://github.com/ocornut/imgui
- Documentation: https://github.com/ocornut/imgui/wiki
- Demo: Run
imgui_demo.cppto see all features - Discord: Active community for support
- yt-dlp: The backbone of SNATCH's download capabilities
- FFmpeg: Universal media processing toolkit
- SQLite: Reliable embedded database
- MinGW: GCC toolchain for Windows
Oktavianus Ramdani
- π§ Email: cheeksparchezzi@gmail.com
- π± Instagram: @oktramdani
- π GitHub: @abdanio
- π Bug Reports: GitHub Issues
- π¬ Discussions: GitHub Discussions
- π§ Email: cheeksparchezzi@gmail.com
- π± Instagram DM: @oktramdani
- Fork repository
- Create feature branch
- Commit changes
- Push to branch
- Open Pull Request
If you find SNATCH useful, please:
- β Star the repository on GitHub
- π’ Share with friends
- β Buy me a coffee (button in app)
- π Report bugs to improve quality
Made with β€οΈ by Abdanio Parchezzi
Powered by Dear ImGui β’ Built with C++ β’ Designed for Windows
Special thanks to the ImGui team for making this possible!
Last Updated: January 8, 2026
Maintainer: Abdanio Parchezzi
License: MIT
File: snatch_standalone.exe
Size: ~112 MB
Abdanio Parchezzi
π§ Email: cheeksparchezzi@gmail.com
π· Instagram: @oktramdani
π» GitHub: @Abdanio
π Report Bug
π‘ Request Feature
π¬ Discussions
β Star on GitHub
SNATCH v1.2 β’ MIT License