Skip to main content

Visual pipeline editor and runner for task automation

Project description

Loom Banner

Live Demo CI Docs PyPI

A lightweight visual pipeline runner for research.

Connect your Python scripts into a graph, tweak parameters, run experiments, see results — without setting up Airflow or learning a workflow framework.

Try the live demo — no installation required. Browse and run the example pipelines in your browser. (First load may take ~30s to wake up.)

Loom gives you a CLI runner and visual editor for pipelines defined in YAML. Your scripts stay as regular Python with argparse — no framework to learn, no rewrites needed.

It's designed for research workflows. For production orchestration, tools like Airflow or Kubeflow are better suited.

Installation

# Core runner only
pip install loom-pipeline

# With visual editor
pip install loom-pipeline[ui]

That's it. No configuration files to create, no external services to manage.

Quick Start

Clone the repo and try an example:

git clone https://github.com/ljubobratovicrelja/loom.git
cd loom
pip install -e .[ui,examples]

# Run a pipeline from the command line
loom examples/image-processing/pipeline.yml
Pipeline: 3 step(s) to run [parallel]
----------------------------------------
[RUNNING] grayscale
[grayscale] Converted to grayscale: .loom-url-cache/35bb4a6_Lenna.png -> data/grayscale.png
[SUCCESS] grayscale
[RUNNING] blur
[blur] Gaussian blur (radius=15): data/grayscale.png -> data/blurred.png
[SUCCESS] blur
[RUNNING] edge_detect
[edge_detect] Edge detection: data/grayscale.png -> data/edges.png
[SUCCESS] edge_detect
----------------------------------------
Completed: 3/3 steps succeeded

Or open it in the visual editor:

# Edit a single pipeline
loom-ui examples/image-processing/pipeline.yml

# Browse all example pipelines
loom-ui examples/

The editor opens in your browser where you can see the pipeline graph, run steps, and view outputs.

Building Your Own Pipeline

Add Loom to your project's environment:

pip install loom-pipeline[ui]  # or just loom-pipeline for CLI only

Now you can run pipelines from within your project. Here's how to set one up.

1. Point it at your scripts

Say you have some Python scripts that process data:

tasks/
  extract_features.py    # Takes video, outputs CSV
  train_model.py         # Takes CSV, outputs model
  evaluate.py            # Takes model + test data, outputs metrics

2. Describe the pipeline in YAML

# experiment.yml
variables:
  video: data/raw/recording.mp4
  features: data/processed/features.csv
  model: models/classifier.pt
  metrics: results/metrics.json

parameters:
  learning_rate: 0.001
  epochs: 100

pipeline:
  - name: extract
    task: tasks/extract_features.py
    inputs:
      video: $video
    outputs:
      -o: $features

  - name: train
    task: tasks/train_model.py
    inputs:
      data: $features
    outputs:
      -o: $model
    args:
      --lr: $learning_rate
      --epochs: $epochs

  - name: evaluate
    task: tasks/evaluate.py
    inputs:
      model: $model
    outputs:
      -o: $metrics

3. Run it

# Run the full pipeline
loom experiment.yml

# Run just one step
loom experiment.yml --step train

# Run from a step onward
loom experiment.yml --from train

# Try different parameters
loom experiment.yml --set learning_rate=0.01 --set epochs=200

# Override file paths
loom experiment.yml --var video=other_recording.mp4

# Run steps in parallel
loom experiment.yml --parallel --max-workers 4

# Preview without executing
loom experiment.yml --dry-run

# Clean all data (move to trash) and re-run from scratch
loom experiment.yml --clean
loom experiment.yml

# Preview what would be cleaned
loom experiment.yml --clean-list

4. Or use the visual editor

loom-ui experiment.yml

This opens a browser-based editor where you can:

  • See your pipeline as a visual graph
  • Drag and drop to reorganize
  • Run individual steps and see output in real-time
  • Quickly see which outputs exist (green) vs missing (grey)

You can also point it at a directory to browse multiple pipelines:

loom-ui experiments/    # Browse all pipelines in a folder

Each pipeline should be in its own subdirectory with a pipeline.yml file inside. See examples/ for the expected structure.

How Scripts Work

Your scripts stay normal Python with argparse. Just add a YAML block in the docstring so Loom knows the interface:

"""Extract features from video.

---
inputs:
  video:
    type: video
    description: Input video file
outputs:
  -o:
    type: csv
    description: Output features
args:
  --sample-rate:
    type: int
    default: 30
    description: Frames to sample per second
---
"""

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("video")
    parser.add_argument("-o", "--output", required=True)
    parser.add_argument("--sample-rate", type=int, default=30)
    args = parser.parse_args()
    # ... your code ...

if __name__ == "__main__":
    main()

The YAML frontmatter is optional but enables the editor to show input/output types and provide better validation.

Use Cases

Parameter exploration: Create parallel branches in your pipeline to test different configurations side by side.

Reproducible experiments: The YAML file captures your entire experiment setup. Commit it to git alongside your code.

Iterative development: Run just the steps you're working on. Loom tracks dependencies so upstream steps run only when needed.

Result organization: Variables point to file paths, so your outputs are organized by experiment configuration.

Philosophy

Loom is intentionally minimal:

  • No database — Everything is files: your scripts, YAML configs, and outputs
  • No external services — The visual editor runs a local server that stops when you close it
  • No lock-in — Your scripts work with or without Loom
  • No magic — Loom just builds shell commands and runs them

This makes it easy to adopt incrementally. Start with one experiment, see if it helps, expand from there.

License

MIT License — see LICENSE for details.


Built for researchers who want to see their experiments, not manage infrastructure.

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

loom_pipeline-0.2.1.tar.gz (315.1 kB view details)

Uploaded Source

Built Distribution

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

loom_pipeline-0.2.1-py3-none-any.whl (286.9 kB view details)

Uploaded Python 3

File details

Details for the file loom_pipeline-0.2.1.tar.gz.

File metadata

  • Download URL: loom_pipeline-0.2.1.tar.gz
  • Upload date:
  • Size: 315.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for loom_pipeline-0.2.1.tar.gz
Algorithm Hash digest
SHA256 45c30a4d64c9a0c46fc8e8b0d42345a51e01f1b9874bf84879fb2f37289e85c5
MD5 779df2e822c9f6991677a8ffd43361b1
BLAKE2b-256 039b9e0b2b0ab49ba3212de209b3ca412b97a99d395be5e6e8f5f58214383362

See more details on using hashes here.

Provenance

The following attestation bundles were made for loom_pipeline-0.2.1.tar.gz:

Publisher: publish.yml on ljubobratovicrelja/loom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file loom_pipeline-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: loom_pipeline-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 286.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for loom_pipeline-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0a6c76e2926e48ff1b96730e908de436225954d1588ec7a03691bd4e6a003be4
MD5 209deb53665de505506f5c5a828b44b3
BLAKE2b-256 df0b168a5e3bdf8297f59a782f9c63b6808b83951eafa1bab049af833f6d003b

See more details on using hashes here.

Provenance

The following attestation bundles were made for loom_pipeline-0.2.1-py3-none-any.whl:

Publisher: publish.yml on ljubobratovicrelja/loom

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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