Skip to main content

reeln-plugin-google

A reeln-cli plugin for Google platform integration — YouTube livestreams, uploads, playlists, and comments.

Install

pip install reeln-plugin-google

Or for development:

git clone https://github.com/StreamnDad/reeln-plugin-google
cd reeln-plugin-google
make dev-install

Google Cloud Setup

Before using this plugin, you need a Google Cloud project with OAuth credentials. Follow these steps exactly.

1. Create a GCP Project

  1. Go to Google Cloud Console
  2. Click the project dropdown (top-left) → New Project
  3. Name it (e.g., reeln-livestream) and click Create
  4. Select the new project from the dropdown

2. Enable the YouTube Data API v3

  1. Go to APIs & Services → Library
  2. Search for YouTube Data API v3
  3. Click it and press Enable
  1. Go to APIs & Services → OAuth consent screen
  2. Select External user type → Create
  3. Fill in:
    • App name — anything (e.g., reeln)
    • User support email — your Gmail
    • Developer contact email — your Gmail
  4. Click Save and Continue
  5. On the Scopes page, click Add or Remove Scopes and add:
    • https://www.googleapis.com/auth/youtube
    • https://www.googleapis.com/auth/youtube.upload
    • https://www.googleapis.com/auth/youtube.force-ssl
  6. Click Update → Save and Continue
  7. On the Test users page, click Add Users and enter your Google email address
  8. Click Save and Continue → Back to Dashboard

Testing vs Production mode: Your app starts in "Testing" mode with these limitations:

  • Only the test users you added can authorize
  • OAuth tokens expire every 7 days (you'll need to re-authorize)
  • Maximum 100 test users

Once your setup is stable, you can publish to "Production" mode to remove token expiry and the user cap. Production apps requesting sensitive scopes require Google verification, but apps for personal use with limited users typically pass quickly.

4. Create OAuth 2.0 Client ID

  1. Go to APIs & Services → Credentials
  2. Click Create Credentials → OAuth client ID
  3. Application type: Desktop app
  4. Name it (e.g., reeln-desktop) and click Create
  5. Click Download JSON (the download icon)

5. Protect the Secrets File

The downloaded client_secrets.json contains your OAuth client ID and client secret. Treat it like a password.

# Move it somewhere safe outside your repo
mv ~/Downloads/client_secret_*.json ~/.config/reeln/client_secrets.json

# Restrict permissions (macOS/Linux)
chmod 600 ~/.config/reeln/client_secrets.json

Never commit this file to git. It allows anyone to impersonate your application and request access to YouTube accounts.

Plugin Configuration

Add the Google plugin to your reeln config. All capabilities are off by default — enable only what you need:

{
  "plugins": {
    "enabled": ["google"],
    "settings": {
      "google": {
        "client_secrets_file": "~/.config/reeln/client_secrets.json",
        "create_livestream": true,
        "manage_playlists": true,
        "upload_highlights": true,
        "upload_shorts": false,
        "privacy_status": "unlisted"
      }
    }
  }
}

Feature Flags

Every capability must be explicitly enabled. Nothing runs unless you set the flag to true.

Flag Default What it does
create_livestream false Create a YouTube broadcast on reeln game init and write the URL to shared context
manage_playlists false Create a per-game playlist on reeln game init; auto-add uploads when combined with upload_highlights
upload_highlights false Upload the merged highlights video after reeln highlights merge
upload_shorts false Upload Shorts after reeln render short (detected via filter_complex)

Other Options

Key Required Default Description
client_secrets_file Yes — Path to GCP OAuth client secrets JSON
credentials_cache No <data_dir>/google/oauth.json OAuth credentials cache path
privacy_status No unlisted Video/livestream privacy: public, unlisted, or private
category_id No 20 YouTube category ID (20 = Gaming)
tags No [] Default video tags
scopes No [youtube, youtube.upload, youtube.force-ssl] OAuth scopes

First Run

On the first reeln game init, the plugin opens a browser for OAuth consent:

  1. Sign in with the Google account you added as a test user
  2. Click Continue (past the "unverified app" warning)
  3. Grant the requested YouTube permissions
  4. The browser shows "The authentication flow has completed" — you can close it

Credentials are cached at ~/Library/Application Support/reeln/data/google/oauth.json (macOS) or ~/.local/share/reeln/data/google/oauth.json (Linux). The file is automatically chmod 600'd. Tokens auto-refresh on subsequent runs — you won't see the browser again unless tokens expire or you re-authenticate.

Troubleshooting

"Access blocked" or "Error 403: access_denied" You didn't add your Google email as a test user. Go to OAuth consent screen → Test users and add it.

"Quota exceeded" The YouTube Data API has a daily quota (default 10,000 units). Creating a livestream costs ~1,600 units. If you're hitting limits, check your quota dashboard.

Token expired after 7 days This happens in Testing mode. Either re-run to trigger the browser flow again, or publish your OAuth consent screen to Production mode (see Testing vs Production above).

"redirect_uri_mismatch" Your OAuth client type isn't set to Desktop app. Delete the credential and create a new one with the correct type.

How It Works

The plugin hooks into reeln-cli lifecycle events. Here's the typical game-day flow:

reeln game init
  └─ ON_GAME_INIT
       ├─ create_livestream → YouTube broadcast bound to your OBS stream key
       └─ manage_playlists  → per-game playlist (livestream auto-added if both enabled)

reeln highlights merge
  └─ ON_HIGHLIGHTS_MERGED
       └─ upload_highlights → upload merged video; auto-add to playlist if enabled

reeln render short
  └─ POST_RENDER (for each short)
       └─ upload_shorts → upload as YouTube Short (#Shorts appended to title)

reeln game finish
  ├─ ON_GAME_FINISH        → no-op (sibling plugins write to shared context)
  └─ ON_POST_GAME_FINISH   → append chapter markers to broadcast, reset state

Shared Context

The plugin writes results to context.shared so sibling plugins (e.g., a Discord notifier) can consume them:

Key Value
shared["livestreams"]["google"] Livestream URL (https://youtube.com/live/...)
shared["playlists"]["google"] Playlist ID
shared["uploads"]["google"]["video_id"] Uploaded highlights video ID
shared["uploads"]["google"]["url"] Uploaded highlights URL
shared["uploads"]["google"]["shorts"] List of {"video_id", "url"} for each Short

The plugin also reads from shared context:

Key Written by Used in
shared["game_events"] Scoreboard plugin (ON_GAME_FINISH) ON_POST_GAME_FINISH — appended as YouTube chapter markers
shared["livestream_metadata"] LLM plugin (ON_GAME_READY) ON_GAME_READY — updates broadcast title/description/translations

LLM Metadata

If an LLM plugin writes metadata to shared context before the upload hooks fire, the plugin uses it instead of auto-generating from game info:

Highlights — reads from shared["uploads"]["google"]:

Key Used by
title Highlights upload title
description Highlights upload description
tags Highlights upload tags

Renders (Shorts / videos) — reads from shared["render_metadata"]:

Key Used by
title Render upload title
description Render upload description

Development

make dev-install    # uv venv + editable install with dev deps
make test           # pytest with 100% coverage
make lint           # ruff check
make format         # ruff format
make check          # lint + mypy + test

License

AGPL-3.0-only

Metadata

Release files for reeln-plugin-google 0.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reeln-plugin-google 0.13.0
File Size Uploaded Provenance
reeln_plugin_google-0.13.0.tar.gz 38.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for reeln-plugin-google 0.13.0
File Interpreter ABI Platform
reeln_plugin_google-0.13.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.3 kB

Release files / reeln_plugin_google-0.13.0.tar.gz

Download URL reeln_plugin_google-0.13.0.tar.gz
Size 38.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e03cd34e8813d7da2c86dfce2a7585602146b287746f6cb5e672a1d09676c6a6
BLAKE2b-256 checksum
How to use checksums
56d3066ede5e227202b3846b8f5c1e90288bca01a312510b5457b8bec648fd73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Release files / reeln_plugin_google-0.13.0-py3-none-any.whl

Download URL reeln_plugin_google-0.13.0-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3698f79771d7d6ea1261c6f64beebe4e9e1181b5e375df8709a95860709f1af7
BLAKE2b-256 checksum
How to use checksums
33da4814a2ac2f548e0efce594e60e06df263cc4f67d20b4e1651af34514c46e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

Security for reeln-plugin-google 0.13.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for reeln_plugin_google-0.13.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page