{"id":17255378,"url":"https://github.com/krisnova/twinx","last_synced_at":"2026-01-25T07:03:56.663Z","repository":{"id":87263940,"uuid":"408812317","full_name":"krisnova/twinx","owner":"krisnova","description":"A twitch focused command line tool for producing, archiving and managing live stream content. Built for Linux.","archived":false,"fork":false,"pushed_at":"2021-10-26T00:39:06.000Z","size":11609,"stargazers_count":24,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-14T15:48:09.513Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/krisnova.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}},"created_at":"2021-09-21T12:31:46.000Z","updated_at":"2025-07-23T01:41:04.000Z","dependencies_parsed_at":"2023-03-03T04:15:22.331Z","dependency_job_id":null,"html_url":"https://github.com/krisnova/twinx","commit_stats":null,"previous_names":["kris-nova/twinx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/krisnova/twinx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisnova%2Ftwinx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisnova%2Ftwinx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisnova%2Ftwinx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisnova%2Ftwinx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krisnova","download_url":"https://codeload.github.com/krisnova/twinx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krisnova%2Ftwinx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28747308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T05:12:38.112Z","status":"ssl_error","status_checked_at":"2026-01-25T05:04:50.338Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-10-15T07:11:29.128Z","updated_at":"2026-01-25T07:03:56.647Z","avatar_url":"https://github.com/krisnova.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# twinx\n\n```\n  ████████╗██╗    ██╗██╗███╗   ██╗██╗  ██╗\n  ╚══██╔══╝██║    ██║██║████╗  ██║╚██╗██╔╝\n     ██║   ██║ █╗ ██║██║██╔██╗ ██║ ╚███╔╝\n     ██║   ██║███╗██║██║██║╚██╗██║ ██╔██╗\n     ██║   ╚███╔███╔╝██║██║ ╚████║██╔╝ ██╗\n     ╚═╝    ╚══╝╚══╝ ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝\n```\n\n`twinx` is a live-streaming command line tool for Linux. \nIt connects streaming services (like Twitch, OBS and YouTube) together via a common `title` and `description`.\n\n### Overview\n\nUse `twinx` to manage your streams.\nThis should be the first and last tool you use while live-streaming.\nThis will kick off a persistent standalone linux process that runs as a temporary daemon for the duration of the stream.\nThe daemon can then be interfaced with using the `twinx` command line tool.\nYou can add integrations and functionality to your stream after it has been started.\n\n## Example\n\nUse `twinx` to start a new stream on a Linux filesystem.\nThis will register your `title` and `description` for your new stream, and start the background process.\nThe title and description will be used as we work with various backends.\n\n```bash \n$ # twinx stream start \u003ctitle\u003e \u003cdescription\u003e\n$ twinx stream start \\\n    \"How to hack the planet\" \\\n    \"This is a live stream about how to hack the kernel to burn down capitalism\"\n```\n\nStart an RTMP server. If no `host:port` is defined, `twinx` will select a port and listen on `localhost:1935`.\n\n```bash \n$ twinx rtmp start \u003coptional host:port\u003e\n$ twinx rtmp start localhost:1719\n```\n\nSend the local stream to a remote backend such as [Twitch](https://stream.twitch.tv/ingests/) or [YouTube Live](https://youtube.com) via the proxy command.\nYou may proxy to multiple backends 🙂 at the same time.\n\n```bash \n# Example Twitch\n$ twinx rtmp proxy rtmp://jfk.contribute.live-video.net/app/{stream_key}\n\n# Example YouTube\n$ twinx rtmp proxy rtmp://a.rtmp.youtube.com/live2/{stream_key}\n```\n\n## Configuration\n\nTwitch Callback URL Port: 1717\n\nEnvironmental Variables\n\n```bash\n# OBS\nexport TWINX_OBS_PORT=\"1718\"\nexport TWINX_OBS_PASSWORD=\"\"\nexport TWINX_OBS_HOST=\"localhost\"\n\n# YouTube\nexport TWINX_YOUTUBE_API_KEY=\"\"\n```\n\n## Permissions\n\n`twinx` will manage RTMP servers, unix sockets, and gRPC servers and clients for you.\n`twinx` requires root privileges to do this.\n\n## FAQ\n\nThis tool is a reflection of being asked the following questions\n\n\u003e What are you working on today?\n\u003e Where is that video you did on \u003cthing\u003e\n\u003e What is this stream even about?\n\n\n## Installing\n\nBuild the binary.\n\nInstall the binary.\n\n```\n./configure\nmake\nsudo make install\n```\n\nArch Linux dependencies\n\nNote: We use `nginx-rtmp` instead of the module based package combinations.\n\n```\nprotoc-gen-go protoc-gen-go-grpc\nnginx-rtmp\n```\n\n#### RTMP Protocol Reference\n\n - [Wikipedia Page](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol)\n - [How RTMP Works](https://ottverse.com/rtmp-real-time-messaging-protocol-encoding-streaming/)\n - [What is RTMP](https://blog.pogrebnyak.info/what-is-rtmp-and-how-its-used-in-live-streaming/)\n - [RTMP Spec](https://wwwimages2.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf)\n - [NGINX RTMP Module Handshake C Source](https://github.com/arut/nginx-rtmp-module/blob/master/ngx_rtmp_handshake.c)\n - [LiveGo](https://github.com/gwuhaolin/livego/tree/master/protocol/rtmp)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrisnova%2Ftwinx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrisnova%2Ftwinx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrisnova%2Ftwinx/lists"}