diff --git a/README.md b/README.md index 218af20..2b303fa 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Google Flow](https://img.shields.io/badge/Google_Flow-Imagen_4_&_Veo_3.1-4285F4?logo=google)](https://labs.google/fx/tools/flow) [![MCP v2](https://img.shields.io/badge/MCP_v2-Supported-7057ff)](https://modelcontextprotocol.io) -**gflow** is a single-binary CLI and Model Context Protocol (MCP) server for generative media: image, video, audio, and chat. +**gflow-cli** is a single-binary CLI and Model Context Protocol (MCP) server for generative media: image, video, audio, and chat. Its executable/CLI command is `gflow`. - **Image Generation:** Gemini Imagen 3 and Google Flow Imagen 4 (Pro and Lite models). - **Video Generation:** Gemini Veo, MiniMax H3 (768P and 2K), and Google Flow Veo 3.1. @@ -190,7 +190,7 @@ TIME TYPE ID PROMPT LOCAL PA ## Model Context Protocol (MCP) -**gflow** includes a native stdio MCP server for AI coding assistants and desktop agents: +**gflow-cli** includes a native stdio MCP server for AI coding assistants and desktop agents through its `gflow` executable/CLI command: ### Claude Desktop Add to your `claude_desktop_config.json`: @@ -283,7 +283,7 @@ Google Flow secures generative APIs with **reCAPTCHA Enterprise v3**. Headless browsers and fresh automation profiles often score poorly, causing Google to return `403 Forbidden`. -`gflow` uses a two-tier architecture: +The **gflow-cli** project's `gflow` executable/CLI command uses a two-tier architecture: 1. **Lightweight Extension Bridge**: Runs inside your everyday, logged-in browser session on `labs.google/fx/tools/flow`. 2. **Authentic reCAPTCHA Execution**: When a generation command is issued, diff --git a/brand/BRAND.md b/brand/BRAND.md new file mode 100644 index 0000000..70216a3 --- /dev/null +++ b/brand/BRAND.md @@ -0,0 +1,96 @@ +# gflow-cli Brand + +Status: approved + +This document defines the public identity for the gflow-cli project. The files +in this directory are the canonical source assets. + +## Identity + +- Formal product name: **gflow-cli** +- CLI command: **`gflow`** +- Mark name: **Supersonic Stream Ribbons** +- Primary tile: **Cockpit Obsidian** + +Use `gflow-cli` when naming the project, repository, package, or brand. Use +`gflow` only for the executable and commands such as `gflow image`. + +## Mark Construction + +The mark uses a `0 0 100 100` view box and these fixed elements: + +- Ring: circle at `50,38`, radius `16`, no fill, 7-unit stroke. +- Stream: `M66 38 L66 64 C66 76 54 82 40 82 C28 82 22 74 22 66`, + no fill, 7-unit stroke, round caps and joins. +- Velocity accent: `M50 22 C58 22 66 30 66 38`, no fill, 3-unit stroke, + round caps. +- Endpoint: circle at `66,38`, radius `4.5`. + +Do not rotate, skew, crop, rearrange, or redraw these elements. Keep the ring +and stream as one color and retain the contrast between the main ribbon and +the velocity accent. + +## Color + +| Token | Value | Use | +| --- | --- | --- | +| Supersonic Cyan | `#00E5FF` | Primary ribbon on Cockpit Obsidian or another verified dark surface | +| Accessible Cyan Dark | `#007C91` | Primary ribbon on white and light surfaces | +| Cockpit Obsidian | `#080B10` | Primary tile and dark field | +| Signal White | `#FFFFFF` | Inverse wordmark, velocity accent, and endpoint | + +Supersonic Cyan is not approved for text or fine detail on white. Use +Accessible Cyan Dark for the light-surface variant. On light surfaces, the +velocity accent and endpoint use Cockpit Obsidian. + +## Variants + +- `logos/mark.svg`, `logos/lockup.svg`, and `logos/wordmark.svg` are for light + surfaces. +- `logos/mark-inverse.svg`, `logos/lockup-inverse.svg`, and + `logos/wordmark-inverse.svg` are for Cockpit Obsidian or similarly dark + surfaces. +- `logos/mono-black.svg` and `logos/mono-white.svg` are one-color fallbacks for + processes that cannot reproduce the two-color mark. +- Files under `icons/` place the inverse mark on the approved Cockpit Obsidian + tile. + +The wordmark is always lowercase and hyphenated: `gflow-cli`. It uses the +existing Public Sans display family at weight 800, with Arial and a generic +sans-serif as fallbacks. + +## Spacing And Size + +Keep clear space equal to at least 8% of the mark width on every side. Do not +place other type, rules, or graphics inside that area. + +- Minimum standalone mark size: 24 CSS pixels. +- Minimum lockup width: 120 CSS pixels. +- Below 120 CSS pixels, use the standalone mark and an accessible text label + instead of compressing the lockup. +- Favicons are exempt from the standalone minimum and use the supplied tiled + artwork. + +## Accessibility + +- Choose the light or inverse asset for the surface; do not recolor it ad hoc. +- When the logo is the only content of a link, provide the accessible name + `gflow-cli` or `gflow-cli home`. +- When visible text already identifies the product, treat the adjacent mark as + decorative with an empty alternative. +- Do not put essential information only in the mark or its color. + +## Product Copy + +Keep public copy tied to implemented behavior and the current README. The +current provider names are Gemini, MiniMax, and Google Flow. Command examples +must use implemented `gflow` subcommands. Do not imply that gflow-cli is an +official product of, endorsed by, or affiliated with any provider. + +## Canonical Assets And Projections + +`brand/` is canonical. The copies in `docs/favicon.svg`, `docs/logo-mark.svg`, +`docs/og-default.svg`, and `docs/og-default.png` are deployment projections for +GitHub Pages. Update a canonical asset and its projection together. The PNG is +the social-metadata asset and is generated from `brand/og/og-default.svg` using +the pinned command documented in `README.md`. diff --git a/brand/LICENSES.md b/brand/LICENSES.md new file mode 100644 index 0000000..697db18 --- /dev/null +++ b/brand/LICENSES.md @@ -0,0 +1,26 @@ +# Brand Asset Licensing + +## Project-Created Assets + +The SVG and PNG artwork, token files, documentation, and preview in `brand/` +were created for gflow-cli and are distributed under the repository's root MIT +License. + +The MIT License grants copyright permissions for these files. It does not grant +permission to misrepresent the source of the project or imply endorsement by a +third party. + +## Typography + +No font files are included in this kit. The wordmark SVGs declare Public Sans +with Arial and a generic sans-serif fallback. Public Sans is available under +the SIL Open Font License 1.1 from its upstream distributor. The documentation +site already loads it independently; the brand assets do not bundle or fetch +it. + +## Third-Party Names + +Google, Gemini, Google Flow, MiniMax, and other third-party names remain the +property of their respective owners. Their appearance in factual provider copy +does not indicate sponsorship, endorsement, or affiliation. No third-party +logos or provider artwork are included in this kit. diff --git a/brand/README.md b/brand/README.md new file mode 100644 index 0000000..4a6f74a --- /dev/null +++ b/brand/README.md @@ -0,0 +1,60 @@ +# gflow-cli Brand Kit + +This directory contains the approved, dependency-free brand assets for +gflow-cli. Open `preview.html` in a browser to inspect the complete kit. + +## Contents + +| Path | Purpose | +| --- | --- | +| `BRAND.md` | Naming, construction, color, spacing, accessibility, and copy rules | +| `LICENSES.md` | Licensing and third-party attribution notes | +| `provenance.json` | Machine-readable identity source and asset inventory | +| `tokens.json` | Portable visual tokens and complete fixed mark geometry | +| `tokens.css` | CSS custom-property projection of visual styling tokens; complete geometry remains in JSON | +| `logos/` | Light, inverse, lockup, wordmark, and monochrome SVGs | +| `icons/` | Tiled favicon and app-icon SVGs | +| `og/og-default.svg` | Canonical editable 1200 by 630 social image source | +| `og/og-default.png` | Canonical 1200 by 630 raster social image | +| `preview.html` | Local visual inventory; no build step or network access required | + +## Choosing An Asset + +- Use `logos/lockup.svg` on white and light backgrounds. +- Use `logos/lockup-inverse.svg` on Cockpit Obsidian and dark backgrounds. +- Use a standalone mark only when the product name appears next to it or an + accessible name is supplied. +- Use the files in `icons/` without adding another background tile. +- Use monochrome artwork only when the output process requires one color. +- Use `og/og-default.png` for social metadata; regenerate it from the SVG source. + +All SVGs are standalone and have no linked images or embedded credentials. +The kit introduces no runtime or package dependency. + +## Documentation Projections + +The GitHub Pages site consumes deployment copies so `docs/` remains a complete +publishable directory: + +| Canonical file | Documentation projection | +| --- | --- | +| `icons/favicon.svg` | `../docs/favicon.svg` | +| `logos/mark.svg` | `../docs/logo-mark.svg` | +| `og/og-default.svg` | `../docs/og-default.svg` | +| `og/og-default.png` | `../docs/og-default.png` | + +Keep each pair identical whenever the canonical source changes. + +## Regenerating The Social PNG + +From the repository root, use the pinned renderer and then copy the canonical +PNG to its documentation projection: + +```powershell +npx --yes sharp-cli@5.2.0 -i brand/og/og-default.svg -o brand/og/og-default.png -f png -c 9 +Copy-Item -LiteralPath brand/og/og-default.png -Destination docs/og-default.png +``` + +The output must remain exactly `1200 x 630`. After changing the source or +renderer version, render a fresh PNG and run the brand checks to verify its +geometry and source-to-projection parity. diff --git a/brand/icons/app-icon.svg b/brand/icons/app-icon.svg new file mode 100644 index 0000000..da134f2 --- /dev/null +++ b/brand/icons/app-icon.svg @@ -0,0 +1,8 @@ + + gflow-cli app icon + + + + + + diff --git a/brand/icons/favicon.svg b/brand/icons/favicon.svg new file mode 100644 index 0000000..1b8990c --- /dev/null +++ b/brand/icons/favicon.svg @@ -0,0 +1,8 @@ + + gflow-cli icon + + + + + + diff --git a/brand/icons/icon-192.svg b/brand/icons/icon-192.svg new file mode 100644 index 0000000..ca73d8d --- /dev/null +++ b/brand/icons/icon-192.svg @@ -0,0 +1,8 @@ + + gflow-cli 192 pixel icon + + + + + + diff --git a/brand/icons/icon-512.svg b/brand/icons/icon-512.svg new file mode 100644 index 0000000..3549f2f --- /dev/null +++ b/brand/icons/icon-512.svg @@ -0,0 +1,8 @@ + + gflow-cli 512 pixel icon + + + + + + diff --git a/brand/logos/lockup-inverse.svg b/brand/logos/lockup-inverse.svg new file mode 100644 index 0000000..bf3f190 --- /dev/null +++ b/brand/logos/lockup-inverse.svg @@ -0,0 +1,9 @@ + + gflow-cli inverse lockup + The inverse Supersonic Stream Ribbons mark beside the gflow-cli wordmark. + + + + + gflow-cli + diff --git a/brand/logos/lockup.svg b/brand/logos/lockup.svg new file mode 100644 index 0000000..6d4a3e5 --- /dev/null +++ b/brand/logos/lockup.svg @@ -0,0 +1,9 @@ + + gflow-cli + The Supersonic Stream Ribbons mark beside the gflow-cli wordmark. + + + + + gflow-cli + diff --git a/brand/logos/mark-inverse.svg b/brand/logos/mark-inverse.svg new file mode 100644 index 0000000..9c18ef5 --- /dev/null +++ b/brand/logos/mark-inverse.svg @@ -0,0 +1,8 @@ + + gflow-cli inverse Supersonic Stream Ribbons mark + A cyan circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mark.svg b/brand/logos/mark.svg new file mode 100644 index 0000000..fe5d78a --- /dev/null +++ b/brand/logos/mark.svg @@ -0,0 +1,8 @@ + + gflow-cli Supersonic Stream Ribbons mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mono-black.svg b/brand/logos/mono-black.svg new file mode 100644 index 0000000..44b9dac --- /dev/null +++ b/brand/logos/mono-black.svg @@ -0,0 +1,8 @@ + + gflow-cli monochrome black mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/mono-white.svg b/brand/logos/mono-white.svg new file mode 100644 index 0000000..ce0640a --- /dev/null +++ b/brand/logos/mono-white.svg @@ -0,0 +1,8 @@ + + gflow-cli monochrome white mark + A circular ribbon turns downward into a flowing stream. + + + + + diff --git a/brand/logos/wordmark-inverse.svg b/brand/logos/wordmark-inverse.svg new file mode 100644 index 0000000..04ab06c --- /dev/null +++ b/brand/logos/wordmark-inverse.svg @@ -0,0 +1,4 @@ + + gflow-cli inverse wordmark + gflow-cli + diff --git a/brand/logos/wordmark.svg b/brand/logos/wordmark.svg new file mode 100644 index 0000000..7bb0eb0 --- /dev/null +++ b/brand/logos/wordmark.svg @@ -0,0 +1,4 @@ + + gflow-cli wordmark + gflow-cli + diff --git a/brand/og/og-default.png b/brand/og/og-default.png new file mode 100644 index 0000000..0e3f0c0 Binary files /dev/null and b/brand/og/og-default.png differ diff --git a/brand/og/og-default.svg b/brand/og/og-default.svg new file mode 100644 index 0000000..a909448 --- /dev/null +++ b/brand/og/og-default.svg @@ -0,0 +1,30 @@ + + gflow-cli + Generative media in your terminal with a Go CLI and MCP server for Gemini, MiniMax, and Google Flow. + + + + + + + + + + + + + + + + gflow-cli + Generative media in your terminal. + Single-binary Go CLI + stdio MCP server + Gemini / MiniMax / Google Flow + + gflow image + gflow video + gflow audio + gflow chat + + github.com/xibodev/gflow-cli + diff --git a/brand/preview.html b/brand/preview.html new file mode 100644 index 0000000..b05c721 --- /dev/null +++ b/brand/preview.html @@ -0,0 +1,141 @@ + + + + + + gflow-cli Brand Kit + + + + +
+

Approved identity / gflow-cli

+ gflow-cli +

Formal name gflow-cli. Command gflow. Mark Supersonic Stream Ribbons.

+
+
+
+

Primary Lockups

+
+
+
gflow-cli light-surface lockup
+

logos/lockup.svg

+
+
+
gflow-cli dark-surface lockup
+

logos/lockup-inverse.svg

+
+
+
+
+

Marks

+
+
+
Supersonic Stream Ribbons light-surface mark
+

logos/mark.svg

+
+
+
Supersonic Stream Ribbons dark-surface mark
+

logos/mark-inverse.svg

+
+
+
+
+

Wordmarks

+
+
+
gflow-cli light-surface wordmark
+

logos/wordmark.svg

+
+
+
gflow-cli dark-surface wordmark
+

logos/wordmark-inverse.svg

+
+
+
+
+

Color Tokens

+
+
Supersonic Cyan#00E5FF
+
Accessible Cyan Dark#007C91
+
Cockpit Obsidian#080B10
+
Signal White#FFFFFF
+
+
+
+

Application Icons

+
+
gflow-cli favicon

favicon.svg

+
gflow-cli app icon

app-icon.svg

+
gflow-cli 192 pixel icon

icon-192.svg

+
gflow-cli 512 pixel icon

icon-512.svg

+
+
+
+

Monochrome

+
+
Monochrome black mark

logos/mono-black.svg

+
Monochrome white mark

logos/mono-white.svg

+
+
+
+

Default Social Image

+ gflow-cli default social image +

og/og-default.png, generated from og/og-default.svg / 1200 x 630

+
+
+ + diff --git a/brand/provenance.json b/brand/provenance.json new file mode 100644 index 0000000..86c5c99 --- /dev/null +++ b/brand/provenance.json @@ -0,0 +1,70 @@ +{ + "schemaVersion": 1, + "identity": { + "formalName": "gflow-cli", + "command": "gflow", + "markName": "Supersonic Stream Ribbons", + "status": "approved" + }, + "source": { + "type": "approved-identity-brief", + "owner": "xibodev", + "repository": "https://github.com/xibodev/gflow-cli" + }, + "canonical": { + "guidelines": "BRAND.md", + "tokens": [ + "tokens.json", + "tokens.css" + ], + "logos": [ + "logos/mark.svg", + "logos/mark-inverse.svg", + "logos/lockup.svg", + "logos/lockup-inverse.svg", + "logos/wordmark.svg", + "logos/wordmark-inverse.svg", + "logos/mono-black.svg", + "logos/mono-white.svg" + ], + "icons": [ + "icons/favicon.svg", + "icons/app-icon.svg", + "icons/icon-192.svg", + "icons/icon-512.svg" + ], + "social": [ + "og/og-default.svg", + "og/og-default.png" + ] + }, + "derivations": [ + { + "source": "og/og-default.svg", + "target": "og/og-default.png", + "tool": "sharp-cli", + "version": "5.2.0", + "command": "npx --yes sharp-cli@5.2.0 -i brand/og/og-default.svg -o brand/og/og-default.png -f png -c 9", + "width": 1200, + "height": 630 + } + ], + "projections": [ + { + "source": "icons/favicon.svg", + "target": "../docs/favicon.svg" + }, + { + "source": "logos/mark.svg", + "target": "../docs/logo-mark.svg" + }, + { + "source": "og/og-default.svg", + "target": "../docs/og-default.svg" + }, + { + "source": "og/og-default.png", + "target": "../docs/og-default.png" + } + ] +} diff --git a/brand/tokens.css b/brand/tokens.css new file mode 100644 index 0000000..ee4e57a --- /dev/null +++ b/brand/tokens.css @@ -0,0 +1,12 @@ +:root { + --gflow-color-supersonic-cyan: #00e5ff; + --gflow-color-accessible-cyan-dark: #007c91; + --gflow-color-cockpit-obsidian: #080b10; + --gflow-color-signal-white: #ffffff; + --gflow-mark-ribbon-stroke-width: 7; + --gflow-mark-accent-stroke-width: 3; + --gflow-mark-endpoint-radius: 4.5; + --gflow-mark-minimum-screen-size: 24px; + --gflow-wordmark-font-family: "Public Sans", Arial, sans-serif; + --gflow-wordmark-font-weight: 800; +} diff --git a/brand/tokens.json b/brand/tokens.json new file mode 100644 index 0000000..d6fbe69 --- /dev/null +++ b/brand/tokens.json @@ -0,0 +1,117 @@ +{ + "name": "gflow-cli", + "version": "1.0.0", + "color": { + "supersonicCyan": { + "$type": "color", + "$value": "#00E5FF", + "$description": "Primary ribbon on approved dark surfaces." + }, + "accessibleCyanDark": { + "$type": "color", + "$value": "#007C91", + "$description": "Accessible ribbon color on white and light surfaces." + }, + "cockpitObsidian": { + "$type": "color", + "$value": "#080B10", + "$description": "Primary tile and inverse background." + }, + "signalWhite": { + "$type": "color", + "$value": "#FFFFFF", + "$description": "Inverse velocity accent, endpoint, and wordmark." + } + }, + "mark": { + "viewBox": { + "$type": "string", + "$value": "0 0 100 100" + }, + "ring": { + "centerX": { + "$type": "number", + "$value": 50 + }, + "centerY": { + "$type": "number", + "$value": 38 + }, + "radius": { + "$type": "number", + "$value": 16 + } + }, + "stream": { + "path": { + "$type": "string", + "$value": "M66 38 L66 64 C66 76 54 82 40 82 C28 82 22 74 22 66" + }, + "lineCap": { + "$type": "string", + "$value": "round" + }, + "lineJoin": { + "$type": "string", + "$value": "round" + } + }, + "velocityAccent": { + "path": { + "$type": "string", + "$value": "M50 22 C58 22 66 30 66 38" + }, + "lineCap": { + "$type": "string", + "$value": "round" + } + }, + "endpoint": { + "centerX": { + "$type": "number", + "$value": 66 + }, + "centerY": { + "$type": "number", + "$value": 38 + }, + "radius": { + "$type": "number", + "$value": 4.5 + } + }, + "ribbonStrokeWidth": { + "$type": "number", + "$value": 7 + }, + "accentStrokeWidth": { + "$type": "number", + "$value": 3 + }, + "minimumScreenSize": { + "$type": "dimension", + "$value": { + "value": 24, + "unit": "px" + } + } + }, + "wordmark": { + "fontFamily": { + "$type": "fontFamily", + "$value": [ + "Public Sans", + "Arial", + "sans-serif" + ] + }, + "fontWeight": { + "$type": "fontWeight", + "$value": 800 + }, + "text": { + "$type": "string", + "$value": "gflow-cli" + } + } +} diff --git a/docs/favicon.svg b/docs/favicon.svg new file mode 100644 index 0000000..1b8990c --- /dev/null +++ b/docs/favicon.svg @@ -0,0 +1,8 @@ + + gflow-cli icon + + + + + + diff --git a/docs/index.html b/docs/index.html index b8256b8..fadc7dc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,8 +3,26 @@ - gflow: AI Media CLI & MCP Server + gflow-cli: AI Media CLI & MCP Server + + + + + + + + + + + + + + + + + + @@ -28,6 +46,11 @@ paper: '#ffffff', canvas: '#f8fafc', terminal: '#090d16', + brand: { + cyan: '#00E5FF', + accessible: '#007C91', + obsidian: '#080B10', + }, } } } @@ -73,12 +96,13 @@
-
- - gflow +
+ + + - / - v1.1.0 + +