-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrand.toml
More file actions
242 lines (208 loc) · 11.8 KB
/
Copy pathbrand.toml
File metadata and controls
242 lines (208 loc) · 11.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
# Audiophore brand configuration
# ──────────────────────────────────────────────────────────────────────
#
# This is the canonical brand-asset source of truth. Edit here and
# re-run `make` (or `python scripts/build.py`) to regenerate every
# downstream artifact: SVGs, PNGs, favicons, BRANDING.md tables.
#
# CHANGES HERE PROPAGATE EVERYWHERE. Use thoughtfully.
[meta]
name = "Audiophore"
slug = "audiophore"
tagline = "A real-time bridge between Synesthesia VJ software and the lighting ecosystem"
url = "https://audiophore.dev"
# ──────────────────────────────────────────────────────────────────────
# Color palette
#
# Each row of the symbol grid corresponds to an FFT band Audiophore
# consumes. The (band, color, hex) mapping is the brand contract:
# changing it changes both the assets AND the BRANDING.md docs.
# ──────────────────────────────────────────────────────────────────────
[colors.spectrum]
# Top row → bottom row of the grid mark
highs = "#00E5FF" # cyan
mid_highs = "#00D4C8" # teal (also primary brand accent)
mids = "#3DD68C" # green
mid_lows = "#FFB020" # amber
bass = "#FF2D9C" # magenta
[colors.neutrals]
ink = "#1a1f2e" # primary text on light backgrounds
paper = "#FFFFFF" # primary text on dark backgrounds
mute = "#8b95a8" # secondary text, captions
wash_light = "#f8f9fa" # neutral light surface
wash_dark = "#0a0e1a" # neutral dark surface
[colors.semantics]
# Friendly names → which palette entry to use.
# Edit BRANDING.md descriptions only by editing this section.
primary_accent = "mid_highs" # the single "brand color" when only one is allowed
# ──────────────────────────────────────────────────────────────────────
# Token export
#
# Downstream consumers (the website, hardware render/CAD scripts) should
# reference the palette, not hand-copy hexes. `make tokens` emits
# tokens/brand.css (:root custom properties) + tokens/brand.json straight
# from [colors.*] above — change a hex there and both regenerate.
# ──────────────────────────────────────────────────────────────────────
[tokens]
css_prefix = "ap" # CSS custom-property namespace → --ap-highs, --ap-ink, …
# ──────────────────────────────────────────────────────────────────────
# Symbol layout
#
# A 5x5 grid in a 320-unit viewBox. Pixels are 56 units, gaps 8 units.
# This produces 5*56 + 4*8 = 312 used + 8 outer margin = 320.
# ──────────────────────────────────────────────────────────────────────
[symbol]
viewbox = 320
pixel_size = 56
pixel_gap = 8
pixel_radius = 6 # corner radius for individual cells
# Accessibility text emitted as <desc> in the symbol SVG.
description = "RGB pixel grid where each row represents an FFT frequency band — bass at the bottom (magenta), highs at the top (cyan). The lit pixels form a stylized phi."
# Row → color mapping (top to bottom = highs to bass)
# Each row references a key in [colors.spectrum].
[symbol.rows]
0 = "highs"
1 = "mid_highs"
2 = "mids"
3 = "mid_lows"
4 = "bass"
# Which cells are lit in each row (0 = off, 1 = full opacity).
# Together they form a stylized phi (φ).
# Layout (X = lit, . = off):
# . . X . .
# . X X X .
# X X X X X
# . X X X .
# . . X . .
[symbol.layout]
rows = [
[0, 0, 1, 0, 0],
[0, 1, 1, 1, 0],
[1, 1, 1, 1, 1],
[0, 1, 1, 1, 0],
[0, 0, 1, 0, 0],
]
# Per-row opacity ramp for visual depth.
# Center column always 1.0; edges fade for a subtle 3D feel.
# Indexed by distance-from-center within a row.
[symbol.opacity]
distance_0 = 1.0
distance_1 = 0.85
distance_2 = 0.6
# ──────────────────────────────────────────────────────────────────────
# CAD export
#
# A flattened symbol for OpenSCAD `import()` / `linear_extrude`. The
# canonical symbol is 13 separate, multi-color, partial-opacity <rect>s —
# meaningless and awkward in CAD. This emits the lit cells as ONE flat,
# opacity-free <path> at the same 320-unit viewBox, so the hardware repo
# can import the canonical mark instead of hand-rebuilding it in SCAD.
# ──────────────────────────────────────────────────────────────────────
[cad]
symbol_color = "ink" # flat fill (color is inert in CAD; any legal value)
# ──────────────────────────────────────────────────────────────────────
# Wordmark
# ──────────────────────────────────────────────────────────────────────
[wordmark]
text = "audiophore"
font_family = "Poppins"
font_weight = "Medium"
# The wordmark glyph paths are derived from this exact font, vendored in-repo
# (OFL) so the build is fully reproducible — no system font install, no distro
# drift. Relative paths resolve against the repo root; override with $POPPINS_TTF.
font_path = "fonts/Poppins-Medium.ttf"
# How the wordmark is colored:
# Index range [0:split] is "ink color" (or the dark equivalent)
# Index range [split:] is "accent color"
# This emphasizes the "-phore" etymology
split = 5 # "audio" | "phore"
# ──────────────────────────────────────────────────────────────────────
# Lockup (symbol + wordmark side-by-side)
# ──────────────────────────────────────────────────────────────────────
[lockup]
gap = 60 # space between symbol and wordmark
wordmark_cap_target = 200 # cap-height of wordmark when laid out next to a 320 symbol
# ──────────────────────────────────────────────────────────────────────
# Output sizes
#
# Standard dimensions for raster exports. Add new entries here, run
# the build, and the new sizes appear automatically.
# ──────────────────────────────────────────────────────────────────────
[sizes.symbol]
px = [28, 64, 128, 256, 460, 512, 1024]
[sizes.lockup]
px = [400, 800, 1200, 2400]
[sizes.wordmark]
px = [200, 400, 800]
[sizes.favicon]
px = [16, 32, 48, 64, 180, 192, 512]
ico_sizes = [16, 32, 48, 64] # multi-resolution .ico bundle
# ──────────────────────────────────────────────────────────────────────
# Open Graph / social-share cards
#
# The image link-unfurlers (Slack, Discord, iMessage, Twitter) and
# GitHub's repo/org social-preview pull. The dark-bg lockup centered on
# the dark wash, with safe margins. `make og` renders one PNG per size.
# ──────────────────────────────────────────────────────────────────────
[og]
background = "wash_dark" # full-bleed background color (palette key)
lockup_variant = "dark_bg" # which lockup treatment to center
margin_ratio = 0.14 # safe padding as a fraction of the shorter axis
[og.sizes]
# name = [width, height]
web = [1200, 630] # og:image / Twitter summary_large_image
github = [1280, 640] # GitHub repo + org social preview (2:1)
# ──────────────────────────────────────────────────────────────────────
# Web app manifest + maskable icons
#
# `make manifest` emits a site.webmanifest template plus maskable-safe
# icons (symbol padded so Android's circular/squircle mask never clips
# the phi). The plain favicon-192/512 cover purpose:"any"; these cover
# purpose:"maskable".
# ──────────────────────────────────────────────────────────────────────
[manifest]
name = "Audiophore"
short_name = "Audiophore"
theme_color = "wash_dark" # palette key → browser UI / address bar
background_color = "wash_dark" # palette key → splash background
display = "standalone"
maskable_padding = 0.2 # safe-zone padding as a fraction of the icon
maskable_sizes = [192, 512]
# ──────────────────────────────────────────────────────────────────────
# Variants (which color treatments to generate for which assets)
# ──────────────────────────────────────────────────────────────────────
[variants]
# Each entry produces one set of files. The values map roles → palette keys.
[variants.color]
purpose = "Web, app UIs, social, GitHub avatar, slides — wherever full color is available and renders correctly"
# When color = "color", spectrum is used naturally (rows colored per [symbol.rows])
mode = "spectrum"
ink = "ink"
accent = "mid_highs"
[variants.dark_bg]
# dark_bg is a background-tuning of the canonical mark, not a standalone
# "use when" choice — it's omitted from the BRANDING.md variants table
# (dark surfaces are covered by the usage prose instead).
show_in_table = false
purpose = "Canonical mark, but tuned for dark surfaces (the ink color flips to paper)."
mode = "spectrum"
ink = "paper"
accent = "mid_highs"
[variants.teal]
purpose = "Single-color contexts that *can* render color but only one — embroidery on a dark cap, single-color Pantone print, accent overlays"
mode = "single"
single_color = "mid_highs"
ink = "mid_highs"
accent = "mid_highs"
[variants.mono_black]
purpose = "Black-on-white print, light backgrounds where color isn't appropriate (academic papers, formal docs)"
mode = "single"
single_color = "ink"
ink = "ink"
accent = "ink"
[variants.mono_white]
purpose = "White-on-dark print, dark backgrounds where color isn't appropriate, terminal banners"
mode = "single"
single_color = "paper"
ink = "paper"
accent = "paper"