diff --git a/.editorconfig b/.editorconfig index 14b0f7bd..c3253a25 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,10 +1,17 @@ +root = true + [*] +end_of_line = lf insert_final_newline = true [*.{c,cpp,h,hpp}] indent_style = tab indent_size = 4 +[CMakeLists.txt] +indent_style = tab +indent_size = 4 + [*.{yml,yaml}] indent_style = space indent_size = 2 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cb5b2b34..59b0c205 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,6 +1,6 @@ - + ### Description @@ -18,18 +18,17 @@ Tested OS(s): - - - + + + ### Checklist: -- [ ] I have read the [**contributing** document](https://github.com/obsproject/obs-websocket/blob/4.x-current/CONTRIBUTING.md). -- [ ] My code is not on the master branch. -- [ ] The code has been tested. +- [ ] I have read the [Contributing Guidelines](https://github.com/obsproject/obs-websocket/wiki/Contributing-Guidelines). - [ ] All commit messages are properly formatted and commits squashed where appropriate. +- [ ] My code is not on the `master` branch. +- [ ] The code has been tested. - [ ] I have included updates to all appropriate documentation. - diff --git a/BUILDING.md b/BUILDING.md deleted file mode 100644 index 79411712..00000000 --- a/BUILDING.md +++ /dev/null @@ -1,66 +0,0 @@ -# Compiling obs-websocket - -## Prerequisites - -You'll need [Qt 5.15.2 on Windows/Mac](https://download.qt.io/official_releases/qt/5.10/) or Qt 5.12.8 on Linux, -[CMake](https://cmake.org/download/) and a working [OBS Studio development environment](https://obsproject.com/wiki/install-instructions) installed on your -computer. - -## Windows - -In cmake-gui, you'll have to set the following variables : - -- **QTDIR** (path) : location of the Qt environment suited for your compiler and architecture -- **LIBOBS_INCLUDE_DIR** (path) : location of the libobs subfolder in the source code of OBS Studio -- **LIBOBS_LIB** (filepath) : location of the obs.lib file -- **OBS_FRONTEND_LIB** (filepath) : location of the obs-frontend-api.lib file - -## Linux - -On Debian/Ubuntu : - -```shell -sudo apt-get install libboost-all-dev -git clone --recursive https://github.com/obsproject/obs-websocket.git -cd obs-websocket -mkdir build && cd build -cmake -DLIBOBS_INCLUDE_DIR="" -DCMAKE_INSTALL_PREFIX=/usr -DUSE_UBUNTU_FIX=true .. -make -j4 -sudo make install -``` - -On other linux OS's, use this cmake command instead: - -```shell -cmake -DLIBOBS_INCLUDE_DIR="" -DCMAKE_INSTALL_PREFIX=/usr .. -``` - -## OS X - -As a prerequisite, you will need Xcode for your current OSX version, the Xcode command line tools, and [Homebrew](https://brew.sh/). -Homebrew's setup will guide you in getting your system set up, you should be good to go once Homebrew is successfully up and running. - -Use of the macOS CI scripts is recommended. Please note that these -scripts install new software and can change several settings on your system. An -existing obs-studio development environment is not required, as -`install-build-obs-macos.sh` will install it for you. If you already have a -working obs-studio development environment and have built obs-studio, you can -skip that script. - -Of course, you're encouraged to dig through the contents of these scripts to -look for issues or specificities. - -```shell -git clone --recursive https://github.com/obsproject/obs-websocket.git -cd obs-websocket -./CI/install-dependencies-macos.sh -./CI/install-build-obs-macos.sh -./CI/build-macos.sh -./CI/package-macos.sh -``` - -This will result in a ready-to-use `obs-websocket.pkg` installer in the `release` subfolder. - -## Automated Builds - -![Github Actions](https://github.com/obsproject/obs-websocket/actions/workflows/main.yml/badge.svg?branch=master) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 83950cc5..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,89 +0,0 @@ -# Contributing to obs-websocket - -## Translating obs-websocket to your language - -Localization happens on [Crowdin](https://crowdin.com/project/obs-websocket) - -## Branches - -**Development happens on `master`** - -## Writing code for obs-websocket - -### Code Formatting Guidelines - -* Function and variable names: camelCase for variables, MixedCaps for method names - -* Request and Event names should use MixedCaps names. Keep naming conformity of request naming using similar terms like `Get`, `Set`, `Get[x]List`, `Start[x]`, `Toggle[x]`. - -* Request and Event json properties/fields should use camelCase. Try to use existing property names. - -* Code is indented with Tabs. Assume they are 4 columns wide - -* 80 columns max code width. (Comments/docs can be larger) - -* New and updated requests/events must always come with accompanying documentation comments (see existing protocol elements for examples). -These are required to automatically generate the [protocol specification document](docs/generated/protocol.md). - -### Code Best-Practices - -* Favor return-early code and avoid wrapping huge portions of code in conditionals. As an example, this: -```cpp -if (success) - return RequestResult::Success(); -else - return RequestResult::Error(RequestStatus::GenericError); -``` -is better like this: -```cpp -if (!success) - return RequestResult::Error(RequestStatus::GenericError); - -return RequestResult::Success(); -``` - -* Try to use the [built-in](https://github.com/obsproject/obs-websocket/blob/master/src/requesthandler/rpc/Request.h) request checks when possible. - * Refer to existing requests for usage examples. - -* Some example common response/request property names are: - * `sceneName` - The name of a scene - * `inputName` - The name of an input - * `sourceName` - The name of a source (only for when multiple source types apply) - * `sceneItemEnabled` - Whether a scene item is enabled - -* Response parameters which have no attributed data due to an invalid state should be set to `null` (versus being left out) - * For example, when `GetSceneList` is called and OBS is not in studio mode, `currentPreviewSceneName` will be `null` - * If a request's core response data depends on a state, an error should be thrown. See `GetCurrentPreviewScene` as an example. - -* In general, try to match the style of existing code as best as possible. We try our best to keep a consistent code style, and may suggest nitpicks as necessary. - -### Commit Guidelines - -* Commits follow the 50/72 standard: - * 50 characters suggested max for the commit title (absolute maximum 72 including scope) - * One empty line after the title - * Description wrapped to 72 columns max width per line. - -* Commit titles: - * Use present tense - * Prefix the title with a "scope" name - * e.g: "CI: fix wrong behaviour when packaging for OS X" - * Typical scopes: CI, General, Requests, Events, Server - -**Example commit:** - -``` -Requests: Add GetSceneList - -Adds a new request called `GetSceneList` which returns the current -scene, along with an array of objects, each one with a scene name -and index. -``` - -### Pull Requests - -* Pull Requests must never be based off your fork's main branch (in this case, `master`). - * Start your work in a newly named branch based on the upstream main one (e.g.: `feature/cool-new-feature`, `bugfix/fix-palakis-mistakes`, ...) - -* If your work is not done yet, but for any reason you need to PR it (like collecting discussions, testing with CI, getting testers), - create it as a Draft Pull Request (open the little arrow menu next to the "Create pull request" button, then select "Create draft pull request"). \ No newline at end of file diff --git a/README.md b/README.md index 24fa47dc..207360f6 100644 --- a/README.md +++ b/README.md @@ -8,25 +8,14 @@ WebSocket API for OBS Studio. [![CI Multiplatform Build](https://github.com/obsproject/obs-websocket/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/obs-websocket/obs-websocket/actions/workflows/main.yml) [![Discord](https://img.shields.io/discord/715691013825364120.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/WBaSQ3A) -[![Financial Contributors on Open Collective](https://opencollective.com/obs-websocket/all/badge.svg?label=financial+contributors)](https://opencollective.com/obs-websocket) +[![Financial Contributors on Open Collective](https://opencollective.com/obs-websocket-dev/all/badge.svg?label=financial+contributors)](https://opencollective.com/obs-websocket-dev) ## Downloads Binaries for Windows, MacOS, and Linux are available in the [Releases](https://github.com/obsproject/obs-websocket/releases) section. -### Homebrew - -If you're using MacOS you can use Homebrew for installation as well: - -```sh -brew install obs-websocket -``` - ## Using obs-websocket -Here is a list of available web clients: (compatible with tablets and other touch interfaces) -- (No known clients supporting 5.0.0) - It is **highly recommended** to protect obs-websocket with a password against unauthorized control. To do this, open the "Websocket server settings" dialog under OBS' "Tools" menu. In the settings dialogs, you can enable or disable authentication and set a password for it. (Psst. You can use `--websocket_port`(value), `--websocket_password`(value), and `--websocket_debug`(flag) on the command line to override the configured values.) @@ -37,59 +26,46 @@ It is **highly recommended** to protect obs-websocket with a password against un - Change your stream overlay/graphics based on the current scene - Automate scene switching with a third-party program (e.g. : auto-pilot, foot pedal, ...) -### For developers +### Client software +- (No known clients supporting 5.0.0 at the moment. Send a message in Discord if you have one!) -The server is a typical Websockets server running by default on port 4444 (the port number can be changed in the Settings dialog). -The protocol understood by the server is documented in [PROTOCOL.md](docs/generated/protocol.md). +### Client libraries (for developers) -Here's a list of available language APIs for obs-websocket : +Here's a list of available language APIs for obs-websocket: - Python 3.7+ (Asyncio): [simpleobsws](https://github.com/IRLToolkit/simpleobsws/tree/master) by IRLToolkit - Rust: [obws](https://github.com/dnaka91/obws/tree/v5-api) by dnaka91 +The server is a typical Websockets server running by default on port 4444 (the port number can be changed in the Settings dialog under `Tools`). +The protocol we use is documented in [PROTOCOL.md](docs/generated/protocol.md). + We'd like to know what you're building with or for obs-websocket. If you do something in this fashion, feel free to drop a message in `#project-showoff` in the [discord server!](https://discord.gg/WBaSQ3A) -### Securing obs-websocket (via TLS/SSL) - -If you are intending to use obs-websocket outside of a LAN environment, it is highly recommended to secure the connection using a tunneling service. - -See the SSL [tunnelling guide](SSL-TUNNELLING.md) for easy instructions on how to encrypt your websocket connection. - -## Compiling obs-websocket - -See the [build instructions](BUILDING.md). - -## Translations - -**Your help is welcome on translations.** - -Please join the localization project on [Crowdin](https://crowdin.com/project/obs-websocket) - ## Contributors ### Code Contributors -This project exists thanks to all the people who contribute. [Contribute](CONTRIBUTING.md). - +This project exists thanks to [all the people](graphs/contributors) who contribute. [Contribute](wiki/Contributing-Guidelines). + ### Financial Contributors -Become a financial contributor and help us sustain our community. [Contribute](https://opencollective.com/obs-websocket/contribute) +Become a financial contributor and help us sustain our community. [Contribute](https://opencollective.com/obs-websocket-dev/contribute) #### Individuals - + #### Organizations -Support this project with your organization. Your logo will show up here with a link to your website. [Contribute](https://opencollective.com/obs-websocket/contribute) +Support this project with your organization. Your logo will show up here with a link to your website. [Contribute](https://opencollective.com/obs-websocket-dev/contribute) - - - - - - - - - - + + + + + + + + + + diff --git a/SSL-TUNNELLING.md b/SSL-TUNNELLING.md deleted file mode 100644 index b841e711..00000000 --- a/SSL-TUNNELLING.md +++ /dev/null @@ -1,45 +0,0 @@ -# Connecting over a TLS/secure connection (or remotely) - -If you want to expose the WebSocket server of obs-websocket over a secure TLS connection (or to connect remotely), the easiest approach is to use a localhost tunneling service like [ngrok](https://ngrok.com/) or [pagekite](https://pagekite.net/). - -**Before doing this, secure the WebSocket server first by enabling authentication with a strong password!** - -**Please bear in mind that doing this will expose your OBS instance to the open Internet and the security risks it implies. *You've been warned!*** - - -## ngrok - -[Install the ngrok CLI tool](https://ngrok.com/download) on a linux OS, then start ngrok bound to port 4444 like this: - -```bash -ngrok http 4444 -``` - -The ngrok command will output something like this: - -```text -ngrok by @inconshreveable - -Tunnel Status online -Version 2.0/2.0 -Web Interface http://127.0.0.1:4040 -Forwarding http://TUNNEL_ID.ngrok.io -> localhost:4444 -Forwarding https://TUNNEL_ID.ngrok.io -> localhost:4444 -``` - -Where `TUNNEL_ID` is, as the name implies, the unique name of your ngrok tunnel. You'll get a new one every time you start ngrok. - -Then, use `wss://TUNNEL_ID.ngrok.io` to connect to obs-websocket over TLS. - -See the [ngrok documentation](https://ngrok.com/docs) for more tunneling options and settings. - - -## PageKite - -[Install the PageKite CLI tool](http://pagekite.net/downloads), then start PageKite bound to port 4444 like this (replace NAME with one of your choosing): - -```bash -python pagekite.py 4444 NAME.pagekite.me -``` - -Then, use `wss://NAME.pagekite.me` to connect to obs-websocket over TLS. diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index e09f5f04..00000000 --- a/crowdin.yml +++ /dev/null @@ -1,3 +0,0 @@ -files: - - source: /data/locale/en-US.ini - translation: /data/locale/%locale%.ini