Skip to main content

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 -h shows available workflows.
  • crsd-inspector range_doppler_processing -h shows 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": [...]}
  • for modern shape, each item in results must be a dict with:
    • type in text | table | plot | code
    • if type == "plot", item must include figure

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 with run_workflow(...)
  • optional <provider>.renderflow module:
    • APP_NAME = "..."
    • WORKFLOWS_PACKAGE = "provider.custom_workflows" (optional)
    • optional custom metadata constants for provider setup

Workflow parameters are pulled from:

  1. workflow.params if a workflow object exists in the module
  2. PARAMS module global
  3. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

renderflow-2026.6.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

renderflow-2026.6-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file renderflow-2026.6.tar.gz.

File metadata

  • Download URL: renderflow-2026.6.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

Hashes for renderflow-2026.6.tar.gz
Algorithm Hash digest
SHA256 fa0d9684b9a8effa212f9c9d66136bbdd51817c131e2dd2d15302ef690c7e1d9
MD5 53f1ac823502339d2156fe413f27c8eb
BLAKE2b-256 292ec721ecf22cba3b9fca37f72ac46ef70be4d319c735abfcfd7df424cdeef4

See more details on using hashes here.

File details

Details for the file renderflow-2026.6-py3-none-any.whl.

File metadata

  • Download URL: renderflow-2026.6-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

Hashes for renderflow-2026.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ae5ade817c7437da87b9777a84ec68b8a4c15d9bff4543cc4f6c967adc955cb9
MD5 f661fe3c751e86a6ac7ae740a112ba68
BLAKE2b-256 195f1b09265c0a3581e2b9d4495009b7bd472446b37e4233d98765609808b37d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page