{"id":51329488,"url":"https://github.com/poli0981/captureimg","last_synced_at":"2026-07-01T21:32:40.047Z","repository":{"id":351602557,"uuid":"1211416095","full_name":"poli0981/captureimg","owner":"poli0981","description":"Tools use for capture image","archived":false,"fork":false,"pushed_at":"2026-06-21T15:06:32.000Z","size":1121,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T17:06:13.510Z","etag":null,"topics":["capture","captureimage","csharp","gamingtools","net9","offline-app","software","tools","winui","winui3"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/poli0981.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["poli0981"],"ko_fi":"skullmute","buy_me_a_coffee":"skullmute","patreon":"skullmute"}},"created_at":"2026-04-15T11:22:14.000Z","updated_at":"2026-06-21T15:06:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/poli0981/captureimg","commit_stats":null,"previous_names":["poli0981/captureimg"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/poli0981/captureimg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poli0981%2Fcaptureimg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poli0981%2Fcaptureimg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poli0981%2Fcaptureimg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poli0981%2Fcaptureimg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/poli0981","download_url":"https://codeload.github.com/poli0981/captureimg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/poli0981%2Fcaptureimg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35024359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-01T02:00:05.325Z","response_time":130,"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":["capture","captureimage","csharp","gamingtools","net9","offline-app","software","tools","winui","winui3"],"created_at":"2026-07-01T21:32:38.140Z","updated_at":"2026-07-01T21:32:40.040Z","avatar_url":"https://github.com/poli0981.png","language":"C#","funding_links":["https://github.com/sponsors/poli0981","https://ko-fi.com/skullmute","https://buymeacoffee.com/skullmute","https://patreon.com/skullmute"],"categories":[],"sub_categories":[],"readme":"# CaptureImage\n\n[![CI](https://github.com/poli0981/captureimg/actions/workflows/ci.yml/badge.svg)](https://github.com/poli0981/captureimg/actions/workflows/ci.yml)\n[![Latest release](https://img.shields.io/github/v/release/poli0981/captureimg?include_prereleases\u0026sort=semver)](https://github.com/poli0981/captureimg/releases)\n[![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0--or--later-blue.svg)](LICENSE)\n[![.NET 9](https://img.shields.io/badge/.NET-9.0-512BD4.svg)](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)\n\nA lightweight Windows screen-capture tool for games that don't ship a\nbuilt-in screenshot feature. Tray-resident, hotkey-driven, fast, and\ngentle on resources.\n\n\u003e **One-line pitch:** pick a target window from a list, press\n\u003e `Ctrl+Shift+F12`, and your PNG lands in `Pictures\\CaptureImage\\`. That's it.\n\n## Why\n\nMany games — especially older ones, smaller indie titles, emulators,\nand anything outside Steam — don't bundle a screenshot key. The Windows\nbuilt-in options (Snipping Tool, Xbox Game Bar, `Print Screen`) either\ndon't work on fullscreen DirectX surfaces or require interrupting your\nsession. The heavy alternatives (OBS, ShareX) are overkill when all you\nwant is _one frame of a specific window, now, into a file_.\n\nCaptureImage fills that gap. It uses the same `Windows.Graphics.Capture`\nAPI that OBS Studio uses for its Game Capture source, ships as a small\ntray app, and stays out of your way until you press the hotkey.\n\n## Features\n\n- **Windows.Graphics.Capture** engine — hardware-accelerated, works with\n  DX11/DX12/Vulkan windowed and borderless titles, same API OBS uses.\n- **PrintWindow fallback** for legacy windowed apps that WGC refuses.\n- **Live Dashboard** — every visible top-level window with an icon and\n  title, refreshed in real time via WMI process events.\n- **Steam warning badge** — if a capture target lives under a Steam\n  library, a small badge reminds you that F12 screenshots are available\n  via the Steam Overlay, and that some anti-cheat titles may block\n  external capture.\n- **Arm + global hotkey** — default `Ctrl+Shift+F12`, rebind in Settings\n  (full hotkey editor is M6+).\n- **Preview gate** — optional; show each capture, click Save or Discard.\n- **4 output formats** — PNG, JPEG, WebP, TIFF, with per-format quality.\n- **Local, private by default** — no telemetry, no cloud, no account.\n  Update check is the only network call, and only when you click the\n  button. See [`docs/legal/PRIVACY.md`](docs/legal/PRIVACY.md).\n- **Tray icon + minimize-to-tray**, runtime-generated so no binary\n  asset to ship yet.\n- **Toasts, preview dialog, real-time log drawer** in the UI.\n- **Localized** — English, Vietnamese, Arabic (with live RTL mirroring).\n  Translations are machine-assisted — see\n  [`docs/legal/DISCLAIMER.md §4`](docs/legal/DISCLAIMER.md).\n- **Velopack auto-update** from GitHub Releases. Security policy below.\n\n## Screenshots\n\nCaptured with CaptureImage itself — yes, we eat our own dog food.\n\n| Dashboard | Settings | About |\n|:-:|:-:|:-:|\n| ![Dashboard — target list with Steam badge](docs/screenshots/dashboard.png) | ![Settings — hotkey recorder + format + language](docs/screenshots/settings.png) | ![About — version, licenses, legal docs](docs/screenshots/about.png) |\n\n| Update | Log viewer | RTL (Arabic) |\n|:-:|:-:|:-:|\n| ![Update — Velopack check / download / install with live log](docs/screenshots/update.png) | ![Log viewer — live Serilog ring buffer](docs/screenshots/logviewer.png) | ![RTL — dashboard mirrored for Arabic culture](docs/screenshots/rtl-dashboard.png) |\n\n## Requirements\n\n- **Windows 11 22H2 or later** (build 10.0.22621+). Required by the\n  `Windows.Graphics.Capture` API. Older Windows 10 builds will not run.\n- For the Steam badge to appear: Steam installed with at least one\n  library. Otherwise the badge is simply absent.\n\n## Install\n\nDownload `Setup.exe` from the\n[latest GitHub Release](https://github.com/poli0981/captureimg/releases).\nVelopack installs the app into `%LocalAppData%\\CaptureImage\\` — no admin\nprompt, no registry spam, no background service.\n\n### Unsigned installer — SmartScreen warning\n\n**Heads-up:** CaptureImage is not yet code-signed (see\n[`docs/legal/DISCLAIMER.md §7`](docs/legal/DISCLAIMER.md)). On first run\nWindows SmartScreen will show:\n\n\u003e Windows protected your PC · Unknown publisher · Don't run\n\nTo proceed, click **More info** → **Run anyway**. If you want to verify\nthe download is unmodified, the release page includes `SHA256SUMS.txt`:\n\n```powershell\nGet-FileHash -Algorithm SHA256 .\\Setup.exe\n# Compare the output with the entry in SHA256SUMS.txt on the release page.\n```\n\n## Usage\n\n1. Launch CaptureImage — a 960×600 window opens.\n2. The **Dashboard** shows every visible top-level window on your desktop\n   with its icon, title, and — for Steam games — a warning badge.\n3. Click the target you want to capture.\n4. Click **Arm**. The global hotkey listener starts.\n5. Alt-Tab to the target, press **`Ctrl+Shift+F12`**.\n6. If preview is enabled (Settings → Preview before save), a dialog\n   shows the captured frame. Click Save or Discard.\n7. The PNG (or JPEG/WebP/TIFF, your choice) lands in\n   `%USERPROFILE%\\Pictures\\CaptureImage\\` with a time-stamped filename.\n8. A toast appears bottom-right confirming the save.\n\nClose-to-tray is on by default — click the X, the window hides, the\ntray icon stays. Quit via the tray menu's Exit item.\n\n## Build from source\n\n```bash\ngit clone https://github.com/poli0981/captureimg.git\ncd captureimg\ndotnet restore\ndotnet build CaptureImage.sln -c Release\ndotnet test CaptureImage.sln -c Release\ndotnet run --project src/CaptureImage.App -c Release\n```\n\nThe build needs:\n\n- **.NET 9 SDK** — the repo's `global.json` pins the exact version.\n- **Windows 10.0.22621 SDK** (or newer) for the WinRT projections the\n  capture engine uses. Install via the Visual Studio Installer\n  (\"Windows 11 SDK (10.0.22621.x)\") or directly from\n  \u003chttps://developer.microsoft.com/en-us/windows/downloads/windows-sdk/\u003e.\n\n## Repository layout\n\n```\nsrc/\n  CaptureImage.Core            Pure domain (models, abstractions, state machine,\n                               pipeline). Portable net9.0, no Windows ties.\n  CaptureImage.Infrastructure  Windows implementations: capture engine, process\n                               watcher, Steam detector, hotkeys, settings, logging,\n                               Velopack updater. net9.0-windows10.0.22621.0.\n  CaptureImage.ViewModels      MVVM layer — reusable across UI frameworks, no\n                               WinUI 3 references.\n  CaptureImage.UI              WinUI 3 Pages + UserControls (HotkeyRecorder,\n                               ToastHost, LogViewerView, PreviewWindow),\n                               converters, resx localization, tray host.\n  CaptureImage.App             Entry point, DI composition root, Serilog setup,\n                               Velopack startup hook.\ntests/\n  CaptureImage.Core.Tests           xUnit — 31 tests (state machine, file name\n                                    strategy, image format).\n  CaptureImage.Infrastructure.Tests xUnit — 37 tests (VDF parser, Steam scanner,\n                                    settings store, WGC integration).\n  CaptureImage.ViewModels.Tests     Placeholder project for future VM tests.\ndocs/\n  CONTRIBUTORS.md              Contributor list + AI-assistance policy.\n  RELEASING.md                 How to cut a release.\n  legal/\n    DISCLAIMER.md              No-warranty, capture limits, AI-dev, translations.\n    PRIVACY.md                 What's read, what's written, what's on the network.\n    TERMS.md                   Plain-language restatement of GPL-3.0 obligations.\n    THIRD_PARTY_NOTICES.md     Full dependency list + licenses.\n```\n\n## Architecture\n\nSee [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) for a one-page-per-layer\ntour — layer rules, state-machine diagram, WGC capture pipeline sequence,\nDI composition sketch, i18n + RTL flow, and Velopack update flow (all with\nMermaid diagrams rendered inline on GitHub).\n\n## Contributing\n\nSee [`docs/CONTRIBUTORS.md`](docs/CONTRIBUTORS.md) for the full\ncontribution flow. The short version:\n\n1. Open an issue first for anything non-trivial.\n2. Follow conventional-commits style (`feat(...)`, `fix(...)`, `docs(...)`).\n3. Run `dotnet build` and `dotnet test` locally before opening the PR.\n4. Disclose AI-assisted changes in the PR description (not required, but\n   helpful for reviewers).\n\n**Translation help wanted.** The Vietnamese and Arabic language packs\nare machine-assisted — native speakers who can proofread the `.resx`\nfiles are warmly welcomed.\n\n## Security\n\nReport vulnerabilities privately via\n[GitHub Security Advisories](https://github.com/poli0981/captureimg/security/advisories/new).\nSee [`SECURITY.md`](SECURITY.md) for the full policy, scope, and\nresponse-time expectations.\n\n## AI assistance\n\nCaptureImage was developed with significant assistance from the\n**Claude Opus 4.6** large language model, used through Claude Code,\nduring the 2026 development cycle. Every change was reviewed, accepted,\nand tested by the human maintainer before landing. Commits with\nmeaningful AI authorship carry a `Co-Authored-By` trailer naming the\nmodel. Full details in [`docs/CONTRIBUTORS.md`](docs/CONTRIBUTORS.md)\nand [`docs/legal/DISCLAIMER.md §3`](docs/legal/DISCLAIMER.md).\n\n## Support the project\n\nCaptureImage is free, open source, and developed solo. If it helps\nyou, consider supporting development:\n\n- [GitHub Sponsors](https://github.com/sponsors/poli0981)\n- [Ko-fi](https://ko-fi.com/skullmute)\n- [Buy Me a Coffee](https://buymeacoffee.com/skullmute)\n- [Patreon](https://patreon.com/skullmute)\n\nThe same destinations are wired into the repo's \"Sponsor\" button via\n[`.github/FUNDING.yml`](.github/FUNDING.yml).\n\nBug reports go through the in-app **About → Report a bug** button or\n[directly on GitHub](https://github.com/poli0981/captureimg/issues/new?template=bug_report.yml).\n\n## License\n\nCaptureImage is distributed under the **GNU General Public License\nv3.0 or later** (SPDX: `GPL-3.0-or-later`). See\n[`LICENSE`](LICENSE) for the full text and\n[`docs/legal/THIRD_PARTY_NOTICES.md`](docs/legal/THIRD_PARTY_NOTICES.md)\nfor attributions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoli0981%2Fcaptureimg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpoli0981%2Fcaptureimg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoli0981%2Fcaptureimg/lists"}