{"id":31737222,"url":"https://github.com/lassiecoder/video-summarizer-app","last_synced_at":"2026-02-17T15:02:52.842Z","repository":{"id":303837736,"uuid":"1016846420","full_name":"lassiecoder/video-summarizer-app","owner":"lassiecoder","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-09T16:22:46.000Z","size":55,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-09T09:11:38.174Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lassiecoder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-09T16:03:32.000Z","updated_at":"2025-07-09T16:22:49.000Z","dependencies_parsed_at":"2025-07-13T00:01:53.500Z","dependency_job_id":null,"html_url":"https://github.com/lassiecoder/video-summarizer-app","commit_stats":null,"previous_names":["lassiecoder/video-summarizer-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lassiecoder/video-summarizer-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassiecoder%2Fvideo-summarizer-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassiecoder%2Fvideo-summarizer-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassiecoder%2Fvideo-summarizer-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassiecoder%2Fvideo-summarizer-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lassiecoder","download_url":"https://codeload.github.com/lassiecoder/video-summarizer-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassiecoder%2Fvideo-summarizer-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29548201,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-09T09:08:14.640Z","updated_at":"2026-02-17T15:02:52.827Z","avatar_url":"https://github.com/lassiecoder.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎥 Video Summarizer AI\n\nA powerful AI-powered video summarization tool that transforms any video into concise, intelligent summaries using Google's Gemini AI. Features both a beautiful web interface and command-line tool.\n\n![Video Summarizer Demo](https://img.shields.io/badge/Status-Live-green) ![Node.js](https://img.shields.io/badge/Node.js-18+-blue) ![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue) ![Deployed](https://img.shields.io/badge/Deployed-Cloud%20Run-blue)\n\n## 🌐 **Live Demo**\n\n**Your Video Summarizer AI is now live and ready to use!**\n\n- **🌐 Web Interface**: [https://video-summarizer-282723408863.us-central1.run.app](https://video-summarizer-282723408863.us-central1.run.app)\n- **🏥 Health Check**: `https://video-summarizer-282723408863.us-central1.run.app/health`\n\n### 🚀 **Try It Now**\n\n1. Visit the web interface above\n2. Enter any video URL\n3. Add a custom prompt (optional)\n4. Click \"Generate Summary\"\n5. Get your AI-powered summary instantly!\n\n## 📋 Table of Contents\n\n- [Live Demo](#-live-demo)\n- [Features](#-features)\n- [Project Structure](#-project-structure)\n- [File Descriptions](#-file-descriptions)\n- [Prerequisites](#-prerequisites)\n- [Installation](#-installation)\n- [Configuration](#-configuration)\n- [Usage](#-usage)\n- [Deployment](#-deployment)\n- [API Reference](#-api-reference)\n- [Development](#-development)\n- [Security](#-security)\n- [Troubleshooting](#-troubleshooting)\n- [Contributing](#-contributing)\n\n## ✨ Features\n\n### 🎨 **Web Interface**\n\n- **Modern UI**: Beautiful, responsive design with animations\n- **Real-time Processing**: Live feedback during video analysis\n- **Custom Prompts**: Flexible summarization instructions\n- **Example Templates**: Pre-built prompt suggestions\n- **Progress Tracking**: Visual progress indicators and timeouts\n- **Mobile Responsive**: Works perfectly on all devices\n\n### 🛠️ **Technical Features**\n\n- **AI-Powered**: Uses Google Gemini 2.0 Flash model\n- **Multiple Formats**: Supports various video formats and URLs\n- **Rate Limiting**: Prevents API abuse and controls costs\n- **Security**: API key protection and input validation\n- **Error Handling**: Comprehensive error management\n- **Performance**: Optimized for speed and reliability\n\n### 📱 **Command Line Interface**\n\n- **Quick Processing**: Fast video summarization from terminal\n- **Batch Support**: Process multiple videos efficiently\n- **Custom Prompts**: Flexible command-line arguments\n\n## 📁 Project Structure\n\n```\nvideo-summarizer-app/\n├── src/\n│   ├── index.ts          # CLI entry point\n│   └── server.ts         # Web server and API\n├── public/\n│   └── index.html        # Web interface\n├── package.json          # Dependencies and scripts\n├── README.md            # This file\n├── SECURITY.md          # Security guidelines\n└── node_modules/        # Dependencies (auto-generated)\n```\n\n## 📄 File Descriptions\n\n### 🖥️ **Core Application Files**\n\n#### `src/index.ts` - Command Line Interface\n\n**Purpose**: Entry point for CLI video summarization\n**Key Functions**:\n\n- Parses command-line arguments (video URL, custom prompt)\n- Initializes Gemini AI with API key\n- Processes video and outputs summary to console\n- Handles errors and validation\n\n**Usage**:\n\n```bash\nnpm run cli \u003cvideo_url\u003e [custom_prompt]\n```\n\n#### `src/server.ts` - Web Server \u0026 API\n\n**Purpose**: Express.js server providing web interface and API endpoints\n**Key Functions**:\n\n- Serves static web files\n- Provides `/api/summarize` endpoint for video processing\n- Implements rate limiting (10 requests/15min per IP)\n- Security headers and input validation\n- Timeout handling (5-minute limit)\n- API key management and masking\n\n**Endpoints**:\n\n- `GET /` - Serves web interface\n- `POST /api/summarize` - Processes video and returns summary\n\n#### `public/index.html` - Web User Interface\n\n**Purpose**: Complete web application with modern UI\n**Key Features**:\n\n- Responsive two-column layout\n- Form validation and error handling\n- Real-time loading states and animations\n- Example prompt templates\n- Progress tracking and timeout warnings\n- Mobile-optimized design\n\n**Sections**:\n\n- **Left Column**: Input form with URL, prompts, and controls\n- **Right Column**: Results display with loading states\n- **Animations**: Entrance effects, hover states, transitions\n\n### 📦 **Configuration Files**\n\n#### `package.json` - Project Configuration\n\n**Purpose**: Defines project metadata, dependencies, and scripts\n**Key Sections**:\n\n- **Dependencies**: Production packages (Express, Genkit, etc.)\n- **Dev Dependencies**: Development tools (TypeScript, TSX)\n- **Scripts**: npm commands for running the application\n- **Type**: ES modules configuration\n\n**Available Scripts**:\n\n```bash\nnpm start      # Start production server\nnpm run dev    # Start development server with hot reload\nnpm run cli    # Run command-line interface\nnpm run build  # Build TypeScript code\n```\n\n#### `SECURITY.md` - Security Guidelines\n\n**Purpose**: Comprehensive security documentation\n**Contents**:\n\n- API key usage and protection\n- Security best practices\n- Rate limiting configuration\n- Production deployment checklist\n- Key rotation procedures\n\n## 🔧 Prerequisites\n\n### Required Software\n\n- **Node.js** (v18 or higher)\n- **npm** (comes with Node.js)\n- **Git** (for cloning)\n\n### Required Accounts\n\n- **Google AI Studio Account**: For Gemini API access\n- **Google Cloud Project**: For API key management\n\n### System Requirements\n\n- **RAM**: Minimum 512MB, Recommended 1GB+\n- **Storage**: 100MB free space\n- **Network**: Stable internet connection for API calls\n\n## 🚀 Installation\n\n### Step 1: Clone the Repository\n\n```bash\ngit clone \u003crepository-url\u003e\ncd video-summarizer-app\n```\n\n### Step 2: Install Dependencies\n\n```bash\nnpm install\n```\n\n### Step 3: Get API Key\n\n1. Visit [Google AI Studio](https://makersuite.google.com/app/apikey)\n2. Sign in with your Google account\n3. Click \"Create API Key\"\n4. Copy the generated key\n\n### Step 4: Configure API Key\n\n#### Option A: Environment Variable (Recommended)\n\n```bash\nexport GEMINI_API_KEY=your_api_key_here\n```\n\n#### Option B: .env File\n\n```bash\necho \"GEMINI_API_KEY=your_api_key_here\" \u003e .env\n```\n\n#### Option C: Permanent Setup (macOS/Linux)\n\n```bash\necho 'export GEMINI_API_KEY=your_api_key_here' \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n```\n\n### Step 5: Verify Installation\n\n```bash\nnpm run cli https://example.com/video.mp4 \"Test prompt\"\n```\n\n## ⚙️ Configuration\n\n### Environment Variables\n\n| Variable         | Description           | Required | Default |\n| ---------------- | --------------------- | -------- | ------- |\n| `GEMINI_API_KEY` | Google Gemini API key | ✅ Yes   | None    |\n| `PORT`           | Server port           | ❌ No    | 3000    |\n\n### Rate Limiting\n\n- **Requests per IP**: 10 per 15 minutes\n- **Timeout**: 5 minutes per video\n- **Concurrent requests**: Limited by server capacity\n\n### Security Settings\n\n- **API Key Masking**: Only first 10 and last 4 characters shown in logs\n- **Security Headers**: XSS protection, content type options\n- **Input Validation**: URL validation and sanitization\n\n## 📖 Usage\n\n### 🌐 Web Interface (Recommended)\n\n#### Start the Server\n\n```bash\nnpm start\n```\n\n#### Access the Application\n\n1. Open your browser\n2. Navigate to `http://localhost:3000`\n3. Enter a video URL\n4. Add custom prompt (optional)\n5. Click \"Generate Summary\"\n\n#### Features\n\n- **Example Prompts**: Click to use pre-built templates\n- **Progress Tracking**: Real-time processing feedback\n- **Error Handling**: Clear error messages and suggestions\n- **Reset Function**: Clear form and start over\n\n### 💻 Command Line Interface\n\n#### Basic Usage\n\n```bash\nnpm run cli \u003cvideo_url\u003e\n```\n\n#### With Custom Prompt\n\n```bash\nnpm run cli \u003cvideo_url\u003e \"Summarize the key points in bullet points\"\n```\n\n#### Examples\n\n```bash\n# Basic summary\nnpm run cli https://www.youtube.com/watch?v=example\n\n# Detailed analysis\nnpm run cli https://example.com/video.mp4 \"What are the main takeaways?\"\n\n# Bullet points\nnpm run cli https://example.com/video.mp4 \"Summarize in bullet points\"\n```\n\n### 🎯 Example Prompts\n\n#### Quick Summaries\n\n- \"Summarize the key points of this video in bullet points\"\n- \"What are the main takeaways from this video?\"\n- \"Create a brief overview of this content\"\n\n#### Detailed Analysis\n\n- \"Create a detailed summary with timestamps\"\n- \"Explain the concepts discussed in this video in simple terms\"\n- \"What are the key insights and actionable items?\"\n\n## 🔌 API Reference\n\n### Endpoint: `POST /api/summarize`\n\n#### Request Body\n\n```json\n{\n  \"videoURL\": \"https://example.com/video.mp4\",\n  \"prompt\": \"Please summarize this video\"\n}\n```\n\n#### Response\n\n```json\n{\n  \"summary\": \"This video discusses...\"\n}\n```\n\n#### Error Response\n\n```json\n{\n  \"error\": \"Error message\",\n  \"details\": \"Additional details\"\n}\n```\n\n#### Status Codes\n\n- `200`: Success\n- `400`: Bad request (missing URL)\n- `408`: Timeout\n- `429`: Rate limit exceeded\n- `500`: Server error\n\n## 🛠️ Development\n\n### Development Server\n\n```bash\nnpm run dev\n```\n\n- Hot reload enabled\n- Automatic TypeScript compilation\n- Real-time error reporting\n\n### Building for Production\n\n```bash\nnpm run build\n```\n\n### Code Structure\n\n- **TypeScript**: Full type safety\n- **ES Modules**: Modern JavaScript modules\n- **Express.js**: Web server framework\n- **Genkit**: Google AI integration\n\n### Adding Features\n\n1. **Frontend**: Modify `public/index.html`\n2. **Backend**: Update `src/server.ts`\n3. **CLI**: Edit `src/index.ts`\n4. **Dependencies**: Update `package.json`\n\n## 🔒 Security\n\n### API Key Protection\n\n- ✅ Environment variable storage\n- ✅ Masked logging (first 10, last 4 characters)\n- ✅ No client-side exposure\n- ✅ Rate limiting protection\n\n### Input Validation\n\n- ✅ URL format validation\n- ✅ Content type checking\n- ✅ Size limits and timeouts\n- ✅ XSS protection\n\n### Best Practices\n\n- ✅ Regular key rotation\n- ✅ Usage monitoring\n- ✅ Error logging\n- ✅ Security headers\n\n## 🤝 Contributing\n\n### Development Setup\n\n1. Fork the repository\n2. Create feature branch: `git checkout -b feature-name`\n3. Make changes and test\n4. Commit: `git commit -m 'Add feature'`\n5. Push: `git push origin feature-name`\n6. Submit pull request\n\n### Code Standards\n\n- **TypeScript**: Use strict mode\n- **ESLint**: Follow linting rules\n- **Prettier**: Consistent formatting\n- **Tests**: Add tests for new features\n\n### Pull Request Guidelines\n\n- Clear description of changes\n- Include screenshots for UI changes\n- Test on multiple browsers/devices\n- Update documentation if needed\n\n### Useful Links\n\n- [Google AI Studio](https://makersuite.google.com/app/apikey)\n- [Genkit Documentation](https://genkit.dev/)\n- [Express.js Guide](https://expressjs.com/)\n- [TypeScript Handbook](https://www.typescriptlang.org/docs/)\n\n---\n\n**Made with ❤️ using Google Gemini AI \u0026 Genkit**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flassiecoder%2Fvideo-summarizer-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flassiecoder%2Fvideo-summarizer-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flassiecoder%2Fvideo-summarizer-app/lists"}