{"id":16936462,"url":"https://github.com/jonhoo/obs-do","last_synced_at":"2025-09-03T18:35:09.074Z","repository":{"id":181635821,"uuid":"667065567","full_name":"jonhoo/obs-do","owner":"jonhoo","description":"CLI for common OBS operations while streaming using WebSocket","archived":false,"fork":false,"pushed_at":"2025-03-01T04:21:01.000Z","size":183,"stargazers_count":25,"open_issues_count":2,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-06T17:53:06.531Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jonhoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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-07-16T14:26:41.000Z","updated_at":"2025-02-08T13:21:39.000Z","dependencies_parsed_at":"2024-03-02T10:30:07.992Z","dependency_job_id":"6cadd233-04cd-4cce-867d-f29a6b18db3a","html_url":"https://github.com/jonhoo/obs-do","commit_stats":null,"previous_names":["jonhoo/obs-do"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonhoo%2Fobs-do","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonhoo%2Fobs-do/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonhoo%2Fobs-do/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonhoo%2Fobs-do/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonhoo","download_url":"https://codeload.github.com/jonhoo/obs-do/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243742591,"owners_count":20340666,"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":[],"created_at":"2024-10-13T20:57:02.437Z","updated_at":"2025-03-15T14:30:38.415Z","avatar_url":"https://github.com/jonhoo.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Crates.io](https://img.shields.io/crates/v/obs-do.svg)](https://crates.io/crates/guardian)\n[![codecov](https://codecov.io/gh/jonhoo/obs-do/branch/main/graph/badge.svg?token=QOXMTH9TSA)](https://codecov.io/gh/jonhoo/guardian)\n[![Dependency status](https://deps.rs/repo/github/jonhoo/obs-do/status.svg)](https://deps.rs/repo/github/jonhoo/guardian)\n\n`obs-do` is a simple control utility that triggers OBS operations when\ninvoked on the command line. It's particularly handy when used in\ncombination with global system hotkeys that can invoke commands.\n\nAssuming you have [Rust installed][Rust], run:\n\n```console\n$ cargo install obs-do\n```\n\nand make sure you have `~/.cargo/bin` on your `$PATH` (or execute it\ndirectly from there).\n\nThe motivation for build it for me is that OBS [does not (yet)\nsupport][nope] global hotkeys under Wayland. Which is unfortunate, given\nthat they're pretty much essential to doing streaming where you can't\nswitch over to the OBS window all the time. Some Wayland compositors\nsupport [global hotkey pass-through][hyprland], which are often enough\nto get by. In my case though, the combination of [this bug in\nHyprland][bug1] and [this bug in OBS][bug2] meant that I simply could\nnot get the global shortcuts I wanted that way.\n\nWhich brings me to `obs-do`. This super-simple CLI connects to [OBS over\nWebSocket][ws] and issues commands that way, and can then simply be\ninvoked by whatever means you want (including Wayland compositor global\nshortcuts) to trigger the desired OBS effect. For example, I'm using the\nfollowing hyprland configuration to use my numpad for stream control:\n\n```ini\nbind = SHIFT, KP_SUBTRACT, exec, obs-do toggle-stream\nbind = SHIFT, KP_ADD, exec, obs-do toggle-record\nbind = , KP_DELETE, exec, obs-do toggle-mute\nbind = , KP_BEGIN, exec, obs-do set-scene 'Desktop (Q\u0026A)'\nbind = , KP_INSERT, exec, obs-do set-scene 'Desktop (code)'\nbind = , KP_MULTIPLY, exec, obs-do set-scene 'Break'\nbind = , KP_END, exec, obs-do set-scene 'Webcam'\n```\n\nNote that for this to work you _must_ have an installation of OBS that\nincludes WebSocket functionality. If you see Tools -\u003e WebSocket Server\nSettings in the OBS menu then you're set — just copy the \"Server\nPassword\" from the \"Show Connect Info\" popup into\n`~/.config/obs-do/websocket-token`. Otherwise, grab a different OBS\ninstall that does. For example, on Arch Linux at the moment, the\n`obs-studio` package [does not include][arch] WebSocket support.\nInstead, you need to install one of the other OBS packages from the AUR\n(like `obs-studio-git`).\n\n[nope]: https://ideas.obsproject.com/posts/2066/implement-globalshortcuts-portal\n[hyprland]: https://wiki.hyprland.org/Configuring/Binds/#classic\n[bug1]: https://github.com/hyprwm/Hyprland/issues/2682\n[bug2]: https://github.com/obsproject/obs-studio/issues/9244\n[ws]: https://github.com/obsproject/obs-websocket\n[arch]: https://bugs.archlinux.org/task/76069\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0\n   ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license\n   ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonhoo%2Fobs-do","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonhoo%2Fobs-do","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonhoo%2Fobs-do/lists"}