alterlab-flowio — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-flowio (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
FlowIO is a lightweight Python library for reading and writing Flow Cytometry Standard (FCS) files. Parse FCS metadata, extract event data, and create new FCS files with minimal dependencies. Supports FCS versions 2.0, 3.0, and 3.1 — ideal for backend services, data pipelines, and basic cytometry file operations.
Use this skill when:
Related tool: For advanced analysis (compensation, gating, FlowJo/GatingML support), recommend the FlowKit library as a companion to FlowIO.
uv pip install flowioRequires Python 3.9 or later.
from flowio import FlowData
# Read FCS file and inspect
flow = FlowData('experiment.fcs')
print(f"FCS Version: {flow.version}")
print(f"Events: {flow.event_count}")
print(f"Channels: {flow.pnn_labels}")
# Get event data as NumPy array, shape (events, channels)
events = flow.as_array()import numpy as np
from flowio import create_fcs
# Write a new FCS file from a NumPy array.
# Gotcha: create_fcs takes a WRITABLE BINARY FILE HANDLE (not a path) and a
# FLATTENED 1-D event array — pass data.flatten(), not the 2-D matrix.
data = np.array([[100, 200, 50], [150, 180, 60]], dtype='float32') # 2 events, 3 channels
with open('output.fcs', 'wb') as fh:
create_fcs(fh, data.flatten(), ['FSC-A', 'SSC-A', 'FL1-A'])FlowData('file.fcs') instance. Use only_text=Truefor metadata-only (memory-efficient) reads; pass offset/null-channel flags for problematic files.
flow.version, flow.event_count, flow.pnn_labels,flow.pns_labels, channel-type indices, and the flow.text metadata dict.
flow.as_array() (preprocessed) orflow.as_array(preprocess=False) (raw). Slice by channel type as needed.
FCS file with flow.write_fcs(path, ...) (takes a path) or create_fcs(fh, data.flatten(), ...) (takes a binary file handle + flattened events). Output is always FCS 3.1, single-precision float.
read_multiple_data_sets() instead of the constructor.
Read references/api_reference.md.
multi-dataset, preprocessing)?** Read references/workflows.md for full code.
events, extract channels)?** Read references/recipes.md.
Read references/error-handling-and-troubleshooting.md.
references/api_reference.md — Complete FlowData class, utility functions(read_multiple_data_sets, create_fcs), exception classes, FCS file structure, common TEXT-segment keywords, channel types, and example workflows.
references/workflows.md — Full code for the core operations: reading/parsing,metadata & channel extraction, creating files, exporting/modifying, multi-dataset handling, and data preprocessing.
references/recipes.md — Worked examples: inspecting contents, batchprocessing a directory, FCS→CSV conversion, event filtering & re-export, and channel extraction with statistics.
references/error-handling-and-troubleshooting.md — Exception-handlingpatterns, best practices, FCS file-structure notes, a troubleshooting table, and integration notes (NumPy, pandas, FlowKit, web apps).
FlowIO provides essential FCS file handling for flow cytometry workflows — use it for parsing, metadata extraction, and file creation. For simple file operations and data extraction, FlowIO alone is sufficient; for complex analysis (compensation, gating), integrate with FlowKit or other specialized tools.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.