gflow-cli 0.2.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,404 @@
1
+ Metadata-Version: 2.4
2
+ Name: gflow-cli
3
+ Version: 0.2.0a1
4
+ Summary: Unofficial CLI for Google Flow โ€” drive Veo image-to-video generations from the terminal.
5
+ Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
+ Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
7
+ Author-email: Flavio Oliva <ffroliva@gmail.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2026 Flavio Oliva (ffroliva)
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: LICENSE
30
+ Keywords: ai,cli,flow,google,veo,video
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Environment :: Console
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
+ Classifier: Topic :: Multimedia :: Video
39
+ Requires-Python: >=3.11
40
+ Requires-Dist: click>=8.1.0
41
+ Requires-Dist: httpx>=0.27.0
42
+ Requires-Dist: platformdirs>=4.0.0
43
+ Requires-Dist: playwright>=1.45.0
44
+ Requires-Dist: pydantic-settings>=2.5.0
45
+ Requires-Dist: rich>=13.7.0
46
+ Requires-Dist: structlog>=24.0.0
47
+ Provides-Extra: dev
48
+ Requires-Dist: pyright>=1.1.0; extra == 'dev'
49
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
50
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
51
+ Requires-Dist: ruff>=0.5.0; extra == 'dev'
52
+ Description-Content-Type: text/markdown
53
+
54
+ # gflow-cli
55
+
56
+ > **Unofficial, reverse-engineered Python CLI for Google Flow.**
57
+ > Drive [Google Flow](https://labs.google/fx/tools/flow) Veo image-to-video generations from your terminal โ€” **without the browser**.
58
+
59
+ [![CI](https://github.com/ffroliva/ggflow-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/ffroliva/ggflow-cli/actions/workflows/ci.yml)
60
+ [![Release](https://github.com/ffroliva/ggflow-cli/actions/workflows/release.yml/badge.svg)](https://github.com/ffroliva/ggflow-cli/actions/workflows/release.yml)
61
+ [![PyPI version](https://img.shields.io/pypi/v/ggflow-cli.svg)](https://pypi.org/project/ggflow-cli/)
62
+ [![Python versions](https://img.shields.io/pypi/pyversions/ggflow-cli.svg)](https://pypi.org/project/ggflow-cli/)
63
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
64
+ [![Status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](#project-status)
65
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
66
+ [![Type checked: pyright](https://img.shields.io/badge/type%20checked-pyright-blue.svg)](https://github.com/microsoft/pyright)
67
+ [![Tests: TDD](https://img.shields.io/badge/tests-TDD-brightgreen.svg)](#development--tdd-workflow)
68
+
69
+ > โš ๏ธ **Not affiliated with Google.** Reverse-engineered from public Flow web traffic. Endpoints can change at any time. See full [DISCLAIMER](DISCLAIMER.md) before use.
70
+
71
+ ๐Ÿ“š **Docs:** [INDEX](docs/INDEX.md) ยท [Architecture](docs/ARCHITECTURE.md) ยท [Authentication](docs/AUTHENTICATION.md) ยท [Configuration](docs/CONFIGURATION.md) ยท [Usage](docs/USAGE.md) ยท [Security](docs/SECURITY.md) ยท [Known issues](KNOWN_ISSUES.md) ยท [Plan](PLAN.md) ยท [Changelog](CHANGELOG.md)
72
+ ๐Ÿค– **For AI agents:** [CLAUDE.md](CLAUDE.md) ยท [`.claude/`](.claude/README.md)
73
+
74
+ ---
75
+
76
+ ## Objective
77
+
78
+ **For Google AI Ultra and Pro subscribers who have Flow credits and want to use them efficiently.**
79
+
80
+ Your subscription includes a generous Veo credit allowance, but the Flow web UI was designed for hand-crafted, one-at-a-time video creation โ€” not for the batch workflows that actually justify burning through hundreds of credits a month. The UI is slow (waiting for the React app, dragging assets, clicking through dialogs), the DOM is fragile to automate, and there's no way to script "generate these 50 clips while I'm at lunch."
81
+
82
+ `gflow-cli` reverse-engineers Flow's internal REST API on `aisandbox-pa.googleapis.com` and exposes it as a clean command-line tool. **Same Veo model, same quality, same Ultra/Pro billing โ€” without ever opening a browser** (after a one-time auth capture).
83
+
84
+ Now you can:
85
+
86
+ - **Burn credits efficiently** โ€” `for img in ./inputs/*.png; do gflow i2v "$img" "$prompt" -o "out/$(basename "$img" .png).mp4"; done`
87
+ - **Build pipelines** โ€” wire Veo into your AI video production stack, content automation, or batch experiments
88
+ - **Stay in the terminal** โ€” no Chromium, no waiting for the UI to load, no clicking through 4 dialogs per clip
89
+ - **Parallelise** โ€” drive multiple accounts side-by-side with `--profile` (planned v0.4)
90
+
91
+ This project is the same pattern as [`edge-tts`](https://github.com/rany2/edge-tts) โ€” an unofficial Python client over Microsoft's Azure TTS service used by the Edge browser.
92
+
93
+ ---
94
+
95
+ ## Disclaimer
96
+
97
+ `gflow-cli` is **not affiliated with, endorsed by, or sponsored by Google**. It calls a private API surface (`aisandbox-pa.googleapis.com`) that Google can change or restrict at any time. By using this tool you accept that:
98
+
99
+ - You must already have a valid Google AI Ultra or Pro subscription with Flow access.
100
+ - All generations bill against **your own Google account**, subject to Google's terms.
101
+ - Endpoints, request shapes, and auth flows may break without notice.
102
+ - The maintainer will respond promptly to any takedown request from Google.
103
+
104
+ Read the full [DISCLAIMER](DISCLAIMER.md) before deploying this in any production setting.
105
+
106
+ ---
107
+
108
+ ## Project status
109
+
110
+ **v0.1.0 โ€” pre-release alpha.** Routes captured, scaffold in place, implementations being filled in. **Not yet usable end-to-end.**
111
+
112
+ | Milestone | Status |
113
+ |---|---|
114
+ | Repo scaffold, CI, license, README, disclaimer | โœ… done |
115
+ | Auth login flow (one-time browser capture) | ๐Ÿ”ง in progress |
116
+ | `upload_image` route wired | ๐Ÿ”ง in progress |
117
+ | `start_generation` route wired | ๐Ÿ”ง in progress |
118
+ | `get_job` polling | ๐Ÿ”ง in progress |
119
+ | `download` signed URL fetch | ๐Ÿ”ง in progress |
120
+ | End-to-end smoke test against live Flow | ๐Ÿ”ง in progress |
121
+ | First public alpha release on PyPI | โณ planned (v0.2) |
122
+ | Provider abstraction for official Veo 3.1 API | โณ planned (v0.3) |
123
+ | Concurrency / per-account pool | โณ planned (v0.4) |
124
+
125
+ ---
126
+
127
+ ## Prerequisites
128
+
129
+ | Requirement | Why |
130
+ |---|---|
131
+ | **Python 3.11+** | Modern type hints, asyncio improvements |
132
+ | **[uv](https://docs.astral.sh/uv/)** โ‰ฅ 0.4 | Dependency + virtualenv management; also enables `uvx` runs |
133
+ | **Playwright Chromium** | Used **once** for `auth login` and as the HTTP transport (cookie jar). No UI automation. |
134
+ | **Google AI Ultra or Pro** account with Flow access | Otherwise the API returns 403. Try in [labs.google/fx/tools/flow](https://labs.google/fx/tools/flow) first. |
135
+ | ~500 MB disk | Chromium browser + Python deps |
136
+
137
+ Tested on Windows 11 + macOS 14 + Ubuntu 24.04. Linux + WSL work but `auth login` needs a display server (X / Wayland) for the one-time browser capture; a saved profile transfers freely between machines.
138
+
139
+ ---
140
+
141
+ ## Install
142
+
143
+ ### Try it without installing (zero-config, recommended for first run)
144
+
145
+ ```bash
146
+ uvx --from gflow-cli gflow --help
147
+ ```
148
+
149
+ `uvx` (from [uv](https://docs.astral.sh/uv/)) downloads and runs the package in a throwaway environment. **No global install, no virtualenv to manage.** Perfect for occasional batch runs or trying it before committing.
150
+
151
+ ### Install as a user tool
152
+
153
+ ```bash
154
+ uv tool install gflow-cli
155
+ gflow --help
156
+ ```
157
+
158
+ This installs `gflow` (and `flow` if no conflict) on your `PATH` system-wide, isolated from your project venvs. Update with `uv tool upgrade gflow-cli`.
159
+
160
+ ### From source (current โ€” pre-release)
161
+
162
+ ```bash
163
+ git clone git@github.com:ffroliva/ggflow-cli.git
164
+ cd gflow-cli
165
+ uv sync # creates .venv, installs runtime + dev deps
166
+ uv run playwright install chromium # one-time browser download (~150 MB)
167
+ uv run gflow --help
168
+ ```
169
+
170
+ ### Install Playwright Chromium (one-time, any install method)
171
+
172
+ ```bash
173
+ uvx --from gflow-cli playwright install chromium
174
+ # or after `uv tool install`:
175
+ uv tool run --from gflow-cli playwright install chromium
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Quick start
181
+
182
+ ```bash
183
+ # 1. Sign in once โ€” opens a Chromium window, persists session locally
184
+ gflow auth login
185
+
186
+ # 2. Verify
187
+ gflow auth status
188
+
189
+ # 3. Generate a clip end-to-end
190
+ gflow i2v ./input.png "Slow cinematic push-in, soft golden light" -o out.mp4
191
+ ```
192
+
193
+ Same call from Python:
194
+
195
+ ```python
196
+ import asyncio
197
+ from pathlib import Path
198
+ from flow_cli.providers.flow import FlowProvider
199
+ from flow_cli.auth import profile_dir
200
+ from flow_cli.models import GenerationRequest
201
+
202
+ async def make_clip():
203
+ async with FlowProvider(profile_dir=profile_dir()) as p:
204
+ asset = await p.upload_image(Path("input.png"))
205
+ job = await p.start_generation(GenerationRequest(
206
+ start_image=Path("input.png"),
207
+ motion_prompt="Slow cinematic push-in, soft golden light",
208
+ ))
209
+ # Poll until job.status == JobStatus.SUCCEEDED, then:
210
+ # await p.download(job.output_url, Path("out.mp4"))
211
+
212
+ asyncio.run(make_clip())
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Commands (v0.1)
218
+
219
+ ```text
220
+ gflow auth login # one-time browser sign-in
221
+ gflow auth status # show current session
222
+
223
+ gflow upload <image> # โ†’ asset UUID
224
+ gflow generate -s <uuid> -p "<prompt>" # kick off Veo gen, returns job_id
225
+ gflow status <job_id> # poll job status
226
+ gflow download <job_id> -o out.mp4 # fetch result
227
+
228
+ gflow i2v <image> "<prompt>" -o out.mp4 # convenience: upload + generate + poll + download
229
+ ```
230
+
231
+ Each command supports `--profile <name>` for managing multiple Google accounts side-by-side.
232
+
233
+ ---
234
+
235
+ ## Stack
236
+
237
+ | Layer | Tech | Why |
238
+ |---|---|---|
239
+ | Package + deps | [`uv`](https://docs.astral.sh/uv/) + [`hatchling`](https://hatch.pypa.io/) | Fast install, lockfile, builds wheels |
240
+ | CLI framework | [`click`](https://click.palletsprojects.com/) | Mature, declarative, composable subcommands |
241
+ | Console UI | [`rich`](https://rich.readthedocs.io/) | Pretty progress bars, colour, tables |
242
+ | HTTP transport | [`playwright`](https://playwright.dev/python/) (`page.request`) | Auto-attaches Google session cookies โ€” no OAuth scraping |
243
+ | Async | stdlib `asyncio` | Concurrency primitive for parallel generations |
244
+ | Type checking | [`pyright`](https://github.com/microsoft/pyright) (strict on `src/flow_cli`) | Catches errors before runtime |
245
+ | Linting / format | [`ruff`](https://github.com/astral-sh/ruff) | Single tool, fast |
246
+ | Testing | [`pytest`](https://docs.pytest.org/) + [`pytest-asyncio`](https://pytest-asyncio.readthedocs.io/) | Standard, async-aware |
247
+ | CI/CD | GitHub Actions | Free, matrix builds, OIDC trusted publishing |
248
+
249
+ No FastAPI, no Django, no SQLAlchemy. This is a CLI + library โ€” keeping the runtime surface tight and `uvx`-friendly.
250
+
251
+ ---
252
+
253
+ ## Architecture
254
+
255
+ ```text
256
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
257
+ โ”‚ gflow CLI โ”‚ โ† Click + Rich
258
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
259
+ โ”‚
260
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
261
+ โ”‚ Provider โ”‚ โ† protocol (Provider in flow_cli/providers/base.py)
262
+ โ”‚ abstraction โ”‚
263
+ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
264
+ โ”‚
265
+ โ”Œโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
266
+ โ”‚ โ”‚ โ”‚
267
+ โ”Œโ”€โ”€โ–ผโ”€โ”€โ” โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”
268
+ โ”‚Flow โ”‚ โ”‚Officialโ”‚ โ”‚ Mock โ”‚
269
+ โ”‚(v0.1)โ”‚ โ”‚ Veo โ”‚ โ”‚(tests)โ”‚
270
+ โ”‚ โ”‚ โ”‚(v0.3+) โ”‚ โ”‚ โ”‚
271
+ โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
272
+ โ”‚
273
+ โ”‚ POST /v1/flow/uploadImage
274
+ โ”‚ POST /v1/video:batchAsyncGenerateVideoText
275
+ โ”‚ POST /v1/video:batchCheckAsyncVideoGenerationStatus
276
+ โ”‚ PATCH /v1/flowWorkflows/{id}
277
+ โ–ผ
278
+ aisandbox-pa.googleapis.com (Google's private Flow API)
279
+ ```
280
+
281
+ The `Provider` interface keeps backends interchangeable. v0.1 ships `FlowProvider`. v0.3+ will add `OfficialVeoProvider` (uses [`googleapis/python-genai`](https://github.com/googleapis/python-genai) against `generativelanguage.googleapis.com`) โ€” same code path, swap with `--provider official`.
282
+
283
+ ### Auth strategy
284
+
285
+ `gflow-cli` doesn't reverse-engineer Google's OAuth flow. Instead it **piggybacks on Playwright's persistent context**: `gflow auth login` opens a Chromium window, you sign in normally, and the resulting cookie jar is saved to `~/.gflow-cli/profile_default/`. Subsequent commands launch a **headless** Playwright context using that profile and call REST endpoints via Playwright's HTTP client โ€” which auto-attaches the cookies. No tokens to refresh manually, no SSO scraping. Auth is the only browser interaction, and it's a one-time event.
286
+
287
+ ---
288
+
289
+ ## Use as a Claude Code (or other agent) skill
290
+
291
+ `gflow-cli` ships an installable [Claude Code Skill](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) at [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md).
292
+
293
+ **Install for Claude Code:**
294
+
295
+ ```bash
296
+ # Clone the repo, then symlink the skill into your Claude skills dir:
297
+ ln -s "$(pwd)/skills/gflow-cli" ~/.claude/skills/gflow-cli
298
+ ```
299
+
300
+ **Use in any other agent (Cursor, Codex, Gemini CLI, Aider, ...):** the SKILL.md is plain Markdown โ€” point your agent's context at it as a reference doc. The CLI is the same regardless of caller.
301
+
302
+ When the skill is loaded, an agent sees:
303
+ - When to invoke gflow-cli (the user wants to generate a Veo video, has Flow access, etc.)
304
+ - The full command surface
305
+ - How to handle auth (kick off `gflow auth login` once, then headless)
306
+ - Common error modes and fixes
307
+
308
+ ---
309
+
310
+ ## Development & TDD workflow
311
+
312
+ `gflow-cli` is **test-driven**. Every public function in `Provider` implementations starts as a **red test** that locks the contract before any production code is written. CI rejects any PR that lowers test coverage.
313
+
314
+ ```bash
315
+ # Setup
316
+ uv sync --extra dev
317
+ uv run playwright install chromium
318
+
319
+ # Quality checks (CI runs all three)
320
+ uv run ruff check src tests
321
+ uv run ruff format --check src tests
322
+ uv run pyright src
323
+
324
+ # Tests
325
+ uv run pytest -q # all tests
326
+ uv run pytest -q --cov=flow_cli # with coverage
327
+ uv run pytest tests/test_providers.py -q # one file
328
+ uv run pytest -k "i2v" -q # by keyword
329
+ ```
330
+
331
+ ### TDD discipline
332
+
333
+ 1. **Red** โ€” write a failing test that captures the new behaviour.
334
+ 2. **Green** โ€” write the minimum production code to make it pass.
335
+ 3. **Refactor** โ€” clean up, keep tests green.
336
+ 4. **Commit** โ€” small, atomic, with a descriptive message.
337
+
338
+ Each `Provider` method has a corresponding test file under `tests/`. New routes start as `pytest.raises(NotImplementedError)` markers, then move to behavioural tests with mocked HTTP, then to live integration tests behind a `@pytest.mark.live` opt-in. See [CONTRIBUTING.md](CONTRIBUTING.md) for full workflow.
339
+
340
+ ---
341
+
342
+ ## Releases
343
+
344
+ `gflow-cli` follows **[Semantic Versioning 2.0.0](https://semver.org/)** โ€” breaking changes bump MAJOR, new features bump MINOR, fixes bump PATCH.
345
+
346
+ ### Cadence
347
+
348
+ - **Alpha (`0.x.y`)**: rapid iteration. APIs may change between minor versions.
349
+ - **`1.0.0`**: stable surface. Breaking changes require MAJOR bump and migration notes.
350
+ - **Patch releases** ship as needed for bug fixes.
351
+
352
+ ### How releases work
353
+
354
+ 1. Update [`CHANGELOG.md`](CHANGELOG.md) with the version's changes (Keep-a-Changelog format).
355
+ 2. Bump `version` in `pyproject.toml`.
356
+ 3. Tag the commit:
357
+ ```bash
358
+ git tag v0.2.0
359
+ git push origin v0.2.0
360
+ ```
361
+ 4. The [`release.yml`](.github/workflows/release.yml) GitHub Action runs:
362
+ - Builds the wheel + sdist with `uv build`
363
+ - Publishes to PyPI via [Trusted Publishing](https://docs.pypi.org/trusted-publishers/) โ€” no API tokens stored
364
+ - Creates a GitHub Release with the changelog excerpt + built artifacts attached
365
+
366
+ Pre-release tags (`v*.*.*-rc*`, `v*.*.*-alpha*`, `v*.*.*-beta*`) auto-flag as pre-releases on GitHub. Install with `pip install --pre gflow-cli` or `uvx --from "gflow-cli==0.2.0a1" gflow`.
367
+
368
+ ---
369
+
370
+ ## License
371
+
372
+ [MIT License](LICENSE) ยฉ 2026 Flavio Oliva (`ffroliva`).
373
+
374
+ The full text is in [LICENSE](LICENSE). In short:
375
+
376
+ - โœ… Commercial use, modification, distribution, private use โ€” all allowed.
377
+ - โ— No warranty โ€” provided as-is.
378
+ - โ— Must include the original license + copyright in any copy/derivative.
379
+
380
+ Note that the **Google service** this tool talks to has its own terms (Google Labs Additional Terms, Google AI Ultra/Pro subscription terms, etc.). The MIT license here covers `gflow-cli`'s code only โ€” it does not grant any rights to Flow itself or to Veo model output. See [DISCLAIMER](DISCLAIMER.md).
381
+
382
+ ---
383
+
384
+ ## Acknowledgements
385
+
386
+ - [`edge-tts`](https://github.com/rany2/edge-tts) โ€” design inspiration for community SDKs over private cloud APIs.
387
+ - [`googleapis/python-genai`](https://github.com/googleapis/python-genai) โ€” the official Veo SDK that v0.3+ will alias.
388
+ - [Keysight Technologies โ€” *Google Labs โ€“ Flow AI with Veo3: A Network Traffic Analysis*](https://www.keysight.com/blogs/en/tech/nwvs/2025/08/04/google-flow-ai-har-analysis) โ€” independent traffic capture that helped validate the captured route patterns.
389
+
390
+ ---
391
+
392
+ ## Stats
393
+
394
+ [![GitHub stars](https://img.shields.io/github/stars/ffroliva/ggflow-cli?style=social)](https://github.com/ffroliva/ggflow-cli/stargazers)
395
+ [![GitHub forks](https://img.shields.io/github/forks/ffroliva/ggflow-cli?style=social)](https://github.com/ffroliva/ggflow-cli/network/members)
396
+ [![GitHub watchers](https://img.shields.io/github/watchers/ffroliva/ggflow-cli?style=social)](https://github.com/ffroliva/ggflow-cli/watchers)
397
+ [![GitHub issues](https://img.shields.io/github/issues/ffroliva/ggflow-cli)](https://github.com/ffroliva/ggflow-cli/issues)
398
+ [![GitHub pull requests](https://img.shields.io/github/issues-pr/ffroliva/ggflow-cli)](https://github.com/ffroliva/ggflow-cli/pulls)
399
+ [![GitHub last commit](https://img.shields.io/github/last-commit/ffroliva/ggflow-cli)](https://github.com/ffroliva/ggflow-cli/commits/main)
400
+ [![GitHub repo size](https://img.shields.io/github/repo-size/ffroliva/ggflow-cli)](https://github.com/ffroliva/ggflow-cli)
401
+ [![PyPI downloads](https://img.shields.io/pypi/dm/ggflow-cli.svg)](https://pypi.org/project/ggflow-cli/)
402
+ [![PyPI total downloads](https://img.shields.io/pypi/dt/ggflow-cli.svg)](https://pypi.org/project/ggflow-cli/)
403
+
404
+ If `gflow-cli` saves you time, please โญ the repo โ€” it's the cheapest way to support the project.
@@ -0,0 +1,20 @@
1
+ flow_cli/__init__.py,sha256=zoCb3kmJv6pqoBGCzPRc6D7eniv_4atmWX0HHKDIFlo,76
2
+ flow_cli/__main__.py,sha256=KmSUWn2Cyd7B93nGxQgewzHop34_6BpO02duIuCYd6I,120
3
+ flow_cli/auth.py,sha256=lvsVbOmUW0u0wEIXJ-5G_b7uRM029biXBUAP1UmLAvw,3034
4
+ flow_cli/cli.py,sha256=nd470oT4jEaftp25ylh4qV8OWvK_lY7gpiqxNTIrucw,6388
5
+ flow_cli/cli_video.py,sha256=qQ4eqhctplq-ZTdwiRxpmV5cvgo3pOZpTq7h_9-Almk,10423
6
+ flow_cli/config.py,sha256=6QQhm6TRCKK2wzT5_1jTkTvpEavm1o2ofckK7mUHqYg,3478
7
+ flow_cli/manifest.py,sha256=NWMd6gxD6qTy0O_lvu-p7nDaWo85i53VyyFbx0Xma5o,1957
8
+ flow_cli/paths.py,sha256=kv_MCkzSDkb_-MzrciiTjkr33UxJvRsgeenCrU0G5nY,2531
9
+ flow_cli/profile_store.py,sha256=SQzvPTfbgNBMWPDTPfgLsPY1_TG3GxRftaXv33oDbxE,7218
10
+ flow_cli/api/__init__.py,sha256=RIQF37v5cQswktTlbft_O-tibZqa2fvhNr32zzkBeZ4,478
11
+ flow_cli/api/client.py,sha256=Za0nXJYbgxaBHWGEPwgTnUjkEbp4dwiF0lWrKw2wjmo,9470
12
+ flow_cli/api/dto.py,sha256=grKas8lH5DzPPNQo9S2PfY0TX6WYPnGmwO7lZIXt5OY,4690
13
+ flow_cli/api/recaptcha.py,sha256=JFTEMntvfSnqmbgB97Xt6jrTN53cKoxUrU8r85Uwsog,3654
14
+ flow_cli/api/routes.py,sha256=wyeSTnntEUse_IvtpDDqVhBd5xaw4Co35P1Sm8XtdWA,1392
15
+ flow_cli/api/video.py,sha256=v6vXuZOx1wbsAmZTgRbQLiVspxwVVCeE4eA9mcGA3zs,3301
16
+ gflow_cli-0.2.0a1.dist-info/METADATA,sha256=T9AXRG1ctBA0WtqB9SDjEpuk-cRiKkDgJiDxjmWQCVk,19517
17
+ gflow_cli-0.2.0a1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
18
+ gflow_cli-0.2.0a1.dist-info/entry_points.txt,sha256=fweX5s6Qlxut9W8G6KqdZfV0le1jTjNm5-imVAs9RSk,69
19
+ gflow_cli-0.2.0a1.dist-info/licenses/LICENSE,sha256=RXKsW1RJKuutpvB5FzJkVAGmuXmW3KHpjETOK80R2To,1080
20
+ gflow_cli-0.2.0a1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ flow = flow_cli.cli:main
3
+ gflow = flow_cli.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Flavio Oliva (ffroliva)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.