{"id":13751489,"url":"https://github.com/cyanreg/txproto","last_synced_at":"2025-04-05T23:12:17.435Z","repository":{"id":41825736,"uuid":"257469977","full_name":"cyanreg/txproto","owner":"cyanreg","description":"Scriptable multimedia sandbox. Captures, streams and records from a variety of sources.","archived":false,"fork":false,"pushed_at":"2025-03-10T03:20:06.000Z","size":846,"stargazers_count":97,"open_issues_count":5,"forks_count":12,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-29T22:11:11.818Z","etag":null,"topics":["audio-capture","capturing","recording","streaming","streaming-video"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyanreg.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-04-21T03:29:25.000Z","updated_at":"2025-03-10T03:20:09.000Z","dependencies_parsed_at":"2024-10-26T21:20:43.890Z","dependency_job_id":"e799e679-4ba4-46fd-bbe3-f048494d3086","html_url":"https://github.com/cyanreg/txproto","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyanreg%2Ftxproto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyanreg%2Ftxproto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyanreg%2Ftxproto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyanreg%2Ftxproto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyanreg","download_url":"https://codeload.github.com/cyanreg/txproto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411239,"owners_count":20934653,"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","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":["audio-capture","capturing","recording","streaming","streaming-video"],"created_at":"2024-08-03T09:00:46.471Z","updated_at":"2025-04-05T23:12:17.417Z","avatar_url":"https://github.com/cyanreg.png","language":"C","funding_links":[],"categories":["C","streaming"],"sub_categories":[],"readme":"![txproto](./resources/logo.svg)\n\nA fully scriptable and flexible multimedia streaming/handling program.\n\nFeatures\n--------\n * Fully scriptable via Lua\n * Fully atomic API\n * Every frame is perfect\n * Frame-perfect synchronization between video and audio capture\n * Custom first-class capture/output code for minimal overhead:\n     * Most feature-complete and accurate Pulseaudio implementation, including isolated client capture\n     * Zero-copy Wayland capture via the wlr-export-dmabuf-unstable protocol\n     * Low-overhead X11 capture via XCB/SHM\n     * Wayland capture via the wlr-screencopy-unstable protocol (both software or DMA-BUF frames supported)\n * Second-class libavdevice capture/output support\n * Headless operation supported\n * Optional Vulkan-only GUI via libplacebo, supported window systems:\n     * Wayland\n * Minimal dependencies (FFmpeg and Lua required, libplacebo and all custom capture code optional)\n * Liberally licensed (LGPL v2.1)\n\nBuilding\n--------\nComplete list of dependencies:\n\n * FFmpeg (git master currently required)\n * libplacebo (git master)\n * Lua 5.4\n\nOptional dependencies\n\n * Editline 3.1 (for a command-line interface)\n * libpulse (for Pulseaudio capture)\n * Wayland (wayland-scanner,client,cursor,protocols,xkbcommon and libdrm, for Wayland capture)\n\nTo build, simply do:\n\n`meson build`\n\n`ninja -C build`\n\nThe resulting binary in `./build/src/txproto` is portable and can be ran anywhere.\n\nTo simplify building, `libplacebo` can be built and bundled simultaneously by creating\na `subprojects` directory and cloning the [libplacebo repository](https://code.videolan.org/videolan/libplacebo)\ninto `subprojects/libplacebo`. If an unsuitable libplacebo version already exist on the\nsystem, use `meson setup --force-fallback-for libplacebo build` to force building from\nthe `subprojects` directory.\n\nRunning\n-------\nIf no scripts are specified, `txproto` will, by default, shadow the entire screen to allow the user to screenshot a portion of the screen via the mouse.\n\nTo run a script: `./build/txproto -s \u003cpath to script\u003e`. Example scripts can be found in the [examples](./DOCS/examples/)\ndirectory. CLI parameters are described in the [section below](#cli).\nScript syntax is described in the [Lua API documentation](./DOCS/lua-scripting.md).\n\nCLI\n---\n| Argument             | Description                                                                                                                                                                                             |\n|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| -s `path`            | Specify a script to run.                                                                                                                                                                                |\n| -e `string`          | Specifies a script entry function (default: 'main').                                                                                                                                                    |\n| -r `string`          | Comma-separated list of system Lua packages to include. Searches the local directory first, then the system directories. **Note:** for security, `io`, `os` and `require` are not loaded by default.    |\n| -V `string`          | Specifies a global logging level (quiet, error, warn, info, verbose, debug, trace). For a single component, the syntax is `\u003ccomponent\u003e=\u003clevel\u003e `. Multiple values can be given if separated via commas. |\n| -L `path`            | Specifies a log file. **Warning:** always at maximum verbose level, this will get big quickly.                                                                                                          |\n| -C                   | Enable the command-line interface.                                                                                                                                                                      |\n| -h                   | Display help (this).                                                                                                                                                                                    |\n| -v                   | Displays program version info.                                                                                                                                                                          |\n| `trailing arguments` | Given to the script as variable arguments to the entrypoint (`function main(...) local argument1, argument2, etc = ... end`).                                                                           |\n\nDiscussions and help\n--------------------\nJoin `#txproto` on Libera, or [#txproto:pars.ee](https://matrix.to/#/#txproto:pars.ee) on Matrix.\n\nFeature policy\n--------------\n| New feature          | Policy                                 |\n|----------------------|----------------------------------------|\n| Custom inputs        | Always accepted                        |\n| Custom outputs       | Always accepted                        |\n| Platform integration | Accepted, via Lua scripts              |\n| Custom muxers        | Welcome                                |\n| Custom filters       | Unlikely, submit to FFmpeg first       |\n| Custom de/encoders   | Never, submit any to FFmpeg            |\n\nAlternatively, for custom inputs, outputs, and muxers, a dynamic linking ABI will be provided to allow for the use of non-free binaries.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyanreg%2Ftxproto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyanreg%2Ftxproto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyanreg%2Ftxproto/lists"}