🌸 Flowillower 柳暗花明
“山重水复疑无路,柳暗花明又一村。”——宋·陆游 《游山西村》
“Through layered peaks and winding flows, no path seems in sight; /
Beyond shadowed willows, blooming flowers—a village comes to light”
(Lu You, 1167 AD in the Song Dynasty, “Travel to a Village West of the Mountains”, as translated by the library author in 2025).
A graceful, distributed, and Git-powered experiment tracking and model explanation tool for AI researchers. See through every forward pass. Flow will over — and flowers will bloom.
✨ What is flowillower?
flowillower(willow + flower = flo -willow- er = flowillower =
flow-will-over ) is a lightweight, decentralized alternative to
experiment tracking tools like Weights & Biases or TensorBoard — built
for researchers who care not just about metrics, but about meaning.
It enables you to:
- 🌱 Track metrics, models, and forward flows
- 🧠 Visualize PyTorch model structures and internal tensor paths
- 🌍 Store all logs in a Git-powered directory (local-first, push-optional)
- 🚀 Deploy visualizations to Hugging Face or ModelScope Spaces via a template app
- 🔐 Keep your data — your data (No central server required)
Whether you’re blocked in a thicket of non-converging experiments or wandering in a maze of parameter sweeps — flowillower aims to be the “bright flowers from dark willows” of your research journey.
🚀 Quickstart
Installation
Install latest from the GitHub repository:
$ pip install git+https://github.com/THU-CVML/flowillower.git
or from conda
$ conda install -c THU-CVML flowillower
or from pypi
$ pip install flowillower
Documentation
Documentation can be found hosted on this GitHub repository’s pages. Additionally you can find package manager specific guidelines on conda and pypi respectively.
Basic usage
Fill me in please! Don’t forget code examples:
from flowillower import init, log_metrics, log_model, push
import torch.nn as nn
# Initialize an experiment (creates a local Git repo)
init(project_name="my_cool_exp")
# Log your model architecture
model = nn.Sequential(nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 1))
log_model(model)
# Log some fake metrics
log_metrics(step=1, metrics={"loss": 0.234, "accuracy": 0.89})
log_metrics(step=2, metrics={"loss": 0.123, "accuracy": 0.91})
# Optional: push to a remote Git repo for team sharing or cloud viewing
push("https://huggingface.co/spaces/yourname/yourapp")
🙌 Contributing
We welcome contributions, ideas, and issues! See CONTRIBUTING.md or
open a discussion to share your thoughts.
📜 License: Apache 2.0
Install flowillower in Development mode
# make sure flowillower package is installed in development mode
$ pip install -e .
# make changes under nbs/ directory
# ...
# compile to have changes apply to flowillower
$ nbdev_prepare
📂 Project Structure
🧠 Why the name “flowillower”?
It’s a blend of “willow” + “flower”, inspired by the Chinese idiom “柳暗花明又一村” (Liǔ àn huā míng yòu yī cūn) — light at the end of the tunnel.
Even deeper: flow + will + over → “flow will over” → Break free from rigid workflows, discover breakthroughs, and bloom.
Metadata
Release files for flowillower 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| flowillower-0.0.3.tar.gz | 19.0 kB | Without provenance | Details for flowillower-0.0.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| flowillower-0.0.3-py3-none-any.whl | Python 3 | none | any | Details for flowillower-0.0.3-py3-none-any.whl |
Total release size: 36.9 kB
Release files / flowillower-0.0.3.tar.gz
| Download URL | flowillower-0.0.3.tar.gz |
|---|---|
| Size | 19.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87e8224dfdfcf2bca178f5ea48762435639933f547d774c9713d0b1e209077ca
|
|
BLAKE2b-256 checksum How to use checksums |
372682a44f8342b919b147148ad91ecc9d697023bd03fa005bdc2b3d5a783f72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.17
|
Release files / flowillower-0.0.3-py3-none-any.whl
| Download URL | flowillower-0.0.3-py3-none-any.whl |
|---|---|
| Size | 18.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5f2e70141771c998a43bd2ff5f8f77d0043a5e52fdc8d2f79e70035299578e45
|
|
BLAKE2b-256 checksum How to use checksums |
8aec32ae685b022986c27f95c86c3e9e373bd6ea325a9b2fdfefde58d864f4b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.10.17
|
Security for flowillower 0.0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.