aura-stream

A personal, self-hosted pipeline for producing and publishing my own videos.

Single operator · not a public service · no third-party accounts

Implementation status — nothing has been uploaded through this client yet. The upload interface described below is under development. No video has been uploaded to YouTube by this client, and the channels it will publish to are new and have no published videos. Every row marked planned below is not yet built. This page describes what the client will do, so that what it does and what it says it does stay identical.

What this is

aura-stream is a set of tools I built for myself to run one part-time video production workflow end to end: picking a topic, drafting a script, generating visuals and narration with AI models, assembling the cut, publishing it to a YouTube channel I own, and then reading the performance figures of those same videos so I can decide what to make next.

It runs on my own computer. There is no hosted product, no sign-up, and no way for anyone else to log in or connect their account. I am the only user, and the only channels it touches are ones I own and operate.

One authorisation per channel. videos.insert uploads to the channel that owns the credential used for the request, so each of my channels is authorised separately and has its own stored refresh token. Expected volume is at most two or three uploads per week across the channels I own.

How it uses the YouTube API

Operation Scope requested Why
videos.insert
planned
youtube.upload Upload one finished video file to the channel that owns the credential. Title, description, tags and privacy status are entered by me in the client's upload form — which offers public, unlisted and private — before any request is sent. Nothing is uploaded without me completing and submitting that form for that specific video.

The upload response returns the video resource, including the video ID, so the local project record can cite the exact upload it produced. No read scope is requested — the response alone is sufficient.
YouTube Analytics
planned

(not yet requested)
Later, read aggregate retention, click-through rate and average view duration for my own videos only, to judge which formats work. The scope for this is deliberately not requested until the feature is actually built.
Why an API rather than uploading by hand? Because the video file and its metadata are produced by one programmatic pipeline run, and the upload is the step that binds that run to the resulting video. Uploading by hand means re-typing generated titles, descriptions and tags for every video, then reconciling afterwards which upload came from which run — that reconciliation step is where records get lost or mis-attributed.

To be clear about what this is not: YouTube Studio does show the video ID in its URL, does timestamp publication, and does report retention and CTR. The API is not here to obtain facts Studio already displays. It is here so that one pipeline run produces one upload without a manual transcription step in between. This is about binding a record, not about publishing at volume.

What it does not do

Third-party services (and what they never receive)

Producing a video does involve third-party AI services: text-to-video and image models and a text-to-speech provider receive the prompts and generate the footage and narration used in the video. That is how the video gets made, and it happens before anything touches YouTube.

Those services never receive YouTube data. They do not receive OAuth tokens, video IDs, channel identifiers, or performance metrics. The two halves of the pipeline are separate: generation happens first with no YouTube involvement, then the finished file is uploaded to YouTube and the resulting ID stays on my own machine.

Credentials and data

The OAuth refresh token for each authorised channel is stored on my own machine by a local service bound to 127.0.0.1, which is not reachable from the internet. Tokens are never embedded in the components that make API calls, and are never sent anywhere other than Google's token endpoint.

I can revoke this client's access at any time via the Google security settings page, which invalidates the stored token.

What is stored, for how long, and how it is deleted: Privacy Policy.

Terms

This client is an API Client of YouTube API Services. Its use of those services is governed by the YouTube Terms of Service, and Google's handling of data is described in the Google Privacy Policy.