External Storage¶
gflow-cli can write generated images and videos directly to Google Cloud
Storage, Amazon S3, or an S3-compatible bucket such as MinIO.
Set GFLOW_CLI_STORAGE_URI to enable
cloud writes. Leave it unset for normal local filesystem output.
Storage Modes¶
GFLOW_CLI_STORAGE_URI |
Asset bytes are written to | Catalog record |
|---|---|---|
| unset | $GFLOW_CLI_OUTPUT_DIR or the command's local output override |
local_files.path |
gs://bucket/prefix/ |
Google Cloud Storage | local_files.storage_provider="gcs", local_files.cloud_uri |
s3://bucket/prefix/ |
S3 or S3-compatible storage | local_files.storage_provider="s3", local_files.cloud_uri |
Current behavior is single-target, not dual-write. When cloud storage is active,
generated asset bytes are uploaded to the configured bucket instead of being
saved as local asset copies. The SQLite catalog remains local and records the
cloud URI for lookup through gflow data media.
Install Extras¶
Cloud backends are optional dependencies. Install the matching extra in the
environment where gflow runs:
If the tool is already installed, reinstall with the extra in your package
manager of choice, for example uv tool install --force "gflow-cli[s3]".
Object Layout¶
Without per-command local output overrides, cloud object keys mirror the default local layout:
<storage-prefix>/
├── images/<YYYY-MM-DD>/<media_id>_<index>.<ext>
└── videos/<YYYY-MM-DD>/<media_id>.mp4
<ext> is corrected from the actual bytes before upload. For example, if Flow
returns JPEG bytes for an image request originally planned as .png, the object
key is adjusted to .jpg before it is written.
Per-command local output flags are not bucket-prefix controls. For predictable
cloud keys, prefer setting GFLOW_CLI_STORAGE_URI to the desired bucket prefix
and leave the command output flags unset.
S3 And MinIO¶
export GFLOW_CLI_STORAGE_URI=s3://my-bucket/gflow/
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_DEFAULT_REGION=us-east-1
gflow image t2i "blue product cube on a white sweep" -n 2
For local MinIO development:
export GFLOW_CLI_STORAGE_URI=s3://gflow-test/dev/
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
export AWS_ENDPOINT_URL=http://localhost:9000
export AWS_DEFAULT_REGION=us-east-1
The S3 backend uses standard AWS SDK environment variables. Omit
AWS_ENDPOINT_URL for real AWS S3.
Google Cloud Storage¶
export GFLOW_CLI_STORAGE_URI=gs://my-gcs-bucket/gflow/
gcloud auth application-default login
gflow video t2v "slow cinematic push-in on a sunlit forest clearing"
For service accounts, point GOOGLE_APPLICATION_CREDENTIALS at the JSON
credential file before running gflow. For a local GCS emulator, set
STORAGE_EMULATOR_HOST.
Verifying A Write¶
Use the generated media ID to inspect the local catalog:
Cloud-backed assets show cloud_uri_1, cloud_uri_2, and so on:
Then verify the object with your provider tool:
aws s3 ls s3://gflow-test/dev/images/2026-05-28/
gsutil ls gs://my-gcs-bucket/gflow/videos/2026-05-28/
For MinIO, the web console can also preview generated images and download videos from the configured bucket.
Security Notes¶
- Generated assets may contain sensitive prompts, people, products, or client work. Configure bucket IAM, retention, public access, and encryption according to your own threat model.
- Do not commit real cloud credentials or
.envfiles. Use the provider's normal credential chain or short-lived environment variables. gflow-clidoes not store Flow signed CDN URLs, reCAPTCHA tokens, authorization headers, or cookies in the catalog. See DATA_LAYER.md and SECURITY.md.- The local SQLite database still stores profile names, Flow IDs, prompt hashes,
and cloud URIs. Set
GFLOW_CLI_DB_PATHto an encrypted or ephemeral location if that metadata is sensitive.
Troubleshooting¶
| Symptom | Check |
|---|---|
Cloud storage requires universal_pathlib |
Reinstall with gflow-cli[s3] or gflow-cli[gcs]. |
GFLOW_CLI_STORAGE_URI scheme not supported |
Use s3://... or gs://...; local paths belong in GFLOW_CLI_OUTPUT_DIR. |
| S3 write fails against MinIO | Confirm AWS_ENDPOINT_URL, access key, secret key, bucket name, and region. |
| GCS write fails locally | Confirm STORAGE_EMULATOR_HOST for emulator runs or ADC/service-account credentials for real GCS. |
gflow data media shows a local path |
Cloud storage was not active for that run; check the shell environment used by the command. |
Related docs: CONFIGURATION.md, DATA_LAYER.md, and SECURITY.md.