{"id":13792211,"url":"https://github.com/mwunsch/overscan","last_synced_at":"2026-02-20T12:31:33.919Z","repository":{"id":54677606,"uuid":"81871829","full_name":"mwunsch/overscan","owner":"mwunsch","description":"A live coding environment for live streaming video","archived":false,"fork":false,"pushed_at":"2018-09-21T19:19:49.000Z","size":30246,"stargazers_count":36,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-20T14:56:43.858Z","etag":null,"topics":["broadcasting","gobject-introspection","gstreamer","racket"],"latest_commit_sha":null,"homepage":"https://www.overscan.tv/","language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mwunsch.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}},"created_at":"2017-02-13T21:08:42.000Z","updated_at":"2024-09-05T21:45:43.000Z","dependencies_parsed_at":"2022-08-13T23:40:43.097Z","dependency_job_id":null,"html_url":"https://github.com/mwunsch/overscan","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mwunsch/overscan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwunsch%2Foverscan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwunsch%2Foverscan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwunsch%2Foverscan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwunsch%2Foverscan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mwunsch","download_url":"https://codeload.github.com/mwunsch/overscan/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwunsch%2Foverscan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29650817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T09:27:29.698Z","status":"ssl_error","status_checked_at":"2026-02-20T09:26:12.373Z","response_time":59,"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":["broadcasting","gobject-introspection","gstreamer","racket"],"created_at":"2024-08-03T22:01:09.548Z","updated_at":"2026-02-20T12:31:33.867Z","avatar_url":"https://github.com/mwunsch.png","language":"Racket","funding_links":[],"categories":["Racket"],"sub_categories":["game"],"readme":"# Overscan\n\nA study in live video broadcasting with\nthe [Racket](http://racket-lang.org) programming language.\n\nThe goal of this project is to learn Racket and to better understand\nthe problems involved in:\n\n+ The Real-Time Messaging Protocol\n  ([RTMP](https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol))\n  and constructing and streaming unbounded audio and video feeds.\n+ The [Twitch](https://dev.twitch.tv)\n  and\n  [Facebook Live](https://developers.facebook.com/docs/videos/live-video) API's,\n  for authentication, broadcasting live video streams, and gathering\n  audience data.\n+ Video compositing in software.\n\nOriginally, the end-goal was to build a toolkit like that found\nin [StreamPro](https://streampro.io)\nor [Streamlabs](https://streamlabs.com) (née _TwitchAlerts_) but using\na Racket DSL for on-the-fly compositing and graphics.\n\nNow, this project's ambition is to provide a comprehensive live-coding\nenvironment for video compositing and broadcasting. This project is\ninspired by other live-coding environments\nlike\n[Impromptu](http://impromptu.moso.com.au)/[Extempore](https://github.com/digego/extempore) and\n[Overtone](http://overtone.github.io).\n\nIt is split into three parts:\n\n1. The `ffi/unsafe/introspection` module. This module provides dynamic\n   Racket bindings to [GObject Introspection][gobject-introspection],\n   allowing interaction with C GObject libraries using common Racket\n   idioms (i.e. providing [`racket/class`][racket/class] forms such as\n   `send` and `get-field` for GObjects).\n2. The `gstreamer` collection. Using the aforementioned Introspection\n   module, this collection provides Racket bindings for\n   [GStreamer](https://gstreamer.freedesktop.org), the open source\n   multimedia framework.\n3. The `overscan` collection and language. This provides a DSL for\n   building a GStreamer pipeline for capturing common video sources\n   (cameras and screens), compositing multiple sources, including\n   generated graphics, and then encoding them and pushing them along\n   to an RTMP server (like Twitch). All of this is designed to happen\n   within a Racket REPL session, allowing the broadcaster full control\n   over the stream by evaluating S-expressions. That's the idea, at\n   least.\n\nYou can follow the development along\nat \u003chttp://tinyletter.com/wunsch\u003e. Read archives of previous weekly\ndevlogs at \u003chttp://www.markwunsch.com/tinyletter/\u003e.\n\n[gobject-introspection]: https://wiki.gnome.org/Projects/GObjectIntrospection\n\n[racket/class]: https://docs.racket-lang.org/reference/mzlib_class.html\n\n## Installation\n\nOverscan has been tested on macOS Sierra with Racket v6.12 and\nGStreamer v1.14.0. With a working Racket installation you can install\nwith `raco`:\n\n    raco pkg install overscan\n\nFor Overscan to do anything meaningful, you also need to install\nGStreamer and necessary plugins. Using homebrew:\n\n    brew install gstreamer\n\nThis will install `gstreamer` along with dependencies `glib` and\n`gobject-introspection`, all of which are required.\n\nYou also need to install GStreamer plugins:\n\n    brew install gst-plugins-base --with-pango\n\n    brew install gst-plugins-good\n\n    brew install gst-plugins-bad --with-rtmpdump --with-fdk-aac\n\n    brew install gst-plugins-ugly --with-x264\n\nCopyright © 2017 - 2018 Mark Wunsch\n\nThis package is distributed under the GNU Lesser General Public\nLicense (LGPL).  This means that you can link overscan into proprietary\napplications, provided you follow the rules stated in the LGPL.  You\ncan also modify this package; if you distribute a modified version,\nyou must distribute it under the terms of the LGPL, which in\nparticular means that you must release the source code for the\nmodified software.  See http://www.gnu.org/copyleft/lesser.html\nfor more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwunsch%2Foverscan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmwunsch%2Foverscan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwunsch%2Foverscan/lists"}