{"id":17921791,"url":"https://github.com/joeyparrish/kinetoscope","last_synced_at":"2025-10-29T07:31:10.583Z","repository":{"id":258153169,"uuid":"778052391","full_name":"joeyparrish/kinetoscope","owner":"joeyparrish","description":"Kinetoscope: A Sega Genesis Video Player","archived":false,"fork":false,"pushed_at":"2024-12-03T05:00:05.000Z","size":25962,"stargazers_count":4,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-21T21:08:58.602Z","etag":null,"topics":["cartridge","electronics","ffmpeg","genesis","imagemagick","mega-drive","megadrive","pcb","schematics","sega","sega-genesis","sega-mega-drive","sega-megadrive","sgdk","sgdk-library","video","video-encoder","video-encoding","video-player","video-streaming"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joeyparrish.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2024-03-27T01:35:05.000Z","updated_at":"2024-12-16T15:54:32.000Z","dependencies_parsed_at":"2024-11-15T20:25:58.310Z","dependency_job_id":"e5a2e34f-1a57-40d7-902f-9ce83c2d0982","html_url":"https://github.com/joeyparrish/kinetoscope","commit_stats":null,"previous_names":["joeyparrish/kinetoscope"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeyparrish%2Fkinetoscope","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeyparrish%2Fkinetoscope/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeyparrish%2Fkinetoscope/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joeyparrish%2Fkinetoscope/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joeyparrish","download_url":"https://codeload.github.com/joeyparrish/kinetoscope/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238790026,"owners_count":19530811,"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":["cartridge","electronics","ffmpeg","genesis","imagemagick","mega-drive","megadrive","pcb","schematics","sega","sega-genesis","sega-mega-drive","sega-megadrive","sgdk","sgdk-library","video","video-encoder","video-encoding","video-player","video-streaming"],"created_at":"2024-10-28T20:36:07.298Z","updated_at":"2025-10-29T07:31:10.570Z","avatar_url":"https://github.com/joeyparrish.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"logo-dark.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"logo.svg\"\u003e\n    \u003cimg alt=\"Kinetoscope Logo\" src=\"logo.svg\"\u003e\n  \u003c/picture\u003e\n\u003c/h1\u003e\n\nA Sega Genesis / Mega Drive Streaming Video Player\n\n\n## Overview\n\nKinetoscope can either play video embedded in a standard ROM, or it can stream\nvideo over WiFi using special hardware in a custom cartridge.  It uses a custom\nvideo format detailed in\n[`software/player/inc/segavideo_format.h`](software/player/inc/segavideo_format.h)\nand encoded by\n[`encoder/encode_sega_video.py`](encoder/encode_sega_video.py).\n\nKinetoscope takes its name from the [first moving picture\ndevice](https://www.britannica.com/technology/Kinetoscope), invented in 1891 by\nThomas Edison and William Dickson.  While the 1891 original Kinetoscope was\nable to display 46 frames per second, this project for a 1988 game console can\nonly push 10.\n\nThe default format is displayed at ~320x240p analog SD resolution at 10fps,\nwith 8-bit PCM audio at 13kHz.  The encoded pixels are not square.  The encoded\nframes use a 256x224 resolution due to hardware limitations, and are displayed\nat a different ratio by the Sega's Video Display Processor (VDP).\n\nIf video is embedded in the ROM, you can only fit about 13.6 seconds in a 4MB\ncartridge/ROM.\n\nFor streaming, an RLE compression scheme is used to reduce required throughput,\nand the microcontroller decompresses the video into SRAM on the fly.\n\nSchematics and board layouts for special streaming hardware can be found in the\n[`hardware/`](hardware/) folder.\n\nYou can download a pre-built emulator for macOS, Windows, or Linux from the\n[releases page](https://github.com/joeyparrish/kinetoscope/releases).\n(**NOTE:** On Linux, you should have OpenGL and PulseAudio pre-installed to use\nthese binaries.)\n\n\n## Web Demo\n\nTo see Kinetoscope in a web-based emulator, check out\n[https://joeyparrish.github.io/kinetoscope/](https://joeyparrish.github.io/kinetoscope/)\n\n\n## Prototype\n\nThe first working prototype of the hardware was a stack of boards that looked\nlike this:\n\n![Kinetoscope prototype hardware](hardware/prototype-cart.gif)\n\n\n## Presentation\n\n - [Video presentation](https://youtu.be/0Atlf_whVgA)\n - [Presentation slides](https://docs.google.com/presentation/d/1nqJEwOmjEmVEMR6anbMV5HIaqYFpPi18ib-LaNSrTQE/)\n\n\n## Project Folders\n\nEach folder has a README with more information, including prerequisites that\nmust be installed to work on that part of the project.\n\n - [`software/`](software/): The player library and sample projects, which run\n   on the Sega, written using [SGDK][].\n - [`encoder/`](encoder/): The video encoder, which generates videos in an\n   appropriate format for embedding or streaming.\n - [`hardware/`](hardware/): The schematics and board layouts for a custom\n   cartridge with special streaming hardware.\n - [`firmware/`](firmware/): The firmware that runs on the microcontroller of\n   the custom cartridge hardware.\n - [`emulator-patches/`](emulator-patches/): Patches for OSS emulators to\n   emulate the streaming hardware.\n - [`server/`](server/): Details on running a server for Sega video streams.\n - [`canned-videos/`](canned-videos/): Download canned, pre-encoded videos.\n\n\n## Links\n\nRelated Projects:\n\n - [SGDK][]: A free and open development kit for the Sega Genesis / Mega Drive\n - The logo font is [Kode Mono](https://kodemono.com/)\n - [Sega Genesis Slide Generator and Viewer](https://github.com/joeyparrish/sega-slides/)\n - [Krikzz](https://krikzz.com/our-products/cartridges/): Incredible hardware\n   for retro game console hacking and development, including flash carts\n\nSocials:\n\n - [LinkedIn](https://www.linkedin.com/in/joeyparrish/)\n - [Video-Dev Slack](https://www.video-dev.org/)\n - [Pokemon Go](https://joeyparrish.github.io/joeyparrish/logos/trainer-code.png)\n - End of list\n\n[SGDK]: https://github.com/Stephane-D/SGDK\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoeyparrish%2Fkinetoscope","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoeyparrish%2Fkinetoscope","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoeyparrish%2Fkinetoscope/lists"}