Personal twitch stream recorder
Project description
offstream
Record your favorite twitch streams automatically and watch them later.
- There is no web UI, just use curl and your favorite video player.
- Streams are recorded as is, without re-transcoding.
- Recordings are never muted.
- Ads are optional.
- You can run it on Heroku (completely free) or locally.
- Recordings are stored on IPFS.
- RSS feed of all recordings is available. It can be consumed by youtube-dl, VLC, and other feed readers.
- Streams are available while recording is in progress.
Installing
Option 1: Heroku
You can deploy the app to Heroku by clicking the button below and following the instructions. IMPORTANT: When the app is deployed, click on the "View" button at the bottom to complete the setup.
Option 2: Local installation
- Install the package.
$ pip install offstream
- Setup your local sqlite database located at
~/.offstream/offstream.db
.$ offstream setup
You will get credentials to control the app. I recommend adding them to your~/.netrc
file (or_netrc
on Windows):machine <your-app-hostname> login offstream password <your-password>
- Start the app.
$ offstream
Usage
Once your app is ready, you can add your favorite streamers.
$ curl -n https://your-app-name.herokuapp.com/streamers -d name=garybernhardt
$ curl -n https://your-app-name.herokuapp.com/streamers -d name=esl_sc2 -d max_quality=720p60
The max_quality
parameter is optional and defaults to best
. Typical stream
quality options are
audio_only
, 160p
, 360p
, 480p
, 720p
, 720p60
, 1080p60
, best
.
When any of the streamers goes live, the app will record the stream.
An RSS feed of all recordings is available at
https://your-app-name.herokuapp.com/rss
.
Finally, to watch the latest recording, open the following URL in mpv, VLC, QuickTime, or any other video player.
$ mpv https://your-app-name.herokuapp.com/latest/{streamer_name}
API
-
POST /streamers -d name=<streamer_name> -d max_quality=<quality>
Track a new streamer.
Requires auth.
-
DELETE /streamers/{streamer_name}
Delete a streamer. WARNING: Deletes all associated recordings too.
Requires auth.
-
GET /latest/{streamer_name}
Get the latest recorded stream.
-
POST /settings -d ping_start_hour=<hour> -d ping_end_hour=<hour>
Modify ping settings. On Heroku, offstream keeps itself awake 24/7 by pinging itself periodically. You can save some dyno hours by changing the
ping_start_hour
andping_end_hour
settings to let the app sleep when no one is streaming.Requires auth.
-
GET /rss
orGET /rss?limit=100
RSS feed of recent recordings.
Configuration
The following environment variables are supported.
-
OFFSTREAM_FLUSH_THRESHOLD
Default: automatically calculated, normally
100000000
bytes (100M). -
OFFSTREAM_CHECK_INTERVAL
Default:
120
seconds -
OFFSTREAM_IPFS_API_ADDR
Default:
/dns/ipfs.infura.io/tcp/5001/https
-
OFFSTREAM_IPFS_GATEWAY_URI_TEMPLATE
Default:
https://{cid}.ipfs.infura-ipfs.io/{path}
-
OFFSTREAM_MAX_CONCURRENT_RECORDERS
Default:
5
-
DATABASE_URL
Default:
sqlite:///$HOME/.offstream/offstream.db
-
TZ
Preferred timezone, e.g.
America/New_York
. Please see
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
FAQ
-
Q: My video player reports the following error:
keepalive request failed for 'https://bafybeie3v6lomkfti2b4zsa4yj35nypojllvjrzpbzyxhn5tkfoqaswmbm.ipfs.infura-ipfs.io/18846.ts'
A: This warning can be safely ignored. It's because Infura keeps the root content identifier (CID) in a subdomain, rather than in the path portion of the URL.
See Also
Please also check out the streamlink project.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for offstream-1.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c25ec806be7366835ba3ad51e32e7024f22e513098d12038b846216bf2f7e33 |
|
MD5 | 4cdcd7ce611699cbc84eaed0714afc6d |
|
BLAKE2b-256 | 6f2cf90eb319abf0afa92fb57c67663d725aff56bcfc532be5460118c06499ef |