Mirror from https://github.com/jopa79/GrabZilla21. No changes made or change in license implied.
|
|
3 месяцев назад | |
|---|---|---|
| .github | 3 месяцев назад | |
| .kiro | 3 месяцев назад | |
| assets | 3 месяцев назад | |
| binaries | 3 месяцев назад | |
| scripts | 3 месяцев назад | |
| src | 3 месяцев назад | |
| styles | 3 месяцев назад | |
| tests | 3 месяцев назад | |
| types | 3 месяцев назад | |
| .gitignore | 3 месяцев назад | |
| ALL_COMMITS_COMPLETE.md | 3 месяцев назад | |
| CLAUDE.md | 3 месяцев назад | |
| COMMIT_SUMMARY.md | 3 месяцев назад | |
| Claude's Plan - Phase 4 Part 2.md | 3 месяцев назад | |
| Claude's Plan - Phase 4.md | 3 месяцев назад | |
| FEATURES.md | 3 месяцев назад | |
| HANDOFF_NOTES.md | 3 месяцев назад | |
| HANDOFF_PACKAGE_MANIFEST.md | 3 месяцев назад | |
| HANDOFF_PACKAGE_README.md | 3 месяцев назад | |
| METADATA_OPTIMIZATION_COMPLETE.md | 3 месяцев назад | |
| METADATA_OPTIMIZATION_SUMMARY.md | 3 месяцев назад | |
| P1_TO_P4_COMPLETION_SUMMARY.md | 3 месяцев назад | |
| PHASE_4_PART_2_COMPLETE.md | 3 месяцев назад | |
| PHASE_4_PART_3_COMPLETE.md | 3 месяцев назад | |
| PHASE_4_PART_3_PLAN.md | 3 месяцев назад | |
| README.md | 3 месяцев назад | |
| SESSION_CONTINUATION.md | 3 месяцев назад | |
| SESSION_JAN7_SETTINGS_AND_COOKIE_FIX.md | 3 месяцев назад | |
| SESSION_OCT5_METADATA_UX_FIX.md | 3 месяцев назад | |
| SUBAGENT_DEMO_SUMMARY.md | 3 месяцев назад | |
| TODO.md | 3 месяцев назад | |
| UNIVERSAL_HANDOFF.md | 3 месяцев назад | |
| VERIFICATION_COMPLETE.md | 3 месяцев назад | |
| index.html | 3 месяцев назад | |
| package-lock.json | 3 месяцев назад | |
| package.json | 3 месяцев назад | |
| performance-report.json | 3 месяцев назад | |
| performance-report.md | 3 месяцев назад | |
| project-state.json | 3 месяцев назад | |
| run-tests.js | 3 месяцев назад | |
| setup.js | 3 месяцев назад | |
| test-batch-large.js | 3 месяцев назад | |
| test-batch-metadata.js | 3 месяцев назад | |
| test-metadata-optimization.js | 3 месяцев назад | |
| verify-project-state.js | 3 месяцев назад | |
| vitest.config.js | 3 месяцев назад |
Production-ready Electron-based YouTube/Vimeo downloader with professional video management interface.
A fully functional standalone desktop application for downloading YouTube and Vimeo videos with a professional dark-themed interface. Built with Electron, featuring smart URL parsing, cookie file support, local binary management, and comprehensive testing for reliable video downloading and conversion.
Status: ✅ Production Ready - All core functionality implemented, tested, and documented
# Install dependencies
npm install
# Setup binaries (downloads yt-dlp and ffmpeg)
npm run setup
# Run in development mode
npm run dev
# Build for production
npm run build
Run the setup script to automatically download required binaries:
npm run setup
If automatic setup fails, manually place these binaries in ./binaries/:
Platform-specific filenames:
yt-dlp, ffmpegyt-dlp.exe, ffmpeg.exeMake executable on macOS/Linux:
chmod +x binaries/yt-dlp binaries/ffmpeg
# Development mode (with DevTools)
npm run dev
# Production mode
npm start
# Run tests
npm test
npm run test:ui # Test with UI
npm run test:run # Run tests once
# Build for specific platforms
npm run build:mac # macOS
npm run build:win # Windows
npm run build:linux # Linux
App
├── Header (branding, window controls)
├── InputSection (URL input, config controls)
├── VideoList (queue management, status display)
└── ControlPanel (bulk actions, download controls)
src/main.js): System integration, IPC handlers, binary executionsrc/preload.js): Secure bridge with contextBridge APIscripts/app.js): UI logic, state management, user interactionsindex.html + styles/main.css): Complete UI with video queue management// Required state structure
const app = {
videos: [], // Video queue array
config: { // User preferences
quality: '720p',
format: 'mp4',
savePath: '',
cookieFile: null
},
ui: { // UI state
isDownloading: false,
selectedVideos: []
}
};
The application is now fully functional with:
Status: ✅ Production-ready with all core functionality implemented, tested, and actively maintained.
/
├── src/ # Electron main process
│ ├── main.js # Main process with IPC handlers and binary integration
│ └── preload.js # Secure contextBridge API for renderer communication
├── scripts/ # Application logic and utilities
│ ├── app.js # Main application class and UI management
│ ├── components/ # UI component modules
│ ├── constants/ # Application constants and configuration
│ │ └── config.js # App-wide configuration values
│ ├── core/ # Core application modules
│ │ └── event-bus.js # Event system for component communication
│ ├── models/ # Data models and factories
│ │ ├── AppState.js # Application state management
│ │ ├── Video.js # Video object model
│ │ └── video-factory.js # Video creation and validation
│ ├── services/ # External service integrations
│ │ └── metadata-service.js # Video metadata fetching with caching
│ └── utils/ # Utility modules
│ ├── accessibility-manager.js # Accessibility and keyboard navigation
│ ├── app-ipc-methods.js # IPC method definitions
│ ├── config.js # Configuration management
│ ├── desktop-notifications.js # System notification integration
│ ├── download-integration-patch.js # Download functionality patches
│ ├── enhanced-download-methods.js # Advanced download features
│ ├── error-handler.js # Error handling and recovery
│ ├── event-emitter.js # Event system utilities
│ ├── ffmpeg-converter.js # Video format conversion
│ ├── ipc-integration.js # IPC communication utilities
│ ├── ipc-methods-patch.js # IPC method patches
│ ├── keyboard-navigation.js # Keyboard navigation system
│ ├── live-region-manager.js # Accessibility live regions
│ ├── performance.js # Performance monitoring
│ ├── state-manager.js # State persistence and management
│ └── url-validator.js # URL validation and parsing
├── binaries/ # Local executables (auto-downloaded)
│ ├── yt-dlp # YouTube downloader (macOS/Linux)
│ ├── yt-dlp.exe # YouTube downloader (Windows)
│ ├── ffmpeg # Video converter (macOS/Linux)
│ ├── ffmpeg.exe # Video converter (Windows)
│ └── README.md # Binary setup instructions
├── assets/icons/ # SVG icons and app assets
│ ├── logo.svg # App logo
│ ├── add.svg # Add button icon
│ ├── folder.svg # Folder selection icon
│ ├── download.svg # Download icon
│ ├── refresh.svg # Refresh icon
│ ├── trash.svg # Delete icon
│ └── [other icons] # Additional UI element icons
├── styles/ # Styling and design system
│ ├── main.css # Main stylesheet with design system
│ └── components/ # Component-specific styles
│ └── header.css # Header component styles
├── tests/ # Comprehensive test suite
│ ├── accessibility.test.js # Accessibility and keyboard navigation tests
│ ├── binary-integration.test.js # yt-dlp and ffmpeg integration tests
│ ├── cross-platform.test.js # Cross-platform compatibility tests
│ ├── desktop-notifications.test.js # Desktop notification tests
│ ├── e2e-playwright.test.js # End-to-end Playwright tests
│ ├── error-handling.test.js # Error handling and recovery tests
│ ├── ffmpeg-conversion.test.js # Video conversion tests
│ ├── integration-workflow.test.js # Complete workflow integration tests
│ ├── ipc-integration.test.js # IPC communication tests
│ ├── setup.js # Test setup and configuration
│ ├── state-management.test.js # State management tests
│ ├── status-components.test.js # UI component tests
│ ├── url-validation-simple.test.js # Basic URL validation tests
│ ├── url-validation.test.js # Advanced URL validation tests
│ └── video-model.test.js # Video object model tests
├── types/ # TypeScript definitions
│ └── electron.d.ts # Electron type definitions
├── dist/ # Build output directory
├── index.html # Application entry point
├── setup.js # Binary download and setup script
├── run-tests.js # Test runner script
├── vitest.config.js # Vitest configuration
├── package.json # Dependencies and build configuration
└── README.md # Project documentation
The application follows a streamlined design system based on Apple's Human Interface Guidelines:
All colors use CSS custom properties - never hardcoded values:
/* Primary Colors */
--primary-blue: #155dfc;
--success-green: #00a63e;
--error-red: #e7000b;
/* Backgrounds */
--bg-dark: #1d293d;
--header-dark: #0f172b;
--card-bg: #314158;
--border-color: #45556c;
/* Text */
--text-primary: #ffffff;
--text-secondary: #cad5e2;
--text-muted: #90a1b9;
--text-disabled: #62748e;
youtube.com/watch?v=, youtu.be/, youtube.com/playlist?list=vimeo.com/[id], player.vimeo.com/video/[id]./binaries/yt-dlp and ./binaries/ffmpeg (never system binaries).exe suffix on Windows with proper error handling// Standard binary execution with platform detection
const getBinaryPath = (name) => {
const ext = process.platform === 'win32' ? '.exe' : '';
return `./binaries/${name}${ext}`;
};
const { spawn } = require('child_process');
const ytdlp = spawn(getBinaryPath('yt-dlp'), args, {
stdio: ['pipe', 'pipe', 'pipe']
});
// ❌ Never use system PATH binaries
// spawn('yt-dlp', args)
// ✅ Always use bundled binaries with proper platform detection
// spawn(getBinaryPath('yt-dlp'), args)
Note: UI structure is complete with sample data. Dynamic functionality will be implemented in upcoming tasks starting with Task 5.
The application uses a sophisticated metadata service layer:
# Run all tests
npm test
# Run tests with UI
npm run test:ui
# Run tests once
npm run test:run
# Run specific test suites
npm run test:unit # Unit tests
npm run test:validation # URL validation tests
npm run test:components # Component tests
npm run test:system # System integration tests
npm run test:accessibility # Accessibility tests
npm run test:integration # Integration tests (requires binaries)
npm run test:e2e # End-to-end tests (requires Playwright)
The application includes a complete testing suite with 15+ test files covering:
video-model.test.js): Video object structure and validationstate-management.test.js): Application state handlingurl-validation.test.js, url-validation-simple.test.js): URL parsing and validationstatus-components.test.js): UI component functionalitybinary-integration.test.js): yt-dlp and ffmpeg integrationipc-integration.test.js): Main/renderer process communicationffmpeg-conversion.test.js): Video format conversiondesktop-notifications.test.js): System notificationserror-handling.test.js): Error management and recoverycross-platform.test.js): macOS, Windows, Linux compatibilityaccessibility.test.js): WCAG compliance and keyboard navigationintegration-workflow.test.js): Complete download workflowse2e-playwright.test.js): Complete user workflows with real Electron appThe app can be built for all major platforms using electron-builder:
# Build for current platform
npm run build
# Build for specific platforms
npm run build:mac # macOS DMG
npm run build:win # Windows NSIS installer
npm run build:linux # Linux AppImage
Build Configuration:
dist/com.grabzilla.appassets/icons/logo.png./binaries/yt-dlp and ./binaries/ffmpeg.exe suffix on WindowsMIT License - See LICENSE file for details