{"id":23968066,"url":"https://github.com/gmbeard/shadow-cast","last_synced_at":"2026-02-23T17:47:54.444Z","repository":{"id":205473516,"uuid":"714319637","full_name":"gmbeard/shadow-cast","owner":"gmbeard","description":"GPU accelerated screen and audio recording for Linux","archived":false,"fork":false,"pushed_at":"2025-02-09T22:18:27.000Z","size":1978,"stargazers_count":42,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-09T23:23:25.519Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gmbeard.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2023-11-04T15:04:51.000Z","updated_at":"2025-02-09T22:18:31.000Z","dependencies_parsed_at":"2023-12-06T08:45:59.549Z","dependency_job_id":"8ef4f1ce-93b8-4910-85cb-e3706f875dd7","html_url":"https://github.com/gmbeard/shadow-cast","commit_stats":null,"previous_names":["gmbeard/shadow-cast"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/gmbeard/shadow-cast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmbeard%2Fshadow-cast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmbeard%2Fshadow-cast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmbeard%2Fshadow-cast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmbeard%2Fshadow-cast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gmbeard","download_url":"https://codeload.github.com/gmbeard/shadow-cast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmbeard%2Fshadow-cast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274901923,"owners_count":25371045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-12T02:00:09.324Z","response_time":60,"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-01-07T00:00:51.491Z","updated_at":"2026-02-23T17:47:48.966Z","avatar_url":"https://github.com/gmbeard.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"## Shadow Cast - GPU accelerated screen and audio recording\n*Shadow Cast* is a low-latency, low-overhead, GPU accelerated screen \u0026amp; audio capture utility.\n\nTypical screen capture utilities copy the framebuffer data between host and GPU memory when encoding, causing significant load on the host CPU. This can affect both the running applications and the quality of the resulting media. *Shadow Cast* captures and encodes the framebuffer directly on the GPU with very little or no performance penalty to running applications. This makes *Shadow Cast* ideal for capturing gameplay footage, even in the most hardware intensive games. [See how it performs](doc/performance.md).\n\n- [Example](#example---cyberpunk-2077)\n- [Usage](#usage)\n- [Requirements](#requirements)\n- [Building from source](#building-from-source)\n- [Installing](#installing)\n- [Alternative projects](#some-alternative-projects)\n- [FAQ](doc/faq.md)\n\n#### Example - Cyberpunk 2077\n[![Cyberpunk 2077](http://i3.ytimg.com/vi/frXGxrdgTLY/hqdefault.jpg)](https://www.youtube.com/watch?v=frXGxrdgTLY)\n\nMore examples can be found in [this YouTube playlist](https://www.youtube.com/watch?v=cczxo_S7tV8\u0026list=PLnsSpqzSlJMKbVEuUbIfMhdgcoPpG-FoQ)\n\n### Usage\nYou can start a capture session using...\n\n```\n$ shadow-cast [ \u003cOPTIONS\u003e ] \u003cOUTPUT FILE\u003e\n```\n\nThe resulting media/container type is determined by the extension of `\u003cOUTPUT FILE\u003e`, e.g. `.mp4` or `.mkv`.\n\nIf no `OPTIONS` are specified then *Shadow Cast* will pick some sensible defaults for the audio/video encoders and sample/frame rates, but these can be changed by specifying the following `OPTIONS` on the command line...\n\n| Option                    | Description   |\n|---------                  |------------   |\n| `-A \u003cAUDIO ENCODER\u003e`      | Audio encoder. All options available to `ffmpeg` should work here. Defaults to `libopus` |\n| `-V \u003cVIDEO ENCODER\u003e`      | Video encoder. Available options are `h264_nvenc` and `hevc_nvenc`. defaults to `hevc_nvenc` |\n| `-f \u003cFRAMES PER SECOND\u003e`  | Capture FPS. values from `20` to `70` are accepted. defaults to `60`  |\n| `-s \u003cSAMPLE RATE\u003e`        | Audio sample rate. Defaults to `48000` (_NOTE: Some encoders will only support certain sample rates. Shadow Cast will display an error if your chosen sample rate isn't supported_) |\n\nCtrl+C / SIGINT will stop the capture session and finalize the output media.\n\n### Requirements\n- FFMpeg (libav)\n- NVIDIA GPU, supporting NVENC and NvFBC\n- Pipewire\n- X11 or Wayland\n\n### Building from source\nIn order to build *Shadow Cast* you will need a C++20 compiler, plus the following libraries' headers/libs installed...\n\n- ffmpeg / libav\n- X11\n- Pipewire\n- Wayland (wayland-client, wayland-egl, wayland-devel)\n- libdrm\n- libglvnd\n\nThese can usually be obtained through your Linux distribution's package manager using the `-devel` packages of each.\n\nAfter obtaining the source, change to the project's directory and run the following commands...\n\n```\n$ mkdir ./build\n$ cd ./build\n$ cmake ..\n$ cmake --build .\n```\n\n_TIP: You may be able to speed up the_ `cmake --build .` _step by appending_ ` -- -j$(nproc)`\n\n### Installing\n\nFollowing the steps to build, above, you can install the built binary using...\n\n```\n$ sudo ./install-helper.sh\n```\n\n#### Installing to a Different Location\n\nBy default, *Shadow Cast* will be installed to `/usr/local/bin`. If you wish to install to a different location, run the following command _before_ running the above install step...\n\n```\n$ cmake -DCMAKE_INSTALL_PREFIX=\u003cINSTALL_DIR\u003e ..\n```\n\n... replacing `\u003cINSTALL_DIR\u003e` with your custom install path (E.g. `$HOME/.local`, `/opt`, etc.)\n\nThis will install the binary to `\u003cINSTALL_DIR\u003e/bin/shadow-cast`. Once installed, you must ensure that `\u003cINSTALL_DIR\u003e/bin` is in your `$PATH`.\n\n### Some Alternative Projects\n#### [gpu-screen-recorder](https://git.dec05eba.com/gpu-screen-recorder/about/)\n*Shadow Cast* takes most of its inspiration from this project and it has been a very helpful reference. It seems to be the only other alternative that offers the same (if not better) performance and ease-of-use characteristics. *gpu-screen-recorder* offers AMD and Intel support in addition to NVIDIA.\n\n#### [ffmpeg command-line utility](https://ffmpeg.org/)\nThis is the utility I used for capture prior to creating *Shadow Cast*. You can capture an X display using the `ffmpeg -f x11grab ...` command. In my experience, the performance when capturing gameplay footage is pretty terrible, and the resulting media will often contain lots of frame drops / tearing ([Example of `x11grab` vs *Shadow Cast* on YouTube](https://www.youtube.com/watch?v=ogFdvVON4z0)).\n\n#### [OBS Studio](https://obsproject.com/)\nAdmittedly, I've never used this software. I'm aware that it is very popular for capturing / streaming but I don't really consider it to align with my use-cases. I much prefer a simple / small utility, where it is quick to setup a capture.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmbeard%2Fshadow-cast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgmbeard%2Fshadow-cast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmbeard%2Fshadow-cast/lists"}