From 0d44ad18652e24d9fb10f3da91bc3d851f2b1c21 Mon Sep 17 00:00:00 2001
From: Abdul Gafar Manuel Meque <17961065+mekjr1@users.noreply.github.com>
Date: Sun, 13 Sep 2026 16:19:46 -0600
Subject: [PATCH] feat(brand): add approved gflow-cli identity kit
---
README.md | 6 +-
brand/BRAND.md | 96 +++++++++++++++++++++
brand/LICENSES.md | 26 ++++++
brand/README.md | 60 +++++++++++++
brand/icons/app-icon.svg | 8 ++
brand/icons/favicon.svg | 8 ++
brand/icons/icon-192.svg | 8 ++
brand/icons/icon-512.svg | 8 ++
brand/logos/lockup-inverse.svg | 9 ++
brand/logos/lockup.svg | 9 ++
brand/logos/mark-inverse.svg | 8 ++
brand/logos/mark.svg | 8 ++
brand/logos/mono-black.svg | 8 ++
brand/logos/mono-white.svg | 8 ++
brand/logos/wordmark-inverse.svg | 4 +
brand/logos/wordmark.svg | 4 +
brand/og/og-default.png | Bin 0 -> 53062 bytes
brand/og/og-default.svg | 30 +++++++
brand/preview.html | 141 +++++++++++++++++++++++++++++++
brand/provenance.json | 70 +++++++++++++++
brand/tokens.css | 12 +++
brand/tokens.json | 117 +++++++++++++++++++++++++
docs/favicon.svg | 8 ++
docs/index.html | 40 +++++++--
docs/logo-mark.svg | 8 ++
docs/og-default.png | Bin 0 -> 53062 bytes
docs/og-default.svg | 30 +++++++
27 files changed, 723 insertions(+), 11 deletions(-)
create mode 100644 brand/BRAND.md
create mode 100644 brand/LICENSES.md
create mode 100644 brand/README.md
create mode 100644 brand/icons/app-icon.svg
create mode 100644 brand/icons/favicon.svg
create mode 100644 brand/icons/icon-192.svg
create mode 100644 brand/icons/icon-512.svg
create mode 100644 brand/logos/lockup-inverse.svg
create mode 100644 brand/logos/lockup.svg
create mode 100644 brand/logos/mark-inverse.svg
create mode 100644 brand/logos/mark.svg
create mode 100644 brand/logos/mono-black.svg
create mode 100644 brand/logos/mono-white.svg
create mode 100644 brand/logos/wordmark-inverse.svg
create mode 100644 brand/logos/wordmark.svg
create mode 100644 brand/og/og-default.png
create mode 100644 brand/og/og-default.svg
create mode 100644 brand/preview.html
create mode 100644 brand/provenance.json
create mode 100644 brand/tokens.css
create mode 100644 brand/tokens.json
create mode 100644 docs/favicon.svg
create mode 100644 docs/logo-mark.svg
create mode 100644 docs/og-default.png
create mode 100644 docs/og-default.svg
diff --git a/README.md b/README.md
index 218af20..2b303fa 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
[](https://labs.google/fx/tools/flow)
[](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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
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 @@
+
diff --git a/brand/og/og-default.png b/brand/og/og-default.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e3f0c004bb463f332868ba8fe419447e6dcd364
GIT binary patch
literal 53062
zcmeEu2T+sQ`!1lUfL)4$z$%I&O{8}#s7Mo}N>P*+0%+(EKm<_{SVid_37vrSP(=Y1
zNPs{hB}8g~01*NN5)$qg*3~Wi@7&+L|Cu{?=FZNJyArZSknFSN2wdaAxP_B9%9dUXx&KKk+5p;LOvN)LYi2e0laR^Gq;
z%^yEvli+;vkB$_)n3b3P!#|%p`te%umG@h`@SyF;zXmaSqAAn%FN6AX
zbQ~pHKEUwoUuW>+!`scccW*hi|35kAYR9ldg#0`32W`6#Y#H~{hqnyde-ihtb0Tc3
zq}pm|Ku$FO2TAo`^l`ZyDnWM^)M_YwNEcE|8oBtc4`tOYS
zuea)dL&|KKb6exk|9g|$Vm|<|C-R>l+<%hITZipGf$y#Ia!VBXuXE!6smYZ&?l3#q
zKK@nu)$E>sR}zPAk8^BWh0kc0*#8GhCaV9J6?lux2iU=Xl3xECmB8FM`AvbKt0MKU
z1&2-Ij|v7
zQKxy9iD2#DR+6_+=FdHSZ#%DN+s}Z1=Dzp?KsidL^nZ;)>F3h2Nz6q3Os!v|0CvHD
z!yFIV9{4Lw{<&HHk3ypNpC-kRiLm}PFu(Hi=i@e`z)|v}{sWsy^H+ZUTCD%Y?Emjr
z`=2BG-`M72qaAr>o#ie#jE5501>y>Cfaz30W;gI}&2@}QukZPlV?Q?>Fyr|J?=vNS
zPOrhC%o|BeOB8R-$a_e9CMH7r+(eexPW?=b$0QX-vf{?mH|Kgj@$xh1~
za+UYnV+Uy`|I3fc6MiQ?Npu9qh-zy6Pu@-$w&AZ}DX`f9?J9BqwH^MN!rJgRQl?_F
zVS`mJ{db40%fCtltld&wx1g`_t%Oxp@)iy3w;egrbo|FT;^)Q$@;TZX)K#5Fh>PmSY&SF9RpN|Q9{`eS_V>B+y$*js+ute=QUfZz7+^S@
zZg}X=U-eRr%oJi;v7D6tH>z|7RNRWyM2W@Z8F3%ZK0O!z>#1kk=4ABM*2)PHi;o^Z*&a}2
z4VAj;6MPFEC<6HqSru<;oXB#muwNG~X8W(ASARI1hT2>I_g2h=qlKEeUdnZXO4!}b2UN=ZVR
zc9Skf71RU1E6{b0Q@(zTRgQgx8r!Iel{G#a(GyKK-O;o+Mp|rH+att2zGx$K>U}NXR%MS+@n#GlKM*lN6)b6F8RLghHw^fFY?~A
ztaPcF?x(GX?l4oto$Ejca(j@Wq0I69wMss(DccCXVBdyJVc%O8;G_1Mn~2ib?EtK+~MRR*SLn;**##m9Wa9)95pGuc$P80+^l$YpWx_${W)UFH
z2{fwX*&5AoitmdjEk#6aj&uN&f492LKxt$M1aCaB;=A;Iai98}|98(zhrEP5XM0;*
zhTomE_hgJkYZm@io&9SSrR7ruJUucMQ3+5QG`THk&88_cVu3hl0vWD9?@Z`(_2
zWwEBf&$hN3tFh;d+$eZqk489K6i8r_w3M9?q9P@$!<&o;w*TfITGh4STW_h5<`2;y
zXYX1*YEBWEmwLsDdAS_5Q10k0r^tR9$v%@ZN0bMt&FOfjEcxwr+OA)nw2?{g9%#fw
zT>q%tTS2Q~w*dVdb-icI5Ilc%?O*(3zr3N$yGPu!&u
z;f*(FXw@C%I7Pq09Qtk5RXozO%inJ|72WDpLv(YX6qb1sF;AsZ72SsK4*Lh?nSUR>SmrUkbESEX9mi=DyxhFb
zr+Zwn?-H6i7uaIGG)U8vurWTfGA
z07;sJ#@pu?~sLA!mVW
z(Q0%0@-HaLZ{>%Z`#l^k_LW&ir@{il@@r_yCrOGnB&0C-R*k-R~M-nbLN
zEDk*GR&(xefJ2*?&Dj25wmg+R6M|8@!
zNz~gb9ZMqZ4arIC78`f0(LSZWr`ATgX7)Oku3J8TZt6a||2f07@@h@t}YBDm5YA>!nQ<#3N
zm%X@5OiAoHD<&9JyvP5t<@7@ybyfc~?+n3%p@$M3J)$9+oE>#8`*f4Jd)_*|EsbX*
zfC@A$=bUW#Ie1Z!sr<81Es+9>2`bw1-|I-2Qx#;jgG3rB=#%2{S1b`I-+u*Ti9mF#
zn_e4T$;(NLoRSv`8qGV-W9!5}fmkN0(||&+lsT5=Kq7ybF~z+{f#*b}iLpiW$)xny
z$9p9~fiybh>9)caona2d#s?6#EC&}h;Nj5XlXj^+E@)~EIwKV}G9T14-lj&{01Drh
zd+9da{N0VH`i7TrU{tF5WJzL$h@aqc4Hhf5n>7|w$m#HMIZ?YevieE1Zp!>xMXaRd
zJR-V3T621OOd$xfs
z4$VE@ry*w~lw@CgMCog90siS$>EXWYP-~>>(@+9k$d2P$vf!`3Wz1ISela^k5$DY5
zxAU50$h_x>dzI=zFU_i|9DLtme1%tPGnCA=4I};bz1O)bNPXc
zEwc0Fxo)@Rq3wO>H#-pJsj4k<$j{aH^#z@+-d-abreOqE!|m~i6Z
zl4yST+DdN4XCv4Et*`usbke+Nd@ecpSImFt3>+ml5t{X(yba6n@~_?(Y~0YW
z&M=K8l^lX^sucj5B4<3Ar-a$TDij*zT>m!YMi`oE{c^iwqDGDe7mwd-F&i;Fy{4M(ronke4c6eA_*Jw0z!B04-
zF0*T=nYHxy3a5L9<<4uJ2+ve&NPDbgF$!*yRVirvWPn>#IZc(yC_R>DS`~N+!U&5C
z4M=V-xjLLQ95>H6jAGFtlw-erU*nquFmwxw@D|EwiA$Bz!WP*Gzrp(ZcaL5aww;#p
zv97XjtBSIatk=75^lh|K?{ySP5$~ruPR0V