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.1.0.tar.gz (312.2 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.1.0-py3-none-any.whl (284.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: loom_pipeline-0.1.0.tar.gz
  • Upload date:
  • Size: 312.2 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.1.0.tar.gz
Algorithm Hash digest
SHA256 0daea5bfe7a042ee83c6f45f19ed21782d36869cc86ecc0b2de8ad83b998b134
MD5 3369eab0c5d4ef985d98b9b69bccd1bc
BLAKE2b-256 15491b341a6e432b15160e9aee2ecffbb37cfe0ae3330db4fd0809da7f5ed9b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for loom_pipeline-0.1.0.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.1.0-py3-none-any.whl.

File metadata

  • Download URL: loom_pipeline-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 284.7 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5ed2e714f93e4023bc83023c958a686989e119efd0475751ff53b297ed5fb1c8
MD5 02a050b60418d043a62a1d42230c2c88
BLAKE2b-256 32bd91f7189f5f3454bc591fdf3a2e860b455140c8eb541bf148adb93d0053dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for loom_pipeline-0.1.0-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