Generic workflow app runtime and Streamlit renderer with provider plugins
Project description
renderflow
Workflow runtime and rendering API for:
- Streamlit UI
- CLI execution
- HTML report export
- Individual figure export
Core Idea
renderflow owns the interface contract and rendering behavior.
Provider packages should mostly define workflows (run_workflow + params), not custom UI/CLI plumbing.
Demo App
Live Streamlit demo:
https://demo-for-renderflow.streamlit.app/
CLI
List installed providers:
renderflow list-providers
List provider workflows:
renderflow list-workflows --provider crsd-inspector
Show interpreted workflow parameters:
renderflow show-params --provider crsd-inspector --workflow signal_analysis
Provider-scoped CLI (no provider cli.py needed):
[project.scripts]
crsd-inspector = "renderflow.cli:main"
With that entrypoint:
crsd-inspector -hshows available workflows.crsd-inspector range_doppler_processing -hshows only that workflow's parameters/defaults/help.
Execute a workflow in terminal mode:
renderflow execute \
--provider crsd-inspector \
--workflow signal_analysis \
--param crsd_directory=examples \
--param prf_hz=1000 \
--output terminal
Execute and export both:
- one combined report file (
--html) - per-figure files (
--save-figures-dir+--figure-format)
renderflow execute \
--provider crsd-inspector \
--workflow signal_analysis \
--param crsd_directory=examples \
--html output/report.html \
--save-figures-dir output/figures \
--figure-format html
Add per-figure JSON in the same run:
renderflow execute \
--provider crsd-inspector \
--workflow signal_analysis \
--param crsd_directory=examples \
--html output/report.html \
--save-figures-dir output/figures \
--figure-format html \
--figure-format json
Export multiple figure formats in a single run:
renderflow execute \
--provider crsd-inspector \
--workflow signal_analysis \
--param crsd_directory=examples \
--save-figures-dir output/figures \
--figure-format html \
--figure-format json
Comma-separated format lists are also accepted:
renderflow execute \
--provider crsd-inspector \
--workflow signal_analysis \
--param crsd_directory=examples \
--html output/report.html \
--save-figures-dir output/figures \
--figure-format html,json
If --figure-format is omitted, per-figure export defaults to html.
Image formats (png, jpg, jpeg, svg, pdf) require Kaleido. renderflow includes kaleido as a dependency.
Launch Streamlit:
renderflow run --provider crsd-inspector
Shell Completion
Tab completion is supported via argcomplete for both:
renderflow ...- provider-scoped commands (for example
crsd-inspector ...)
Activate in Bash for current shell:
eval "$(register-python-argcomplete renderflow)"
eval "$(register-python-argcomplete crsd-inspector)"
After activation, workflow subcommands and options complete with Tab.
Workflow Result Contract
Use renderflow.workflow.Workflow inside provider workflows:
from renderflow.workflow import Workflow
workflow = Workflow(name="My Workflow", description="...")
workflow.params = {
"threshold": {
"type": "number",
"default": 0.5,
"label": "Threshold",
"description": "Minimum score to keep",
},
}
workflow.add_text("Summary text")
workflow.add_table("Metrics", {"name": ["a"], "value": [1]})
workflow.add_plot(fig, title="Spectrum", figure_id="spectrum", save=True)
workflow.add_code("print('debug')", language="python")
return workflow.build()
add_plot(..., save=False) marks a plot as not exportable when using figure-save operations.
Minimum return contract from run_workflow(...):
- must return a
dict - either:
- modern shape:
{"results": [ ... ]} - legacy shape:
{"text": [...], "tables": [...], "plots": [...]}
- modern shape:
- for modern shape, each item in
resultsmust be a dict with:typeintext | table | plot | code- if
type == "plot", item must includefigure
Provider Contract Options
1) Explicit AppSpec (fully explicit)
Entry point:
[project.entry-points."renderflow.providers"]
my-provider = "my_provider.app_definition:get_app_spec"
get_app_spec() returns renderflow.contracts.AppSpec.
2) Auto-Defined Provider (minimal)
If no app_definition exists, renderflow auto-builds from:
<provider>.workflows.*modules withrun_workflow(...)- optional
<provider>.renderflowmodule:APP_NAME = "..."WORKFLOWS_PACKAGE = "provider.custom_workflows"(optional)- optional custom metadata constants for provider setup
Workflow parameters are pulled from:
workflow.paramsif aworkflowobject exists in the modulePARAMSmodule global- inferred function signature defaults
This lets packages like crsd-inspector keep only workflow definitions and optional init logic, while renderflow handles CLI + Streamlit parameter interpretation and rendering.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file renderflow-2026.7.tar.gz.
File metadata
- Download URL: renderflow-2026.7.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f997127879c7b71bab80a9f431577796c73e80891579f7016ebe7803bdaed78f
|
|
| MD5 |
6c1b2734171e671a11b18720e258a330
|
|
| BLAKE2b-256 |
72846c79e811843817ac357a45b33fc2f6ff22509539dfd5313c26acc8b016bd
|
File details
Details for the file renderflow-2026.7-py3-none-any.whl.
File metadata
- Download URL: renderflow-2026.7-py3-none-any.whl
- Upload date:
- Size: 19.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c9c30e101165b2a838bee318cfe8f9624d0faa923234ea6b3f9ed905787e26a
|
|
| MD5 |
0aa4208bfb52aa6796ce2a638dd61acd
|
|
| BLAKE2b-256 |
38c730fcc09b689832dce2071e6ec7ae243ecd492fc9f8f6ffde9e3c30cafc62
|