A browser interface to Kinbiont.jl

Reproducible microbial growth phenotyping, in the browser

GUIbiont is a no-code application for quality control, curve fitting, trajectory clustering and metadata-linked analysis of plate-reader data. Interactive sessions export as Julia scripts, so browser analyses can be reproduced or extended outside the interface.

stationary phase stationary phase Early transition Late transition Non-growing
Schematic illustration of the cluster structure GUIbiont reports. Not measured data — see the case studies below.

From raw plate-reader files
to screen-level summaries

Each step is interactive and inspectable, and each result can be exported as Julia code that reproduces the underlying Kinbiont.jl calls.

1
Import
Plate-reader exports and layout annotations
2
Clean
Parse, standardize, annotate wells
3
Inspect
Curves, replicates, AUC
4
Fit
Kinbiont.jl models with AICc selection
5
Cluster
k-means, k-medoids, hierarchical, DBSCAN
6
Interpret
Spearman, random forest, partial dependence

Six modules, used together or independently

Each tab is a self-contained analysis environment operating on the same imported experiment.

01 — Clean
Data cleaning
Import plate-reader exports together with plate layout annotations. GUIbiont parses multi-channel files and writes standardized CSVs used by every downstream module.
6/48/96-well plates Multi-channel Plate annotations
02 — Inspect
Curve inspection
Browse individual wells or replicate averages across multiple experiments, and report maximum OD, final OD and area under the curve.
Multi-experiment Replicate averaging AUC / max OD
03 — Fit
Single-curve fitting
Fit individual wells or replicate-averaged trajectories to Kinbiont.jl models by nonlinear optimization with a relative-error loss, with configurable smoothing, stationary-phase truncation and blank subtraction.
Blank subtraction Stationary phase Multi-model AICc Code export
04 — Cluster
Trajectory clustering
Group complete screens by trajectory shape on z-score-normalized curves. Non-growing trajectories can optionally be separated by a constant-curve pre-screen before clustering, and diagnostics guide the choice of k.
k-means / k-medoids Hierarchical / DBSCAN Silhouette · Dunn · DB WCSS elbow
05 — Batch
Batch fitting
Fit all selected wells asynchronously with progress reporting. Download a single CSV containing the selected model, parameters, stationary-phase estimate and AICc for every well, with fit status retained for curves that do not converge.
Asynchronous Progress reporting CSV export
06 — Interpret
Downstream machine learning
Link batch-fit growth parameters to an external feature matrix. Compute Spearman rank correlations, train cross-validated random-forest regressors and inspect permutation importance and partial dependence.
Spearman ρ Random forest Permutation importance

A browser layer, not a reimplementation

Kinbiont.jl is a Julia package for microbial growth analysis covering preprocessing, model-based inference, segmented fitting and downstream machine learning. GUIbiont assembles the data, handles the interface and delegates the analysis.

  • Direct model calls — fitting and clustering route through Kinbiont's API rather than parallel implementations
  • Code transparency — GUI actions export as Julia scripts that rerun the same calls from local source files
  • Model library — access to Kinbiont's library of over 30 parametric and ODE-based growth models
  • Optimizer choice — BOBYQA, COBYLA, ISRES, DIRECT-L and adaptive differential evolution
under_the_hood.jl
# The call GUIbiont delegates to
using Kinbiont

# Curves from a Kinbiont-convention CSV:
# first column times, one column per curve
data = GrowthData("well_A3.csv")

# Candidate models and initial guesses
spec = ModelSpec(
    [MODEL_REGISTRY["logistic"],
     MODEL_REGISTRY["gompertz"]],
    [[0.01, 0.5, 1.2],
     [0.01, 0.5, 1.2, 0.5]],
)

opts = FitOptions(
    smooth            = true,
    smooth_method     = :lowess,
    blank_subtraction = false,
)

results = kinbiont_fit(data, spec, opts)

r = results[1]
println(r.best_model)   # selected by AICc
println(r.best_params)
println(r.best_aic)

From logistic to heterogeneous population dynamics

GUIbiont exposes the models in Kinbiont's library, which currently contains over 30 parametric and ODE-based growth models, including the adjusted Heterogeneous Population Model.

aHPM — adjusted Heterogeneous Population Model
du₁/dt = −u₁ · k₁
du₂/dt = u₁ · k₁ + μ_max · u₂ · (1 − (u₁+u₂) / K)k₂
μ_max: maximum specific growth rate  ·  k₁: lag-phase transition rate  ·  k₂: density-dependence exponent  ·  K: carrying capacity
ODE · HeterogeneousaHPM
ODE · HeterogeneousHPM
ODE · InhibitionaHPM_inhibition
ODE · ResistanceHPM_3_death_resistance
ODE · DeathaHPM_3_death
Non-linearlogistic
Non-linearGompertz
Non-linearBaranyi-Richards
Non-linearhyper-logistic
Non-linearhyper-Gompertz
Non-linearNL_logistic
Non-linearNL_gompertz
Piecewisetriple_piecewise
PiecewiseODE_four_piecewise
DiauxicDiauxic_replicator_1
DiauxicDiauxic_piecewise
Model-freelog-linear sliding window
Full libraryMODEL_REGISTRY

Two published datasets

GUIbiont was evaluated on a genome-scale knockout screen and a chemically defined media screen, recovering known auxotrophic and nutrient-dependent phenotypes.

E. coli Keio knockout collection

3,885 single-gene deletion strains grown in rich LB and M63 minimal medium, with replicates averaged by strain and medium.

3,885
Deletion strains per medium
7,770
Strain–medium trajectories
97
Non-growing in M63 (none in LB)
19.1×
Amino-acid biosynthesis enrichment
1
Replicate averaging

Per-strain mean curves for each medium, from up to six biological replicates measured at 15-minute intervals.

2
Constant-curve pre-screen

Evaluated over the complete 0.25–50 h trajectories. Identified 97 non-growing trajectories in M63 and none in LB; all remained below OD600 = 0.018 throughout.

3
Shape clustering

WCSS evaluated for k = 1…10 on z-score-normalized trajectories. k = 2 selected for LB and k = 3 for M63, the latter comprising two dynamic clusters plus the separate non-growing class.

4
KEGG enrichment

Of the 97 non-growing strains, 82 (84.5%) carried deletions in amino-acid, cofactor or nucleotide biosynthesis genes, including 49 in amino-acid biosynthesis — enriched 11.8-fold and 19.1-fold respectively (one-sided Fisher exact tests, both P < 10⁻⁶). The pre-screen recovered this auxotrophy signature without using genotype annotations.

Chemically defined media screen

E. coli BW25113 grown in 1,029 chemically defined media varying in the concentrations of 44 compounds, fitted with the model-free log-linear sliding-window estimator.

13,608
Curves in the screen
1,029
Chemically defined media
44
Compounds varied
13,355
Curves with usable fits
1
Log-linear batch fitting

Run per experimental round through the batch log-linear endpoint with rolling-average smoothing. Records without a usable fit are retained in the output with their fit status rather than dropped.

2
Metadata linking

Fitted parameters matched by curve label to medium identifier, with replicate estimates averaged so each medium contributes one parameter row and one feature row of 44 compound concentrations.

3
Downstream analysis

Spearman correlations, cross-validated random-forest regression and permutation importance for μmax and Nmax, with replicate averaging applied before cross-validation so each medium occurs in one fold.

Every analysis exports as executable Julia

GUI operations are not confined to an opaque session. Single-curve fits, batch runs and clustering analyses download as Julia scripts that rerun the workflow from local source files, so results can be audited, scaled and shared.

  • Single-curve export — the fit with all preprocessing parameters
  • Batch-fit scripts — regenerate the parameter table outside the interface
  • Clustering export — reproduce cluster assignments with identical settings
exported_fit_A3.jl
# Growth curve fitting — exported from GUIbiont
# Reruns the workflow from local source files; no
# GUI curve or GUI result is embedded in the script.

using Kinbiont
using Statistics

const CLEAN_DATA_PATH = "path/to/Clean_data"
const EXPERIMENT      = "experiment_01"
const WELL            = "A3"

# (loader block abbreviated: the exported script
#  reads CLEAN_DATA_PATH and locates WELL as `idx`)
data = GrowthData(
    reshape(vec(source.data.curves[idx, :]), 1, :),
    source.data.times, [WELL])

fit = kinbiont_batch_fit(
    data;
    experiment        = EXPERIMENT,
    labels            = [WELL],
    type_of_smoothing = "rolling_avg",
    pt_avg            = 7,
)

r = only(fit.results)
println("Model:      ", r["model"])
println("Parameters: ", r["parameters"])
println("AICc:       ", r["aic"])
println("RMSE:       ", r["loss_rmse"])
Open source · MIT license

Availability

GUIbiont runs locally on any machine with Julia. Source code, documentation and example datasets are on GitHub.

$ julia launch_web_app.jl → Server running at http://localhost:8080

Citing GUIbiont

If GUIbiont contributes to work you publish, please cite the manuscript and the software release, and cite Kinbiont.jl for the underlying methods.

Manuscript

Alvarenga E.Z., Oltolini E., Pinheiro F. No-code microbial growth phenotyping with GUIbiont. Preprint.

Software

GUIbiont v1.1.0, archived at 10.5281/zenodo.21921432. Citation metadata in CITATION.cff. See the releases page.

Underlying methods

Angaroni F. et al. Kinbiont.jl. github.com/pinheiroGroup/Kinbiont.jl

Analysis code

Scripts for the two case studies: ecoli-knockout-growth-atlas and chemical-media-analysis.