{"id":26066502,"url":"https://github.com/janeasystems/vgc","last_synced_at":"2026-04-22T04:35:03.700Z","repository":{"id":89997068,"uuid":"314584289","full_name":"JaneaSystems/vgc","owner":"JaneaSystems","description":"Video GIF Capture","archived":false,"fork":false,"pushed_at":"2021-03-31T12:09:12.000Z","size":89,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-25T16:16:31.786Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/JaneaSystems.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}},"created_at":"2020-11-20T14:53:25.000Z","updated_at":"2021-03-31T12:09:15.000Z","dependencies_parsed_at":"2023-05-30T21:00:17.350Z","dependency_job_id":null,"html_url":"https://github.com/JaneaSystems/vgc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JaneaSystems/vgc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneaSystems%2Fvgc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneaSystems%2Fvgc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneaSystems%2Fvgc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneaSystems%2Fvgc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JaneaSystems","download_url":"https://codeload.github.com/JaneaSystems/vgc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JaneaSystems%2Fvgc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32121147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"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":[],"created_at":"2025-03-08T20:52:23.562Z","updated_at":"2026-04-22T04:35:03.696Z","avatar_url":"https://github.com/JaneaSystems.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Video GIF Capture\n\nAn easy to use tool for screen capture and export into GIF and MP4 formats.\n\n## Solution architecture\n\nThe solution was developed and should be compiled using Microsoft Visual Studio 2019.\nThe target operating system is Windows 10. The compiled output should be used as a PowerToys module,\nor a standalone executable. The solution consists of five projects, described herein.\nAll projects which use C++ use the latest C++ standard, C++20, to the degree supported by the IDE\nand compiler.\n\n## VGC Core library\n\nThis is a C++ project and it compiles into a static library to be used in the main application.\nIt contains functions and classes which wrap existing relevant Windows APIs where they exist,\nand implement various low level processing algorithms where they don't, or the APIs are undesirable.\nTo ensure the best performance on modern hardware, all operations which could benefit from many\nCPU cores should be implemented using multithreading.\n\nFor screen capture and low-level graphics processing, Direct3D 11 is used. For exporting files\nusing the GIF format, a custom, extensible library is used and its source code is available as\npart of the project. WASAPI is used for audio capture. Loopback capture is supported.\n\nThese OS interop functions are a big potential source of bugs. Bugs are most likely to occur\nwhen available system memory is low, the primary storage device is slow, or when captured devices'\nsettings are changed on-the-fly, for example, when changing the screen resolution or when unplugging\nan audio device. Great attention should be paid to these scenarios. Ideally, the recording, up\nto the point of failure, should be recoverable, but hard crashes should be absolutely avoided.  \n\nDue to large memory requirements of video capture, captured frames are written to the disk as\nlossless PNG images. The frames may optionally be compressed further using an image difference\nalgorithm. In case RAM is filling up and disk writing speed is limited, the rate of capture (FPS)\nis automatically reduced. For shorter snippets, users shouldn't have any problems even when\nrunning on older hardware.\n\nFor MP4 export, `ffmpeg` should be present on the machine. You can use an existing installation\nor choose to download it from the internet. It's not required for other features to work.\n\n## VGC Main executable\n\nThis is also a C++ project and it contains mostly UI code. The UI shall have a native Windows 10\nlook and feel. There shall be two views.\n\n1. Recording panel view, which contains controls to start/stop recording and for setting up the recording.\n2. Editor view, which displays the captured output and allows the user to edit, export or discard it.\n\nOnly simple editing operations are supported.\n\n## MSVC Unit test project\n\nThis project shall contain unit tests, mostly for the VGC Core library.\n\n## PowerToys DLL project\n\nThis project compiles to a dynamically linked library and it implements the PowerToys module interface.\nThe DLL is responsible for running and managing the main executable.\n\n## PowerToys settings page\n\nThe settings page should contain global user preferences, for example, keyboard shortcuts, options\nfor visual appearance, location of ffmpeg, a button to set it up automatically, additional options for ffmpeg,\ndefault recording options, et cetera.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneasystems%2Fvgc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaneasystems%2Fvgc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneasystems%2Fvgc/lists"}