CLI Reference (Experimental)
Standalone command-line automation for mixing and uploading without the GUI.
Experimental. The CLI (pipeline_runner.py) is a standalone automation entry point, separate from the GUI, and has not received the same level of testing. Use with caution, especially in unattended/scheduled contexts — review output logs after each run, and avoid pointing it at your only copy of source audio until you've validated it against your specific files.
What it does
pipeline_runner.py combines the mix and upload steps into a single command-line invocation, without opening the CustomTkinter GUI. It runs synchronously (blocking) — invoke it, it runs to completion, and it produces a report at the end. There's no live progress UI; all status is written to logs/console output and the same local data files the GUI uses (upload_history.json, pending_moderation.json).
When to use it
Intended for automation contexts where a GUI isn't practical or available:
- Windows Task Scheduler
- cron jobs (Linux/macOS, if you're running the pipeline in that environment)
- CI/CD pipelines
If you're uploading audio interactively and want to see progress, mixing controls, and moderation status live, use the GUI quickstart instead — the CLI is purpose-built for unattended runs, not day-to-day use.
Basic usage
python src/pipeline_runner.py --helpThis page is a starting point. Full flag-by-flag documentation (input folder, mix parameters, credentials source, output/report format) will be filled in as the CLI stabilizes. If you're scripting against it today, treat the --help output as the source of truth over this page.
Credentials in automated contexts
The CLI reads credentials the same way the GUI does — via the OS keychain if available, falling back to the plaintext JSON store. In a scheduled/automated context (e.g. a service account running Task Scheduler), confirm the keychain is actually accessible to the account executing the job; if it isn't, the CLI will fall back to plaintext storage, which has different security implications than interactive use. See Credential Storage.
Known limitations
- No live progress reporting — you won't see per-file status until the run completes (or you tail the log).
- Same moderation-halt behavior as the GUI: if Roblox rejects an asset, the queue stops. In an unattended run, this means the job ends early and won't retry automatically — check the report/logs after each scheduled run rather than assuming success.