About • Features • Screenshots • How It Works • Prerequisites & Setup • Building from Source • Known Quota Limits
Emissa (from emissary — carrying your videos off for you) is a lightweight desktop utility engineered for batch uploading video files directly to your own YouTube channel. Built on Tauri 2, Rust, and React 19, it replaces cumbersome browser tabs with a reliable, standalone desktop client.
Instead of buffering large videos into system memory, Emissa streams files directly from disk in 8 MiB chunks using YouTube's resumable upload protocol. Designed specifically for video editors, animators, and game developers working with large render queues, uploads automatically pause, resume, handle network interruptions with backoff, and persist state safely across app restarts.
- Chunked Resumable Uploads: Streams videos from disk in 8 MiB slices via YouTube Data API v3. Upload sessions persist locally so jobs survive network drops, computer sleep, or app restarts.
- Batch Queue Management: Drag and drop batches of video files into the sidebar. Track upload status, speed (MB/s), and real-time progress bars per job, or initiate an automated "Upload all" queue run.
- Comprehensive Metadata Editor: Edit titles, descriptions, comma-separated tags, category selection, publishing privacy (
Private,Unlisted,Public),Made for Kidscompliance flags, and synthetic/AI-altered media disclosures. - Thumbnail & Caption Processing: Attach custom thumbnail files (
JPG/PNGunder 2 MB) and attach localized subtitle tracks (.srt,.vtt,.sbv) directly within the upload pipeline. - Zero-Cloud Local Credential Security: Communicates directly between your computer and Google through your own Google Cloud OAuth desktop credentials. Refresh tokens are secured in the Windows Credential Manager (
keyring), and configuration files stay local in%APPDATA%\com.yutub.app. - Reusable Default Templates: Configure default description footers, tags, and category presets in Options so newly queued items are pre-populated instantly.
Dashboard: Batch queue management with active 8 MiB chunk streaming, live upload speeds, and complete YouTube metadata editing.
Preferences: Global presets for channel defaults, automated tagging, description templates, and system tray integration.
First-Run Setup: Step-by-step guidance for connecting your personal Google Cloud desktop client without third-party servers.
Emissa executes a native background upload pipeline managed entirely in Rust (tokio async tasks) while keeping the frontend reactive and responsive.
sequenceDiagram
autonumber
participant UI as React 19 UI
participant Core as Rust Background Worker
participant Disk as Local Storage
participant Google as YouTube Data API v3
UI->>Core: Start upload job (Metadata + Video path)
Core->>Disk: Read file metadata & check session cache
Core->>Google: Initialize resumable session (POST /upload/youtube/v3/videos)
Google-->>Core: Return resumable Session URI
loop In 8 MiB Chunks
Core->>Disk: Stream next 8 MiB buffer
Core->>Google: Upload chunk (PUT bytes offset)
Google-->>Core: Acknowledge byte offset
Core-->>UI: Emit queue://progress (Speed, % & ETA)
end
opt Thumbnail Attached
Core->>Google: Set custom thumbnail (POST /thumbnails/set)
end
opt Subtitles Attached
Core->>Google: Upload subtitle tracks (POST /captions)
end
Core-->>UI: Emit queue://finished (Video ID assigned)
- Session Handshake: The worker sends video metadata to YouTube's resumable endpoint to obtain an upload session URI, which is saved to
queue.json. - Streaming Execution: Files are read from disk in 8 MiB segments, sending accurate byte range headers. If a connection drops, the worker queries the server for the last verified byte and resumes without restarting from byte zero.
- Post-Upload Attachment: Once the binary upload is finalized, custom thumbnails and subtitle tracks are dispatched before marking the job complete.
Emissa connects to YouTube through your own personal Google Cloud project. This ensures your data stays private and your daily API quota belongs entirely to your channel.
- Open Google Cloud Console.
- Search for YouTube Data API v3 and click Enable.
- Navigate to Google Auth Platform → Get started, and select External audience.
- Under Audience → Test users, add the Google account that manages your YouTube channel.
- Go to Clients → Create client, select Desktop app, and download the OAuth client JSON file.
- Launch Emissa.
- Click Choose client JSON... on the setup screen and select the downloaded file.
- Authenticate in the browser window that opens. Emissa captures the OAuth callback locally via PKCE loopback and stores the refresh token in your native OS credential vault.
Note
Client configurations and queue states are stored locally at %APPDATA%\com.yutub.app\ and are never transmitted externally.
- Drag & Drop: Drag video files (
.mp4,.mkv,.mov,.webm,.avi) directly into the app window. - Add Files Dialog: Click Add videos in the queue header to select files through the system file picker.
- Select any job in the left sidebar to view its details.
- Fill in title, description, and tags (type a tag and press Enter or ,).
- Pick your desired visibility:
Private: Visible only to you.Unlisted: Anyone with the link can view.Public: Publicly published to channel subscribers and search.
- Add an optional custom thumbnail or caption tracks (
.srt,.vtt,.sbv).
- Click Upload all to start queued draft videos sequentially.
- Use Pause or Resume on individual jobs at any time.
- Once finished, click the generated
youtu.be/<id>link or the Studio button to review the video in YouTube Studio.
| Tool | Version Requirement |
|---|---|
| Node.js | v20.x or later (tested on v26.x) |
| npm | v10.x or later |
| Rust | 1.85.0+ (2024 edition compatible) |
| WebView2 | Included on Windows 10/11 |
Clone the repository and install dependencies:
git clone https://github.com/projectGloria/Emissa.git
cd Emissa
npm installStart the application in development mode with hot reload:
npm run tauri devRun Rust backend tests:
cd src-tauri
cargo testBuild optimized release installers (.exe NSIS installer and .msi bundle):
npm run tauri buildInstallers are generated inside src-tauri/target/release/bundle/.
Emissa uses the official YouTube Data API v3 and operates within Google's standard developer quotas:
- Video Uploads Quota: Video uploads deduct from YouTube's dedicated "Video Uploads" quota pool (1 unit per video, capped at 100 uploads per day per API project).
- Subtitles Quota: Uploading caption/subtitle tracks costs 400 quota units each from your project's default 10,000 units/day quota allowance.
- Custom Thumbnails: Costs 50 quota units. Requires a phone-verified YouTube channel (
youtube.com/verify). - Unverified Projects: Personal Google Cloud projects that have not completed Google's OAuth verification process will force uploaded videos to Private visibility until Google compliance review.
- Studio-Exclusive Options: As of late 2026, YouTube Data API does not provide write endpoints for paid promotion disclosures, automatic chapters, featured places, automatic concepts, or Shorts remix permissions. These settings must be adjusted directly in YouTube Studio.
Contributions, bug reports, and suggestions are welcome!
- Fork the repository.
- Create a feature branch:
git checkout -b feature/amazing-feature. - Commit your changes:
git commit -m "Add amazing feature". - Push to your branch:
git push origin feature/amazing-feature. - Open a Pull Request.
Please check todo.md for known issues and ongoing roadmap items.
Created by Nihil for projectGloria.
This project is not affiliated with, authorized, or endorsed by YouTube or Google LLC.