@pikaa-ai/pikaa 0.3.23 → 0.3.24
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.
- package/assets/brand/orbit-logo-option4-whale.jpg +0 -0
- package/assets/brand/orbit-logo.jpg +0 -0
- package/assets/brand/orbit-logo.png +0 -0
- package/assets/brand/orbit-logo.svg +3 -0
- package/dist/cli.js +337 -162
- package/dist/index.js +1 -2
- package/package.json +1 -2
- package/skills/adaptyv/SKILL.md +0 -240
- package/skills/aeon/SKILL.md +0 -402
- package/skills/analytical-method-validation/SKILL.md +0 -299
- package/skills/anndata/SKILL.md +0 -431
- package/skills/arbor/SKILL.md +0 -152
- package/skills/arboreto/SKILL.md +0 -267
- package/skills/astropy/SKILL.md +0 -353
- package/skills/autoskill/SKILL.md +0 -233
- package/skills/benchling-integration/SKILL.md +0 -229
- package/skills/bgpt-paper-search/SKILL.md +0 -75
- package/skills/bids/SKILL.md +0 -237
- package/skills/biopython/SKILL.md +0 -472
- package/skills/bioservices/SKILL.md +0 -399
- package/skills/bulk-rnaseq/SKILL.md +0 -198
- package/skills/cellxgene-census/SKILL.md +0 -283
- package/skills/cirq/SKILL.md +0 -370
- package/skills/citation-management/SKILL.md +0 -329
- package/skills/clinical-decision-support/SKILL.md +0 -238
- package/skills/clinical-decision-support/references/README.md +0 -62
- package/skills/clinical-reports/SKILL.md +0 -248
- package/skills/clinical-reports/references/README.md +0 -34
- package/skills/cobrapy/SKILL.md +0 -496
- package/skills/consciousness-council/SKILL.md +0 -151
- package/skills/dask/SKILL.md +0 -482
- package/skills/database-lookup/SKILL.md +0 -386
- package/skills/datamol/SKILL.md +0 -200
- package/skills/deepchem/SKILL.md +0 -244
- package/skills/deepspot-m/SKILL.md +0 -175
- package/skills/deeptools/SKILL.md +0 -412
- package/skills/depmap/SKILL.md +0 -301
- package/skills/dhdna-profiler/SKILL.md +0 -184
- package/skills/diffdock/SKILL.md +0 -488
- package/skills/dnanexus-integration/SKILL.md +0 -325
- package/skills/docx/SKILL.md +0 -99
- package/skills/esm/SKILL.md +0 -334
- package/skills/etetoolkit/SKILL.md +0 -327
- package/skills/exa-search/SKILL.md +0 -102
- package/skills/executing-plans/SKILL.md +0 -14
- package/skills/experimental-design/SKILL.md +0 -234
- package/skills/exploratory-data-analysis/SKILL.md +0 -280
- package/skills/flowio/SKILL.md +0 -310
- package/skills/fluidsim/SKILL.md +0 -279
- package/skills/frontend-design/SKILL.md +0 -100
- package/skills/generate-image/SKILL.md +0 -304
- package/skills/geniml/SKILL.md +0 -310
- package/skills/genomic-coordinates/SKILL.md +0 -189
- package/skills/genomic-intelligence/SKILL.md +0 -243
- package/skills/geomaster/README.md +0 -105
- package/skills/geomaster/SKILL.md +0 -366
- package/skills/geopandas/SKILL.md +0 -250
- package/skills/get-available-resources/SKILL.md +0 -260
- package/skills/gget/SKILL.md +0 -153
- package/skills/ginkgo-cloud-lab/SKILL.md +0 -106
- package/skills/glycoengineering/SKILL.md +0 -339
- package/skills/gtars/SKILL.md +0 -282
- package/skills/guardian-rails/SKILL.md +0 -54
- package/skills/histolab/SKILL.md +0 -243
- package/skills/hugging-science/SKILL.md +0 -132
- package/skills/hypogenic/SKILL.md +0 -290
- package/skills/hypothesis-generation/SKILL.md +0 -264
- package/skills/imaging-data-commons/SKILL.md +0 -496
- package/skills/infographics/SKILL.md +0 -315
- package/skills/iso-standards-readiness/SKILL.md +0 -352
- package/skills/lab-hardware-cad/SKILL.md +0 -372
- package/skills/labarchive-integration/SKILL.md +0 -216
- package/skills/lamindb/SKILL.md +0 -408
- package/skills/latchbio-integration/SKILL.md +0 -227
- package/skills/latex-posters/SKILL.md +0 -369
- package/skills/latex-posters/references/README.md +0 -439
- package/skills/liteparse/SKILL.md +0 -295
- package/skills/literature-review/SKILL.md +0 -263
- package/skills/markdown-mermaid-writing/SKILL.md +0 -322
- package/skills/market-research-reports/SKILL.md +0 -337
- package/skills/markitdown/SKILL.md +0 -264
- package/skills/matchms/SKILL.md +0 -276
- package/skills/matlab/SKILL.md +0 -274
- package/skills/matplotlib/SKILL.md +0 -378
- package/skills/medchem/SKILL.md +0 -321
- package/skills/modal/SKILL.md +0 -468
- package/skills/molecular-dynamics/SKILL.md +0 -458
- package/skills/molfeat/SKILL.md +0 -348
- package/skills/ncats-arax/SKILL.md +0 -178
- package/skills/networkx/SKILL.md +0 -440
- package/skills/neurokit2/SKILL.md +0 -323
- package/skills/neuropixels-analysis/SKILL.md +0 -412
- package/skills/nextflow/SKILL.md +0 -195
- package/skills/omero-integration/SKILL.md +0 -222
- package/skills/onekgpd/SKILL.md +0 -371
- package/skills/ontology-term-resolution/SKILL.md +0 -147
- package/skills/open-notebook/SKILL.md +0 -297
- package/skills/openpiv/SKILL.md +0 -469
- package/skills/opentrons-integration/SKILL.md +0 -322
- package/skills/optimize-for-gpu/SKILL.md +0 -176
- package/skills/owasp-top10/SKILL.md +0 -48
- package/skills/pacsomatic/LICENSE +0 -21
- package/skills/pacsomatic/SKILL.md +0 -150
- package/skills/paper-lookup/SKILL.md +0 -263
- package/skills/paperclip/SKILL.md +0 -413
- package/skills/paperzilla/SKILL.md +0 -159
- package/skills/parallel-web/SKILL.md +0 -128
- package/skills/pathml/SKILL.md +0 -222
- package/skills/pathogen-variant-surveillance/SKILL.md +0 -208
- package/skills/pathway-enrichment/SKILL.md +0 -194
- package/skills/pdf/SKILL.md +0 -322
- package/skills/peer-review/SKILL.md +0 -288
- package/skills/penetration-testing/SKILL.md +0 -31
- package/skills/pennylane/SKILL.md +0 -240
- package/skills/phylogenetics/SKILL.md +0 -409
- package/skills/pi-agent/SKILL.md +0 -83
- package/skills/pkpd-modeling/SKILL.md +0 -381
- package/skills/polars/SKILL.md +0 -393
- package/skills/polars-bio/SKILL.md +0 -379
- package/skills/ponytail/SKILL.md +0 -31
- package/skills/ponytail-audit/SKILL.md +0 -18
- package/skills/pptx/SKILL.md +0 -246
- package/skills/pptx-posters/SKILL.md +0 -258
- package/skills/primekg/SKILL.md +0 -99
- package/skills/protocolsio-integration/SKILL.md +0 -236
- package/skills/pufferlib/SKILL.md +0 -328
- package/skills/pydeseq2/SKILL.md +0 -369
- package/skills/pydicom/SKILL.md +0 -381
- package/skills/pyhealth/SKILL.md +0 -124
- package/skills/pylabrobot/SKILL.md +0 -216
- package/skills/pymatgen/SKILL.md +0 -404
- package/skills/pymc/SKILL.md +0 -310
- package/skills/pymoo/SKILL.md +0 -276
- package/skills/pyopenms/SKILL.md +0 -179
- package/skills/pysam/SKILL.md +0 -330
- package/skills/pytdc/SKILL.md +0 -297
- package/skills/pytorch-lightning/SKILL.md +0 -191
- package/skills/pyzotero/SKILL.md +0 -137
- package/skills/qiskit/SKILL.md +0 -259
- package/skills/qutip/SKILL.md +0 -317
- package/skills/rdkit/SKILL.md +0 -94
- package/skills/relsa-severity-assessment/SKILL.md +0 -354
- package/skills/research-grants/SKILL.md +0 -296
- package/skills/research-grants/references/README.md +0 -287
- package/skills/research-lookup/README.md +0 -106
- package/skills/research-lookup/SKILL.md +0 -338
- package/skills/rowan/SKILL.md +0 -398
- package/skills/scanpy/SKILL.md +0 -303
- package/skills/scholar-evaluation/SKILL.md +0 -296
- package/skills/scientific-brainstorming/SKILL.md +0 -282
- package/skills/scientific-critical-thinking/SKILL.md +0 -180
- package/skills/scientific-schematics/SKILL.md +0 -370
- package/skills/scientific-slides/SKILL.md +0 -379
- package/skills/scientific-visualization/SKILL.md +0 -285
- package/skills/scientific-writing/SKILL.md +0 -356
- package/skills/scikit-bio/SKILL.md +0 -470
- package/skills/scikit-learn/SKILL.md +0 -324
- package/skills/scikit-survival/SKILL.md +0 -313
- package/skills/scvelo/SKILL.md +0 -328
- package/skills/scvi-tools/SKILL.md +0 -201
- package/skills/seaborn/SKILL.md +0 -254
- package/skills/security-auditor/SKILL.md +0 -37
- package/skills/shap/SKILL.md +0 -282
- package/skills/simpy/SKILL.md +0 -283
- package/skills/stable-baselines3/SKILL.md +0 -325
- package/skills/statistical-analysis/SKILL.md +0 -446
- package/skills/statistical-power/SKILL.md +0 -200
- package/skills/statsmodels/SKILL.md +0 -238
- package/skills/sympy/SKILL.md +0 -354
- package/skills/systematic-debugging/SKILL.md +0 -35
- package/skills/tamarind/SKILL.md +0 -285
- package/skills/tdd/SKILL.md +0 -26
- package/skills/tiledbvcf/SKILL.md +0 -456
- package/skills/timesfm-forecasting/SKILL.md +0 -408
- package/skills/timesfm-forecasting/examples/global-temperature/README.md +0 -178
- package/skills/torch-geometric/SKILL.md +0 -458
- package/skills/torchdrug/SKILL.md +0 -241
- package/skills/transformers/SKILL.md +0 -195
- package/skills/treatment-plans/SKILL.md +0 -174
- package/skills/treatment-plans/references/README.md +0 -19
- package/skills/umap-learn/SKILL.md +0 -488
- package/skills/uncertainty-and-units/SKILL.md +0 -384
- package/skills/usfiscaldata/SKILL.md +0 -171
- package/skills/vaex/SKILL.md +0 -204
- package/skills/venue-templates/SKILL.md +0 -269
- package/skills/verification-before-completion/SKILL.md +0 -22
- package/skills/waypoint-bio/SKILL.md +0 -273
- package/skills/what-if-oracle/SKILL.md +0 -184
- package/skills/writing-plans/SKILL.md +0 -15
- package/skills/xlsx/SKILL.md +0 -110
- package/skills/zarr-python/SKILL.md +0 -241
package/skills/flowio/SKILL.md
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: flowio
|
|
3
|
-
description: Read, inspect, and write Flow Cytometry Standard (FCS) 2.0, 3.0, and 3.1 files with FlowIO. Use for low-level FCS metadata and channel inspection, NumPy event extraction, multi-dataset files, table export, and FCS 3.1 creation; use FlowKit for compensation, cytometry transforms, gating, or FlowJo workspaces.
|
|
4
|
-
allowed-tools: Read Write Bash
|
|
5
|
-
license: BSD-3-Clause license
|
|
6
|
-
compatibility: Requires Python 3.9-3.13, uv, and FlowIO 1.4.0. NumPy is installed with FlowIO; pandas is optional for DataFrame workflows. Runtime parsing is local and needs no credentials or network access.
|
|
7
|
-
metadata:
|
|
8
|
-
version: "2.0"
|
|
9
|
-
skill-author: K-Dense Inc.
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# FlowIO
|
|
13
|
-
|
|
14
|
-
## Purpose
|
|
15
|
-
|
|
16
|
-
Use FlowIO as a lightweight, low-level reader and writer for Flow Cytometry
|
|
17
|
-
Standard files. Examples in this skill target **FlowIO 1.4.0**, the current
|
|
18
|
-
stable release verified on 2026-07-23.
|
|
19
|
-
|
|
20
|
-
FlowIO is appropriate for:
|
|
21
|
-
|
|
22
|
-
- Reading FCS 2.0, 3.0, and 3.1 files
|
|
23
|
-
- Inspecting HEADER, TEXT, ANALYSIS, and channel metadata
|
|
24
|
-
- Retrieving event data as a two-dimensional NumPy array
|
|
25
|
-
- Reading legacy files that contain multiple datasets
|
|
26
|
-
- Writing list-mode, single-precision FCS 3.1 files
|
|
27
|
-
- Preparing data for pandas, machine-learning, or downstream cytometry tools
|
|
28
|
-
|
|
29
|
-
FlowIO does **not** perform compensation, logicle/biexponential transforms,
|
|
30
|
-
gating, clustering, or FlowJo workspace processing. Use FlowKit or another
|
|
31
|
-
analysis package for those tasks.
|
|
32
|
-
|
|
33
|
-
## Install
|
|
34
|
-
|
|
35
|
-
Create or activate a Python environment, then install the verified release:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
uv pip install "flowio==1.4.0"
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Confirm the runtime version:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
uv run python -c "import flowio; print(flowio.__version__)"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
FlowIO 1.4.0 supports Python 3.9 through 3.13 and depends on NumPy.
|
|
48
|
-
|
|
49
|
-
## Operating Workflow
|
|
50
|
-
|
|
51
|
-
1. **Clarify the operation.** Distinguish metadata inventory, event extraction,
|
|
52
|
-
file repair, conversion, and downstream biological analysis.
|
|
53
|
-
2. **Inspect before loading events.** Use `only_text=True` for metadata-only
|
|
54
|
-
work, especially with large or unfamiliar files.
|
|
55
|
-
3. **Choose event semantics explicitly.** Use `as_array(preprocess=True)` for
|
|
56
|
-
gain/log/time scaling from FCS metadata, or `preprocess=False` for values as
|
|
57
|
-
encoded in the DATA segment. Record the choice.
|
|
58
|
-
4. **Keep parsing strict by default.** Do not automatically suppress offset
|
|
59
|
-
errors. Relax checks only for a known vendor-format defect, and review the
|
|
60
|
-
resulting event data.
|
|
61
|
-
5. **Treat metadata as potentially sensitive.** FCS TEXT values can include
|
|
62
|
-
sample, subject, operator, and instrument identifiers. Export only fields
|
|
63
|
-
needed for the task.
|
|
64
|
-
6. **Validate writes by reopening them.** Check event/channel counts, labels,
|
|
65
|
-
metadata, and representative values after any FCS export.
|
|
66
|
-
|
|
67
|
-
## Critical Semantics
|
|
68
|
-
|
|
69
|
-
### TEXT keys are normalized
|
|
70
|
-
|
|
71
|
-
`FlowData.text` stores keys in lowercase and strips the leading `$` from
|
|
72
|
-
standard FCS keywords:
|
|
73
|
-
|
|
74
|
-
```python
|
|
75
|
-
from flowio import FlowData
|
|
76
|
-
|
|
77
|
-
flow = FlowData("sample.fcs", only_text=True)
|
|
78
|
-
acquisition_date = flow.text.get("date")
|
|
79
|
-
instrument = flow.text.get("cyt")
|
|
80
|
-
next_dataset = int(flow.text.get("nextdata", "0"))
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
Do not look up `"$DATE"`, `"$CYT"`, or other uppercase dollar-prefixed keys.
|
|
84
|
-
TEXT values remain strings. FlowIO 1.4.0 also removes every `$` character from
|
|
85
|
-
the decoded TEXT segment, including `$` characters inside values; preserve the
|
|
86
|
-
original file when exact metadata fidelity matters.
|
|
87
|
-
|
|
88
|
-
### Events have two representations
|
|
89
|
-
|
|
90
|
-
- `flow.events` is the unprocessed, flattened one-dimensional event array.
|
|
91
|
-
- `flow.as_array()` returns shape `(event_count, channel_count)` as a NumPy
|
|
92
|
-
`float64` array.
|
|
93
|
-
- `flow.as_array(preprocess=True)` applies FCS gain, logarithmic, and time
|
|
94
|
-
scaling. It does not apply compensation or logicle/biexponential display
|
|
95
|
-
transforms.
|
|
96
|
-
- `flow.as_array(preprocess=False)` reshapes the encoded event values without
|
|
97
|
-
those scaling steps.
|
|
98
|
-
|
|
99
|
-
`as_array()` creates another in-memory array. FlowIO does not provide chunked
|
|
100
|
-
or memory-mapped event access.
|
|
101
|
-
|
|
102
|
-
### Channel numbering uses two conventions
|
|
103
|
-
|
|
104
|
-
- NumPy columns and `fluoro_indices`, `scatter_indices`, and `time_index` use
|
|
105
|
-
zero-based indices.
|
|
106
|
-
- `flow.channels` uses FCS parameter numbers beginning at 1.
|
|
107
|
-
- `null_channels` contains the PnN label strings supplied through
|
|
108
|
-
`null_channel_list`, including supplied labels that were not found.
|
|
109
|
-
- `pns_labels` always matches `pnn_labels` in length; missing optional PnS
|
|
110
|
-
labels appear as empty strings.
|
|
111
|
-
|
|
112
|
-
### Writing is intentionally limited
|
|
113
|
-
|
|
114
|
-
`create_fcs()` requires:
|
|
115
|
-
|
|
116
|
-
- An already-open binary file handle
|
|
117
|
-
- Flattened one-dimensional event data in row-major event/channel order
|
|
118
|
-
- One PnN name per channel
|
|
119
|
-
- Optional PnS names and string-valued metadata via `metadata_dict`
|
|
120
|
-
|
|
121
|
-
It writes FCS 3.1 list-mode (`$MODE=L`) single-precision float
|
|
122
|
-
(`$DATATYPE=F`) data. Required interpretation keywords are generated by
|
|
123
|
-
FlowIO and cannot be overridden through metadata.
|
|
124
|
-
|
|
125
|
-
## Quick Start: Read an FCS File
|
|
126
|
-
|
|
127
|
-
```python
|
|
128
|
-
from pathlib import Path
|
|
129
|
-
|
|
130
|
-
from flowio import FlowData
|
|
131
|
-
|
|
132
|
-
flow = FlowData(Path("sample.fcs"))
|
|
133
|
-
events = flow.as_array(preprocess=True)
|
|
134
|
-
|
|
135
|
-
print(
|
|
136
|
-
{
|
|
137
|
-
"version": flow.version,
|
|
138
|
-
"events": flow.event_count,
|
|
139
|
-
"channels": flow.channel_count,
|
|
140
|
-
"shape": events.shape,
|
|
141
|
-
"pnn": flow.pnn_labels,
|
|
142
|
-
"pns": flow.pns_labels,
|
|
143
|
-
"date": flow.text.get("date"),
|
|
144
|
-
"instrument": flow.text.get("cyt"),
|
|
145
|
-
}
|
|
146
|
-
)
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
For metadata only:
|
|
150
|
-
|
|
151
|
-
```python
|
|
152
|
-
from flowio import FlowData
|
|
153
|
-
|
|
154
|
-
flow = FlowData("sample.fcs", only_text=True)
|
|
155
|
-
print(flow.version, flow.event_count, flow.pnn_labels)
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
Do not call `as_array()` on a metadata-only instance because its event data was
|
|
159
|
-
not loaded.
|
|
160
|
-
|
|
161
|
-
Prefer a path or `Path` over a caller-owned file handle. `FlowData` closes a
|
|
162
|
-
provided handle after parsing. In FlowIO 1.4.0,
|
|
163
|
-
`read_multiple_data_sets(handle)` can fail after the first dataset because the
|
|
164
|
-
handle has been closed; pass a filesystem path for multi-dataset files.
|
|
165
|
-
|
|
166
|
-
## Quick Start: Read Multiple Datasets
|
|
167
|
-
|
|
168
|
-
Use the standalone helper rather than manually interpreting `$NEXTDATA`
|
|
169
|
-
offsets:
|
|
170
|
-
|
|
171
|
-
```python
|
|
172
|
-
from flowio import read_multiple_data_sets
|
|
173
|
-
|
|
174
|
-
datasets = read_multiple_data_sets("legacy-multi-dataset.fcs")
|
|
175
|
-
for index, dataset in enumerate(datasets):
|
|
176
|
-
values = dataset.as_array(preprocess=True)
|
|
177
|
-
print(index, dataset.event_count, dataset.pnn_labels, values.shape)
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
The FCS 3.1 specification deprecated multiple datasets in one file, but FlowIO
|
|
181
|
-
can read legacy files that use them.
|
|
182
|
-
|
|
183
|
-
## Quick Start: Create an FCS 3.1 File
|
|
184
|
-
|
|
185
|
-
```python
|
|
186
|
-
from pathlib import Path
|
|
187
|
-
|
|
188
|
-
import numpy as np
|
|
189
|
-
from flowio import FlowData, create_fcs
|
|
190
|
-
|
|
191
|
-
values = np.asarray(
|
|
192
|
-
[[100.0, 200.0, 50.0], [150.0, 180.0, 60.0]],
|
|
193
|
-
dtype=np.float32,
|
|
194
|
-
)
|
|
195
|
-
pnn_labels = ["FSC-A", "SSC-A", "FITC-A"]
|
|
196
|
-
pns_labels = ["Forward scatter", "Side scatter", "CD3"]
|
|
197
|
-
|
|
198
|
-
output = Path("output.fcs")
|
|
199
|
-
with output.open("xb") as handle:
|
|
200
|
-
create_fcs(
|
|
201
|
-
handle,
|
|
202
|
-
values.ravel(order="C"),
|
|
203
|
-
pnn_labels,
|
|
204
|
-
opt_channel_names=pns_labels,
|
|
205
|
-
metadata_dict={
|
|
206
|
-
"date": "23-JUL-2026",
|
|
207
|
-
"cyt": "Example instrument",
|
|
208
|
-
"src": "Validated NumPy array",
|
|
209
|
-
},
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
roundtrip = FlowData(output)
|
|
213
|
-
assert roundtrip.event_count == values.shape[0]
|
|
214
|
-
assert roundtrip.pnn_labels == pnn_labels
|
|
215
|
-
np.testing.assert_allclose(
|
|
216
|
-
roundtrip.as_array(preprocess=False),
|
|
217
|
-
values,
|
|
218
|
-
rtol=1e-6,
|
|
219
|
-
atol=1e-6,
|
|
220
|
-
)
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
Metadata keys may be supplied in mixed case or with `$`, but lowercase keys
|
|
224
|
-
without `$` match FlowIO's normalized representation and are less error-prone.
|
|
225
|
-
Metadata values must be strings.
|
|
226
|
-
|
|
227
|
-
## Copy or Rewrite an Existing File
|
|
228
|
-
|
|
229
|
-
Use `write_fcs()` when the event data does not need to change:
|
|
230
|
-
|
|
231
|
-
```python
|
|
232
|
-
from flowio import FlowData
|
|
233
|
-
|
|
234
|
-
flow = FlowData("source.fcs")
|
|
235
|
-
|
|
236
|
-
# Preserve selected source metadata (cyt, date, and spill/spillover when present).
|
|
237
|
-
flow.write_fcs("copy.fcs")
|
|
238
|
-
|
|
239
|
-
# Write only required metadata plus the custom fields supplied here.
|
|
240
|
-
flow.write_fcs("deidentified.fcs", metadata={"src": "Deidentified export"})
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
Passing `metadata=None` preserves FlowIO's selected defaults. Passing any
|
|
244
|
-
dictionary, including `{}`, replaces those defaults rather than merging with
|
|
245
|
-
them. `write_fcs()` always produces FCS 3.1 floating-point output; non-float
|
|
246
|
-
source events are preprocessed before writing. It opens the destination for
|
|
247
|
-
overwrite, so reject an existing output path before calling it unless
|
|
248
|
-
replacement is intentional. For floating-point sources it can preserve encoded
|
|
249
|
-
events while dropping PnG or `timestep`, changing later
|
|
250
|
-
`as_array(preprocess=True)` results. Validate both raw and preprocessed
|
|
251
|
-
round-trips.
|
|
252
|
-
|
|
253
|
-
Use `create_fcs()` instead when event values, event count, or channel layout
|
|
254
|
-
changes.
|
|
255
|
-
|
|
256
|
-
## Bundled Inspector
|
|
257
|
-
|
|
258
|
-
`scripts/inspect_fcs.py` inventories one or more datasets without network
|
|
259
|
-
access. By default it reads metadata only, emits structural fields and channel
|
|
260
|
-
labels without full TEXT/ANALYSIS values, and refuses files above a
|
|
261
|
-
configurable size limit.
|
|
262
|
-
|
|
263
|
-
Set `FLOWIO_SKILL_DIR` to the installed skill directory. From this repository's
|
|
264
|
-
root, use `skills/flowio`:
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
FLOWIO_SKILL_DIR="skills/flowio"
|
|
268
|
-
|
|
269
|
-
# Metadata and channel inventory
|
|
270
|
-
uv run --no-project --with "flowio==1.4.0" \
|
|
271
|
-
python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs
|
|
272
|
-
|
|
273
|
-
# Include all normalized TEXT metadata; review output for identifiers
|
|
274
|
-
uv run --no-project --with "flowio==1.4.0" \
|
|
275
|
-
python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --include-text
|
|
276
|
-
|
|
277
|
-
# Load events and compute finite-value statistics using FlowIO preprocessing
|
|
278
|
-
uv run --no-project --with "flowio==1.4.0" \
|
|
279
|
-
python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --stats
|
|
280
|
-
|
|
281
|
-
# Compute statistics from encoded values instead
|
|
282
|
-
uv run --no-project --with "flowio==1.4.0" \
|
|
283
|
-
python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --stats --raw
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
Use `--help` for output files, input/array memory limits, null-channel labels,
|
|
287
|
-
and controlled offset-recovery options.
|
|
288
|
-
|
|
289
|
-
## References
|
|
290
|
-
|
|
291
|
-
Read only the reference needed for the current task:
|
|
292
|
-
|
|
293
|
-
- `references/api_reference.md` — exact FlowIO 1.4.0 public API and signatures
|
|
294
|
-
- `references/workflows.md` — inventory, DataFrame/CSV, batch, write, and
|
|
295
|
-
round-trip patterns
|
|
296
|
-
- `references/fcs_semantics.md` — FCS structure, metadata normalization,
|
|
297
|
-
preprocessing equations, indexing, and writer behavior
|
|
298
|
-
- `references/troubleshooting.md` — offset failures, multi-dataset files,
|
|
299
|
-
memory limits, validation, security, and privacy
|
|
300
|
-
- `references/sources.md` — authoritative upstream docs, release notes, source,
|
|
301
|
-
and FCS 3.1 publications used for this refresh
|
|
302
|
-
|
|
303
|
-
## Non-Negotiable Checks
|
|
304
|
-
|
|
305
|
-
- Never claim FlowIO applies compensation or gating.
|
|
306
|
-
- Never treat `as_array(preprocess=True)` as raw acquisition values.
|
|
307
|
-
- Never pass a two-dimensional array or a path directly to `create_fcs()`.
|
|
308
|
-
- Never assume TEXT keys retain `$` or uppercase spelling.
|
|
309
|
-
- Never silence offset errors without documenting why and validating the data.
|
|
310
|
-
- Never describe FlowIO event loading as streaming or chunked.
|
package/skills/fluidsim/SKILL.md
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fluidsim
|
|
3
|
-
description: Plan, configure, inspect, restart, and analyze bounded FluidSim computational-fluid-dynamics simulations with explicit numerical-validity and HPC safety checks. Use for FluidSim solver selection, parameter review, FFT/MPI setup, output diagnostics, or restart compatibility.
|
|
4
|
-
license: MIT
|
|
5
|
-
compatibility: Bundled CLIs require Python 3.11+ and use the standard library; HDF5/netCDF4 metadata tools lazily use h5py when available. Simulation examples target fluidsim 0.9.0, fluidfft 0.4.5, and pyFFTW 0.15.1. MPI/native FFT use requires a site-compatible MPI implementation, development headers, FFTW/PFFT/P3DFFT libraries, compilers, and an approved scheduler workflow. No GPU backend is assumed.
|
|
6
|
-
allowed-tools: Read Write Bash Glob Python
|
|
7
|
-
metadata:
|
|
8
|
-
version: "1.1"
|
|
9
|
-
skill-author: "K-Dense Inc."
|
|
10
|
-
last-reviewed: "2026-07-23"
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# FluidSim
|
|
14
|
-
|
|
15
|
-
Use FluidSim 0.9.0 as a framework for Python-defined numerical solvers, especially
|
|
16
|
-
periodic Cartesian pseudospectral CFD. Upstream FluidSim is CeCILL-2.1; the MIT
|
|
17
|
-
frontmatter license applies only to this skill.
|
|
18
|
-
|
|
19
|
-
This skill does **not** treat a completed run, a stable time step, a smooth plot,
|
|
20
|
-
or a closed program exit as evidence of numerical convergence or physical
|
|
21
|
-
validity.
|
|
22
|
-
|
|
23
|
-
## Required workflow
|
|
24
|
-
|
|
25
|
-
1. State equations, units or nondimensionalization, geometry, boundaries,
|
|
26
|
-
initial conditions, forcing, observables, and acceptance criteria.
|
|
27
|
-
2. Select a verified solver and inspect its generated default parameters.
|
|
28
|
-
3. Create a strict JSON plan with explicit CPU, RAM, disk, wall-time, output-file,
|
|
29
|
-
timestep, CFL, resolution, and dealiasing bounds.
|
|
30
|
-
4. Run the bundled validator and resource estimator.
|
|
31
|
-
5. Generate and review a dry-run script. It does nothing unless executed with an
|
|
32
|
-
explicit config-ID acknowledgement.
|
|
33
|
-
6. Run one tiny serial pilot. Inspect budgets, divergence/constraints, spectral
|
|
34
|
-
tails, CFL/time-step history, and output growth.
|
|
35
|
-
7. Refine grid and time step independently. Check conservation/budget residuals
|
|
36
|
-
and observable sensitivity.
|
|
37
|
-
8. Only then prepare a site-specific MPI job. Never submit or launch MPI
|
|
38
|
-
automatically.
|
|
39
|
-
9. Preserve config, script, `uv.lock`, package/platform/backend versions, logs,
|
|
40
|
-
output inventory, checksums, and restart lineage.
|
|
41
|
-
|
|
42
|
-
Stop if physical assumptions, units, boundary conditions, forcing semantics,
|
|
43
|
-
resolution criteria, resource limits, or acceptance criteria are missing.
|
|
44
|
-
|
|
45
|
-
## Version and installation
|
|
46
|
-
|
|
47
|
-
As verified on 2026-07-23:
|
|
48
|
-
|
|
49
|
-
- Latest stable PyPI release: `fluidsim==0.9.0` (2025-12-04).
|
|
50
|
-
- Package metadata requires Python `>=3.11` and lists Python 3.11–3.14.
|
|
51
|
-
- Pseudospectral parameter creation needs FluidFFT; bare `fluidsim` imported in
|
|
52
|
-
the smoke test, but `ns2d.create_default_params()` failed until the `fft` extra
|
|
53
|
-
was installed.
|
|
54
|
-
- Current companion versions tested here: `fluidfft==0.4.5` and
|
|
55
|
-
`pyFFTW==0.15.1`.
|
|
56
|
-
|
|
57
|
-
Prefer a project lock:
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
uv init --python 3.11
|
|
61
|
-
uv add "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1"
|
|
62
|
-
uv lock
|
|
63
|
-
uv sync --frozen
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
For an isolated disposable environment:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
uv venv --python 3.11
|
|
70
|
-
uv pip install "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1"
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
The project lock is the reproducibility record; direct pins alone do not freeze
|
|
74
|
-
all transitive artifacts. Do not reuse a lock across incompatible platforms or
|
|
75
|
-
MPI ABIs.
|
|
76
|
-
|
|
77
|
-
MPI is optional and native:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
uv add "mpi4py==4.1.2" "fluidfft-mpi-with-fftw==0.0.1" "fluidfft-fftwmpi==0.0.1"
|
|
81
|
-
uv lock
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Those packages still require a compatible MPI runtime and FFTW development
|
|
85
|
-
libraries. The optional native plugins are:
|
|
86
|
-
|
|
87
|
-
- `fluidfft-fftw==0.0.1`: sequential
|
|
88
|
-
`fft2d.with_fftw1d`, `fft2d.with_fftw2d`, `fft3d.with_fftw3d`.
|
|
89
|
-
- `fluidfft-mpi-with-fftw==0.0.1`: MPI
|
|
90
|
-
`fft2d.mpi_with_fftw1d`, `fft3d.mpi_with_fftw1d`.
|
|
91
|
-
- `fluidfft-fftwmpi==0.0.1`: MPI-enabled FFTW
|
|
92
|
-
`fft2d.mpi_with_fftwmpi2d`, `fft3d.mpi_with_fftwmpi3d`.
|
|
93
|
-
- `fluidfft-p3dfft==0.0.1`: `fft3d.mpi_with_p3dfft`; requires P3DFFT.
|
|
94
|
-
- FluidFFT also declares PFFT and P3DFFT extras; audit and pin their native
|
|
95
|
-
stacks for the target cluster.
|
|
96
|
-
|
|
97
|
-
FluidFFT documents cuFFT historically, but FluidFFT 0.4.5 declares no CUDA extra
|
|
98
|
-
or installed GPU plugin in its package metadata, and its CUDA installation page
|
|
99
|
-
is unfinished. Do not claim GPU acceleration or install an unrelated CUDA wheel
|
|
100
|
-
as a FluidSim backend. Treat GPU work as source-level experimental integration
|
|
101
|
-
requiring separate validation.
|
|
102
|
-
|
|
103
|
-
See [installation](references/installation.md) for system dependencies, MPI ABI,
|
|
104
|
-
HDF5-MPI, backend discovery, and verification.
|
|
105
|
-
|
|
106
|
-
## API snapshot
|
|
107
|
-
|
|
108
|
-
Use direct, versioned imports:
|
|
109
|
-
|
|
110
|
-
```python
|
|
111
|
-
from fluidsim.solvers.ns2d.solver import Simul
|
|
112
|
-
|
|
113
|
-
params = Simul.create_default_params()
|
|
114
|
-
params.oper.nx = params.oper.ny = 32
|
|
115
|
-
params.oper.Lx = params.oper.Ly = 2 * 3.141592653589793
|
|
116
|
-
params.oper.coef_dealiasing = 2 / 3
|
|
117
|
-
params.time_stepping.USE_CFL = True
|
|
118
|
-
params.time_stepping.cfl_coef = 0.5
|
|
119
|
-
params.time_stepping.deltat0 = 0.001
|
|
120
|
-
params.time_stepping.deltat_max = 0.01
|
|
121
|
-
params.time_stepping.t_end = 0.1
|
|
122
|
-
params.time_stepping.max_elapsed = "00:05:00"
|
|
123
|
-
params.init_fields.type = "noise"
|
|
124
|
-
params.init_fields.noise.velo_max = 0.01
|
|
125
|
-
params.output.HAS_TO_SAVE = False
|
|
126
|
-
params.output.ONLINE_PLOT_OK = False
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Important 0.9 corrections:
|
|
130
|
-
|
|
131
|
-
- CFL field: `params.time_stepping.cfl_coef`, not `CFL`.
|
|
132
|
-
- Time-correlated forcing:
|
|
133
|
-
`params.forcing.tcrandom.time_correlation`, not a flat
|
|
134
|
-
`tcrandom_time_correlation`.
|
|
135
|
-
- NS2D default initial types include `constant`, `noise`, `jet`, `dipole`,
|
|
136
|
-
`from_file`, `from_simul`, and `in_script`; do not invent a universal list for
|
|
137
|
-
every solver.
|
|
138
|
-
- Output state files default to `state_phys_t*.nc`; spectra use
|
|
139
|
-
`spectra1D.h5`/`spectra2D.h5`; scalar means are solver-dependent
|
|
140
|
-
`spatial_means.txt` or JSON-lines.
|
|
141
|
-
- `params.output.sub_directory` is relative under `FLUIDSIM_PATH`.
|
|
142
|
-
|
|
143
|
-
`ParamContainer` rejects undeclared attributes. Always generate defaults from the
|
|
144
|
-
selected `Simul` class and inspect them before changing values. See
|
|
145
|
-
[parameters](references/parameters.md).
|
|
146
|
-
|
|
147
|
-
## Solvers
|
|
148
|
-
|
|
149
|
-
Primary Cartesian CFD keys and imports:
|
|
150
|
-
|
|
151
|
-
```python
|
|
152
|
-
from fluidsim.solvers.ns2d.solver import Simul # ns2d
|
|
153
|
-
from fluidsim.solvers.ns2d.bouss.solver import Simul # ns2d.bouss
|
|
154
|
-
from fluidsim.solvers.ns2d.strat.solver import Simul # ns2d.strat
|
|
155
|
-
from fluidsim.solvers.ns3d.solver import Simul # ns3d
|
|
156
|
-
from fluidsim.solvers.ns3d.bouss.solver import Simul # ns3d.bouss
|
|
157
|
-
from fluidsim.solvers.ns3d.strat.solver import Simul # ns3d.strat
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
The 0.9 registry also includes `plate2d`, `sw1l` variants, `waves2d`, 1D models,
|
|
161
|
-
0D models, spherical solvers, and framework adapters. Availability in the
|
|
162
|
-
registry does not make a solver appropriate for a scientific question. Verify
|
|
163
|
-
equations, variables, geometry, boundaries, and diagnostics in the solver
|
|
164
|
-
source. See [solvers](references/solvers.md).
|
|
165
|
-
|
|
166
|
-
## Forcing and time advancement
|
|
167
|
-
|
|
168
|
-
Forcing is solver-specific. A current normalized random example is:
|
|
169
|
-
|
|
170
|
-
```python
|
|
171
|
-
params.forcing.enable = True
|
|
172
|
-
params.forcing.type = "tcrandom"
|
|
173
|
-
params.forcing.forcing_rate = 1.0
|
|
174
|
-
params.forcing.nkmin_forcing = 4
|
|
175
|
-
params.forcing.nkmax_forcing = 5
|
|
176
|
-
params.forcing.tcrandom.time_correlation = "based_on_forcing_rate"
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Record the forced variable, normalization definition, wave-number band, random
|
|
180
|
-
seed/state, injection target, and measured injection. FluidSim 0.9 saves state
|
|
181
|
-
parameters for restart; 0.8.6 fixed time-correlated forcing restart behavior.
|
|
182
|
-
|
|
183
|
-
Available pseudospectral schemes include Euler/RK2 phase-shift variants,
|
|
184
|
-
`RK2_trapezoid`, and `RK4`. A named order does not establish accuracy. Check CFL,
|
|
185
|
-
fast-wave/diffusive limits, `deltat_max`, and time-step refinement. See
|
|
186
|
-
[advanced features](references/advanced_features.md).
|
|
187
|
-
|
|
188
|
-
## Outputs, loading, and restart
|
|
189
|
-
|
|
190
|
-
For read-only analysis:
|
|
191
|
-
|
|
192
|
-
```python
|
|
193
|
-
from fluidsim import load_sim_for_plot
|
|
194
|
-
|
|
195
|
-
sim = load_sim_for_plot("run-directory", hide_stdout=True)
|
|
196
|
-
sim.output.spatial_means.plot()
|
|
197
|
-
sim.output.spectra.plot1d()
|
|
198
|
-
sim.output.phys_fields.plot(time=1.0)
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
`load_sim_for_plot` uses a coarse operator and disables saving/online plotting.
|
|
202
|
-
For a state-bearing object:
|
|
203
|
-
|
|
204
|
-
```python
|
|
205
|
-
from fluidsim import load_state_phys_file
|
|
206
|
-
|
|
207
|
-
sim = load_state_phys_file("run-directory", t_approx="last")
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
For a controlled restart, prefer `load_for_restart` or first run
|
|
211
|
-
`fluidsim-restart --only-check`. Do not use `--modify-params` with untrusted text:
|
|
212
|
-
the upstream CLI executes Python code supplied to that option. This skill's
|
|
213
|
-
generator never emits it. Verify solver, grid/domain, state variables, versions,
|
|
214
|
-
forcing state, checksum, target time, output destination, and resource bounds.
|
|
215
|
-
Resolution changes require the dedicated reviewed workflow, not a silent grid
|
|
216
|
-
edit. See [simulation workflow](references/simulation_workflow.md) and
|
|
217
|
-
[output analysis](references/output_analysis.md).
|
|
218
|
-
|
|
219
|
-
## Scientific acceptance gate
|
|
220
|
-
|
|
221
|
-
Before interpreting results, require:
|
|
222
|
-
|
|
223
|
-
- Explicit dimensional units or a complete nondimensionalization map.
|
|
224
|
-
- Correct equations, periodic geometry/boundaries, initial state, forcing, and
|
|
225
|
-
diagnostic definitions.
|
|
226
|
-
- Resolution and dealiasing evidence: spectra/tails, resolved gradients, and
|
|
227
|
-
solver-appropriate small-scale criteria.
|
|
228
|
-
- Timestep evidence: CFL history, fastest-wave and dissipative limits, and
|
|
229
|
-
smaller-step comparison.
|
|
230
|
-
- Conservation and budget checks including forcing, dissipation, transfers, and
|
|
231
|
-
residuals.
|
|
232
|
-
- Grid/time refinement with uncertainty or sensitivity for reported
|
|
233
|
-
observables.
|
|
234
|
-
- Comparison to an analytical solution, manufactured solution, benchmark, or
|
|
235
|
-
independently reproduced result where appropriate.
|
|
236
|
-
- Complete provenance and restart lineage.
|
|
237
|
-
|
|
238
|
-
Never label a run “DNS,” “converged,” “validated,” “steady,” or “physically
|
|
239
|
-
correct” from parameter values or plots alone.
|
|
240
|
-
|
|
241
|
-
## Bundled local tools
|
|
242
|
-
|
|
243
|
-
All tools emit strict JSON, reject URLs/traversal/symlinks, enforce hard bounds,
|
|
244
|
-
use no network or subprocess, and never launch a simulation:
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
python3 scripts/solver_config_validator.py --example
|
|
248
|
-
python3 scripts/solver_config_validator.py --config config.json
|
|
249
|
-
python3 scripts/grid_resource_estimator.py --config config.json
|
|
250
|
-
python3 scripts/simulation_dry_run.py --config config.json --output run.py
|
|
251
|
-
python3 scripts/output_inventory.py --path run-directory
|
|
252
|
-
python3 scripts/budget_summary.py --path run-directory
|
|
253
|
-
python3 scripts/restart_compatibility.py --source state.nc --target-config config.json
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
The HDF5 tools lazily require `h5py`, inspect bounded metadata/hyperslabs, and
|
|
257
|
-
never follow external links or load full field arrays.
|
|
258
|
-
|
|
259
|
-
## References
|
|
260
|
-
|
|
261
|
-
- [Installation and FFT/MPI backends](references/installation.md)
|
|
262
|
-
- [Solver registry and selection](references/solvers.md)
|
|
263
|
-
- [Simulation, pilot, and restart workflow](references/simulation_workflow.md)
|
|
264
|
-
- [Verified parameter surface](references/parameters.md)
|
|
265
|
-
- [Output, plotting, and budget analysis](references/output_analysis.md)
|
|
266
|
-
- [Forcing, operators, MPI, and migrations](references/advanced_features.md)
|
|
267
|
-
|
|
268
|
-
## Dated upstream basis
|
|
269
|
-
|
|
270
|
-
Verified 2026-07-23 against
|
|
271
|
-
[PyPI 0.9.0](https://pypi.org/project/fluidsim/),
|
|
272
|
-
[FluidSim 0.9 docs](https://fluidsim.readthedocs.io/en/latest/),
|
|
273
|
-
[release notes](https://fluidsim.readthedocs.io/en/latest/changes.html),
|
|
274
|
-
[official source mirror](https://github.com/fluiddyn/fluidsim),
|
|
275
|
-
[FluidFFT 0.4.5 docs](https://fluidfft.readthedocs.io/en/latest/), and the
|
|
276
|
-
primary FluidSim ([DOI 10.5334/jors.239](https://doi.org/10.5334/jors.239))
|
|
277
|
-
and FluidFFT ([DOI 10.5334/jors.238](https://doi.org/10.5334/jors.238))
|
|
278
|
-
papers. API claims use official docs/source; method/performance claims in the
|
|
279
|
-
references are scoped to the cited primary papers and their benchmark setups.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: frontend-design
|
|
3
|
-
description: "Create distinctive, production-grade frontend interfaces with strong aesthetic intent, avoiding generic AI UI templates."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Frontend Design (Distinctive, Production-Grade)
|
|
7
|
-
|
|
8
|
-
You are a **frontend designer-engineer**, not a layout generator.
|
|
9
|
-
|
|
10
|
-
Your goal is to create **memorable, high-craft interfaces** that:
|
|
11
|
-
* Avoid generic "AI UI" patterns (cookie-cutter SaaS templates, purple gradients, default cards).
|
|
12
|
-
* Express a clear aesthetic point of view with intentional design systems.
|
|
13
|
-
* Are fully functional, accessible, and production-ready.
|
|
14
|
-
* Translate design intent directly into clean, modern code.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## 1. Core Design Mandate
|
|
19
|
-
|
|
20
|
-
Every output must satisfy **all four**:
|
|
21
|
-
|
|
22
|
-
1. **Intentional Aesthetic Direction**
|
|
23
|
-
A named, explicit design stance (e.g. *editorial brutalism*, *luxury minimal*, *retro-futurist*, *industrial utilitarian*, *organic/natural*, *playful kinetic*).
|
|
24
|
-
2. **Technical Correctness**
|
|
25
|
-
Real, working HTML/CSS/JS or framework code (React, Vue, Svelte, Tailwind, Vanilla CSS) — not mockups.
|
|
26
|
-
3. **Visual Memorability**
|
|
27
|
-
At least one element the user will remember 24 hours later (the *Differentiation Anchor*).
|
|
28
|
-
4. **Cohesive Restraint**
|
|
29
|
-
No random decoration. Every flourish must serve the aesthetic thesis.
|
|
30
|
-
|
|
31
|
-
❌ No default layouts or cookie-cutter templates
|
|
32
|
-
❌ No design-by-components without a system
|
|
33
|
-
❌ No generic "safe" palettes (Inter/Roboto, purple-on-white)
|
|
34
|
-
✅ Strong opinions, well executed with precision
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## 2. Design Feasibility & Impact Index (DFII)
|
|
39
|
-
|
|
40
|
-
Before building, evaluate the design direction:
|
|
41
|
-
|
|
42
|
-
| Dimension | Question |
|
|
43
|
-
| :--- | :--- |
|
|
44
|
-
| **Aesthetic Impact (1-5)** | How visually distinctive and memorable is this direction? |
|
|
45
|
-
| **Context Fit (1-5)** | Does this aesthetic suit the product, audience, and purpose? |
|
|
46
|
-
| **Implementation Feasibility (1-5)** | Can this be built cleanly with available tech? |
|
|
47
|
-
| **Performance Safety (1-5)** | Will it remain fast and accessible? |
|
|
48
|
-
| **Consistency Risk (1-5)** | Can this be maintained across screens/components? |
|
|
49
|
-
|
|
50
|
-
**Formula**: `DFII = (Impact + Fit + Feasibility + Performance) - Consistency Risk` (Target: ≥ 8)
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 3. Aesthetic Execution Rules
|
|
55
|
-
|
|
56
|
-
### Typography
|
|
57
|
-
* Avoid system defaults and generic fonts (Inter, Roboto, Arial).
|
|
58
|
-
* Choose:
|
|
59
|
-
* 1 expressive display font (e.g., *Outfit, Syne, Space Grotesk, Playfair Display, Cinzel, Clash Display*).
|
|
60
|
-
* 1 restrained, high-legibility body font (e.g., *Plus Jakarta Sans, Geist, Satoshi, General Sans*).
|
|
61
|
-
* Use typography structurally (scale, rhythm, contrast, line height).
|
|
62
|
-
|
|
63
|
-
### Color & Theme
|
|
64
|
-
* Commit to a **dominant color story** using CSS variables.
|
|
65
|
-
* Structure: One dominant background tone, one high-contrast accent, and a refined neutral system.
|
|
66
|
-
* Avoid evenly-balanced palettes where every color competes for attention.
|
|
67
|
-
|
|
68
|
-
### Spatial Composition & Layout
|
|
69
|
-
* Break the grid intentionally when appropriate: asymmetric placements, overlapping planes, deep negative space, or controlled typographic density.
|
|
70
|
-
* White space is an active design element, not empty absence.
|
|
71
|
-
|
|
72
|
-
### Motion & Micro-interactions
|
|
73
|
-
* Motion must be purposeful, sparse, and high-impact (e.g., smooth entrance sequence, tactile button clicks, magnetic hover states).
|
|
74
|
-
* Avoid excessive micro-motion spam that distracts from user actions.
|
|
75
|
-
|
|
76
|
-
### Texture & Depth
|
|
77
|
-
* Use subtle grain/noise overlays, gradient meshes, glassmorphic translucency, custom border treatments, or layered cards with purpose.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## 4. Anti-Patterns (Immediate Failure)
|
|
82
|
-
|
|
83
|
-
❌ Inter / Roboto / Arial default fonts without styling
|
|
84
|
-
❌ Generic purple-on-white SaaS gradient backgrounds
|
|
85
|
-
❌ Default unstyled Tailwind/Bootstrap card grids
|
|
86
|
-
❌ Symmetrical, predictable cookie-cutter sections
|
|
87
|
-
❌ Decorative clutter with no functional or brand purpose
|
|
88
|
-
❌ Creating detached temporary or scratch preview files (e.g. `tmp_*`, `draft.html`, `preview.tsx`) in root instead of in-place structured components
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## 5. Output Checklist
|
|
93
|
-
|
|
94
|
-
When presenting or building UI:
|
|
95
|
-
- [ ] Explicit aesthetic direction named
|
|
96
|
-
- [ ] DFII score ≥ 8
|
|
97
|
-
- [ ] 1 distinctive differentiation anchor
|
|
98
|
-
- [ ] Polished typography & color variables
|
|
99
|
-
- [ ] Accessible (WCAG contrast, keyboard navigation, semantic HTML)
|
|
100
|
-
- [ ] Production-ready code matches the design ambition
|