Windows desktop app · Free & open source
FlyGD Wingman
Your OBS recording wingman.
FlyGD Wingman is a free Windows desktop application for people who record gameplay with OBS Studio. It watches your OBS recording folder, lists the recordings it finds, and lets you review them, combine several into one video, and upload the ones you choose to your own YouTube channel.
Why it asks for access to your YouTube account: uploading a video to your channel requires your permission. Wingman requests a single Google permission — youtube.upload — and uses it for exactly one purpose: uploading the recordings you select, at the moment you press upload. It requests nothing else and reads nothing from your account. Full detail on the Google permission →
Everything runs on your own PC. There is no FlyGD account to create and no FlyGD server involved — Wingman talks directly to Google.
Windows 10 and 11, 64-bit. The installer is per-user and needs no administrator rights. Python and FFmpeg are bundled — nothing else to install. Wingman is set to start with Windows by default so it can watch for recordings; you can untick that during installation.
- Runs on
- Your Windows PC
- Google permissions
youtube.uploadonly- Backend server
- None
- Licence
- MIT — source public
A short trip from “stop recording” to “here’s the link”
Wingman does one job and tries to do it without ceremony. Everything below is in the shipping application today — there are no coming-soon boxes on this page.
Watches your recording folder
Wingman finds the recording folder from your OBS Studio configuration, or you can point it at one yourself. It waits until a file has finished being written before announcing it, so you never see a half-saved clip.
Lists what you recorded
A plain table of your recordings with checkboxes. New ones arrive pre-selected. Nothing is uploaded, moved or changed until you say so.
Stitches clips together
Select several recordings and Wingman joins them into a single video in chronological order, using the FFmpeg build shipped with the app. Your original files are left untouched.
Uploads to your channel
Give a title and description, press upload, and the video goes to the YouTube channel you signed in with. When it finishes you get the video link back in the table, ready to copy.
You choose who can see it
Every upload carries a privacy setting you control — private, unlisted or public. Wingman ships defaulting to unlisted, and you can change it in Settings before you upload.
Bundles EVE combat logs
If you play EVE Online, Wingman can gather the combat logs covering the fight you just recorded and post them to a Discord channel of your choosing. Entirely optional and off until you configure it.
How a session actually goes
Wingman never interrupts a recording and never touches OBS itself. It reads OBS's configuration to learn where recordings land, then stays out of the way.
- 01Record in OBS as you normally would.
No plugin, no script to install into OBS, no changes to your scene collection. Wingman is a separate tray application watching the output folder.
- 02Wingman notices the finished file.
When the recording stops and the file has finished writing, you get a tray notification. If you would rather the window came to the front instead, that is a setting.
- 03Open the window and pick your clips.
Click the tray icon. Recent recordings are listed and the new ones are already ticked. Optionally stitch a selection into one video first.
- 04Upload the ones you chose.
Add a title and description, confirm the privacy setting, and upload. Wingman fills in the resulting YouTube link for each row so you can copy or open it.
Deleting is deliberate and permanent. Wingman has a “Delete Selected” button that erases the chosen files from your disk after a confirmation dialog. It does not use the Recycle Bin and it cannot be undone. Nothing else in the app ever deletes or modifies your recordings.
Exactly what Wingman asks Google for
Wingman uploads videos on your behalf, so it has to ask for a Google permission. It asks for the narrowest one that exists for the job, and nothing else.
The one scope Wingman requests
https://www.googleapis.com/auth/youtube.upload
That is the complete list. There is no second scope and no profile scope. Wingman calls exactly one YouTube Data API method — videos.insert — and only when you press upload.
Google's consent screen labels this permission “Manage your YouTube videos.” That wording is Google's, and it is broader than what the permission actually grants: youtube.upload permits uploading new videos and nothing else. Editing or deleting existing videos requires a different scope, which Wingman does not request.
What the permission is used for
- Uploading the video files you selected to the YouTube channel you signed in with
- Setting the title and description you typed
- Setting the video category and the privacy status (private, unlisted or public) you chose
- Returning the resulting video link to you
What the permission does not allow
- Reading, editing or deleting videos already on your channel
- Reading your subscriptions, playlists, watch history or comments
- Reading your channel analytics or your Google profile
- Touching Gmail, Google Drive, Contacts, Photos or Calendar
These are limits Google enforces on the scope itself, not promises about our code. Separately, and by our own design, Wingman never uploads anything you did not explicitly select.
Where your Google credentials go
You sign in through Google's own consent screen, opened in your normal browser. The resulting access and refresh tokens are written to a file in your Windows user profile and used from there:
- Token file
- %LOCALAPPDATA%\OBSYouTubeUploader\token.json
- Stored as
- Plain JSON. Wingman does not encrypt this file — treat it like a saved password.
- Sent to FlyGD
- Never. There is no FlyGD server, so there is nowhere for it to be sent.
- Video data
- Uploaded directly from your PC to Google's servers.
Wingman has no backend. Sign-in happens between your browser and Google; uploads happen between the application on your PC and Google's API. No FlyGD-operated service sits in between, receives your tokens, or sees your videos.
One nuance, stated plainly: the Google Cloud project that identifies the application to Google belongs to the project maintainer, and its OAuth client ID and client secret are compiled into the released build. That is how desktop applications are normally distributed and it does not give the maintainer access to your account or your tokens. It does mean the whole user base shares one YouTube API quota — currently 100 uploads per day across everyone using the app.
Google verification is still in progress. The application is published, so anyone can sign in — but until Google’s review completes, the consent screen shows a “Google hasn’t verified this app” warning. Choose Advanced and continue past it to proceed. The warning disappears once verification clears; nothing else about the sign-in changes.
Pair a fight recording with its logs
An optional extra for EVE Online players. It is unrelated to YouTube and no Google data is involved anywhere in it.
EVE Online writes a text combat log for each play session. When you select one or more recordings and choose Upload combat logs, Wingman works out the time span those recordings cover, finds the logs overlapping that window (with a few minutes’ margin) in your EVE Gamelogs folder, puts the most recent of them in a single ZIP archive, and posts that archive to a Discord webhook you configured.
- The Discord webhook is yours — you paste it in Settings, and no webhook means the feature simply does nothing
- Only your combat logs are sent. Video files are never sent to Discord
- The message accompanying the archive names the time window, the number of logs and the EVE character names read from them
- Your original log files are only read — never moved, changed or deleted
- Nothing from your Google Account or YouTube is involved in this feature at all
Treat a webhook URL like a password. Anyone holding it can post to that Discord channel, and it is stored in plain text in Wingman's settings file. Wingman keeps it out of its own log file, but don't paste it anywhere public.
There is no service behind this application
Wingman is a desktop tool, not a hosted product. That is not a marketing position — there is genuinely no server to send anything to.
No account, no sign-up
There is no FlyGD account to create. The only sign-in anywhere in the application is Google's — from Settings, or automatically the first time you upload.
No analytics or telemetry
The application contains no analytics, no crash reporting, no usage tracking and no update check. This website has none either — no cookies, no third-party scripts.
Your files stay put
Recordings, settings, logs and tokens all live on your PC. Video data leaves it only when you upload, and then only to Google.
Only two places it ever connects
Google, when you sign in or upload; and Discord, if you configured a webhook and pressed the combat-log button. Nothing else.
Read the code that handles your credentials
Almost every claim on this page can be checked against the source, which is rather the point of publishing it. The one exception is the OAuth client credential itself: the repository holds a placeholder, and the real value is injected from a protected secret when a release is built.
FlyGD Wingman is released under the MIT Licence and developed in the open. The application is written in Python, packaged for Windows with PyInstaller, and distributed as a per-user installer built by a public GitHub Actions workflow.
The repository is currently named OBS-YouTube-Uploader, from the project's original name; it is the same application, now being renamed to FlyGD Wingman.
Getting in touch
Bug reports, questions about privacy or the Google integration, and feature suggestions all go to the same place — the project's issue tracker:
github.com/elboaf/OBS-YouTube-Uploader/issues
This is a small, unfunded project maintained by volunteers in their own time. There is no support desk and no response-time guarantee, but issues are read.