{"id":49200940,"url":"https://github.com/dend/framedrop","last_synced_at":"2026-04-23T14:03:11.299Z","repository":{"id":338729572,"uuid":"1158087251","full_name":"dend/framedrop","owner":"dend","description":"🎥 Library and tooling to manage Xbox screenshots and video recordings","archived":false,"fork":false,"pushed_at":"2026-02-16T05:47:41.000Z","size":2889,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-16T11:41:28.145Z","etag":null,"topics":["api","cli","reverse-engineering","screenshot","video","xbox","xbox-live"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T19:21:28.000Z","updated_at":"2026-02-16T05:47:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dend/framedrop","commit_stats":null,"previous_names":["dend/framedrop"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dend/framedrop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dend%2Fframedrop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dend%2Fframedrop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dend%2Fframedrop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dend%2Fframedrop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dend","download_url":"https://codeload.github.com/dend/framedrop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dend%2Fframedrop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31974995,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["api","cli","reverse-engineering","screenshot","video","xbox","xbox-live"],"created_at":"2026-04-23T14:03:10.546Z","updated_at":"2026-04-23T14:03:11.293Z","avatar_url":"https://github.com/dend.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FrameDrop\n\nA cross-platform library and tool written on top of .NET for downloading Xbox screenshots and video recordings.\n\n![FrameDrop CLI in action](media/framedrop.gif)\n\n\u003e [!WARNING]\n\u003e **This library and tool is provided for educational and personal use purposes only.** It comes with no guarantees, implied or otherwise.\n\u003e\n\u003e By using this library, you acknowledge and agree to the following:\n\u003e\n\u003e - You interact with Xbox Live APIs **at your own risk**\n\u003e - Microsoft and Xbox may ban, suspend, or restrict accounts that use unofficial or unsanctioned APIs and projects (such as this library)\n\u003e - I bear **no responsibility** for any account bans, restrictions, suspensions, or other consequences that may result from using this library\n\u003e - You accept **full responsibility** for how you choose to use this library and any actions taken with it\n\n## Install\n\n```bash\ndotnet tool install -g Den.Dev.FrameDrop.CLI\n```\n\nOnce installed, the `framedrop` command is available globally.\n\n## Authentication note\n\nFrameDrop uses the Entra ID client application ID for the **Xbox App for Windows** (`000000004424da1f`). The `mediahub` APIs that serve screenshots and game clips require permissions that are not granted to third-party registered applications, so we reuse the first-party Xbox App identity.\n\nWhen you sign in, the browser will redirect to `https://login.live.com/oauth20_desktop.srf?code=\u003cCODE\u003e\u0026...`. Because this is a desktop redirect URI, the page will likely show an error or go blank — that's expected. To grab the authorization code:\n\n1. Open your browser's developer tools (**F12**) before signing in.\n2. Switch to the **Network** tab.\n3. After signing in, look for the request to `oauth20_desktop.srf`.\n4. Copy the `code` query parameter from that URL and paste it back into FrameDrop.\n\n## Prerequisites\n\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) or later\n\n## Build\n\n```bash\ncd src/dotnet/Den.Dev.FrameDrop\ndotnet build\n```\n\n## Usage\n\nRun from the build output directory:\n\n```bash\ncd src/dotnet/Den.Dev.FrameDrop/Den.Dev.FrameDrop.CLI/bin/Debug/net10.0\n./framedrop \u003ccommand\u003e\n```\n\nOr with `dotnet run`:\n\n```bash\ncd src/dotnet/Den.Dev.FrameDrop\ndotnet run --project Den.Dev.FrameDrop.CLI -- \u003ccommand\u003e\n```\n\n## Commands\n\n### `framedrop auth login`\n\nStarts the SISU authentication flow to connect your Xbox Live account.\n\n1. FrameDrop attempts to restore a previous session from cached tokens.\n2. If no valid session exists, it generates an authentication URL.\n3. Open the URL in your browser and sign in with your Microsoft account.\n4. After signing in, you'll be redirected to a URL containing a `code` parameter. Copy that code.\n5. Paste the code back into the CLI to complete authentication.\n\n```bash\nframedrop auth login\n```\n\nUse `--verbose` to see HTTP request/response details during login:\n\n```bash\nframedrop auth login --verbose\n```\n\n### `framedrop auth status`\n\nDisplays your current authentication state, including gamertag, XUID, and token expiration.\n\n```bash\nframedrop auth status\n```\n\n### `framedrop auth logout`\n\nClears all stored authentication tokens.\n\n```bash\nframedrop auth logout\n```\n\n### `framedrop list`\n\nLists all Xbox captures (screenshots and videos) in your cloud storage. Fetches all pages from both the screenshots and game clips APIs, then displays them in a table sorted by upload date (newest first).\n\n```bash\nframedrop list\n```\n\nThe table shows:\n\n| Column | Description |\n|---|---|\n| **Type** | `Screenshot` or `Video` |\n| **Title** | Game the capture was taken in |\n| **Uploaded** | Upload date |\n| **Expires** | Expiration date, color-coded by urgency |\n| **Time Left** | Countdown to expiration: green (\u003e7d), yellow (1-7d), red (\u003c1d), or `EXPIRED` |\n| **Size** | File size |\n\nUse `--verbose` to dump the raw JSON responses from the Xbox Live API (useful for debugging field names and response structure):\n\n```bash\nframedrop list --verbose\n```\n\n### `framedrop download`\n\nDownloads captures from Xbox cloud storage to your local machine.\n\n```bash\nframedrop download [options]\n```\n\n**Options:**\n\n| Option | Default | Description |\n|---|---|---|\n| `--type` | `all` | Type of captures: `screenshots`, `videos`, or `all` |\n| `--output` | `./captures` | Output directory for downloaded files |\n| `--count` | `-1` | Maximum number of captures to download (`-1` for all) |\n| `--parallel` | `3` | Maximum number of concurrent downloads |\n\n**Behavior:**\n\n- Fetches all available captures across all pages (using continuation tokens for pagination).\n- Pre-scans the output directory before downloading. Files that already exist on disk with the correct file size are skipped automatically — re-running the command is safe and only downloads new or incomplete captures.\n- Shows a live progress display with per-file progress bars (title, progress, percentage, downloaded bytes, transfer speed) for active downloads. Completed files disappear from the display.\n- An overall status line tracks total progress: count completed, bytes downloaded vs total, and any failures.\n- Prints a final summary with downloaded count/size, already-on-disk count, and failure count.\n\n**Examples:**\n\nDownload all captures:\n\n```bash\nframedrop download\n```\n\nDownload only videos to a specific directory with 5 concurrent downloads:\n\n```bash\nframedrop download --type videos --output ~/xbox-clips --parallel 5\n```\n\nDownload only screenshots:\n\n```bash\nframedrop download --type screenshots\n```\n\n## Token Storage\n\nAuthentication tokens are encrypted at rest and stored locally:\n\n- **Windows:** `%LOCALAPPDATA%\\Den.Dev\\FrameDrop\\tokens.bin`\n- **Linux:** `~/.local/share/Den.Dev/FrameDrop/tokens.bin`\n\nTokens are encrypted using AES-256-GCM with a PBKDF2-SHA256 derived key (600,000 iterations). The key is bound to the current machine and user (`MachineName + UserName`). If the token file is corrupted or cannot be decrypted, it is automatically deleted and you will need to re-authenticate.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdend%2Fframedrop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdend%2Fframedrop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdend%2Fframedrop/lists"}