album turns scientific routines into executable building blocks. A solution packages a routine with its own
environment, so it installs and runs with the same commands on Linux, Windows and macOS - whatever language or tool it
uses. Catalogs share solutions within a lab, a community or with everyone. Because every solution is a tested,
versioned building block, LLM agents can find and run solutions instead of inventing commands.
Album: executable building blocks for scientific imaging routines (arXiv:2110.00601)
Users
- one-point access to topic specific, not tool specific software solutions
- all solutions are installed in the same fashion across platforms (Linux, Windows, MacOS)
- browse existing catalogs easily online
- keep your data, run solutions locally
- let an LLM agent find and run solutions from your catalogs
Run a solution from a catalog
Create a solution, wrap existing tools
Run solutions in a data workflow
Every solution is one command with its own environment, so workflow engines such as Snakemake or Nextflow run it like any other step - even when the steps need conflicting dependencies. To run one solution on many files, use album-distributed.
Run solutions on the cluster / in the cloud
Install Album on the shared filesystem of an HPC cluster and run solutions in SLURM jobs, or build a container image of a solution and run it on a cloud VM.
Package your solution
When a solution is mature, make it last: build a container image, an installer that sets up Album and the solution with a double click, or publish each version with a DOI.
Repositories / releases
List of catalogs
This is a curated list of public catalogs. Please contact us to add yours to the list.
Follow this guide to learn how to benefit from Album catalogs and access their solutions.
- name / iddetails
- defaultAdd this URL to your local Album collection:https://gitlab.com/album-app/catalogs/default/
- helmholtz-imagingAdd this URL to your local Album collection:https://gitlab.com/album-app/catalogs/helmholtz-imaging
- This catalog is a collection of image data analysis solutions, curated by Helmholtz Imaging. These solutions were built for past or ongoing collaborations, projects, or support requests at Helmholtz Imaging and wrap existing tools or algorithms for common image data analysis problems.
- maintained by Helmholtz Imaging, developed here
- Browse catalog online
- image-challengesAdd this URL to your local Album collection:https://gitlab.com/album-app/catalogs/image-challenges
- A collection of solutions for recurring image challenges, curated by Helmholtz Imaging. They wrap existing software along the imaging pipeline, mostly for visualization, such as Fiji, napari, BigDataViewer, VTK and Blender. The catalog is also listed on Helmholtz Imaging CONNECT.
- maintained by the Helmholtz Imaging Support Unit at MDC, developed here
- Browse catalog online
- random-thingsAdd this URL to your local Album collection:https://gitlab.com/frauzufall/random-things
- copick-catalogAdd this URL to your local Album collection:https://github.com/copick/copick-catalog
- cellcanvasAdd this URL to your local Album collection:https://github.com/cellcanvas/album-catalog
- solutions.computational.lifeAdd this URL to your local Album collection:https://github.com/computationallife/solutions.computational.life
- cold-storageAdd this URL to your local Album collection:https://github.com/kephale/cold-storage
- album-utilsAdd this URL to your local Album collection:https://github.com/album-app/album-utils-catalog
- DL4MicEverywhereAdd this URL to your local Album collection:https://github.com/HenriquesLab/DL4MicEverywhere-album
- A collection of solutions that offers researchers an easy-to-use gateway to cutting-edge deep learning techniques for bioimage analysis. It features interactive Jupyter notebooks with user-friendly graphical interfaces that require no coding skills.
- maintained by DL4MicEverywhere team, developed here
- Browse catalog online
Example solution
An Album solution is a single Python file. It includes all metadata and entry points to installing and launching the solution via a joint setup method provided by the Album API.
The only mandatory arguments of the setup method are group, name, version and album_api_version. group, name, and version build the identifier of the solution.
Here is an example with (almost) all available solution setup parameters. It counts the words in a text file, and album test checks it: pre_test writes a sample text, run counts its words and test checks the count. Move the mouse over a line to see what it does. All setup parameters are described in the Album documentation.
from album.runner.api import setup
env_file = """ channels: - conda-forge dependencies: - python=3.12 """
def install(): print("Installing this solution...")
def run(): from album.runner.api import get_args args = get_args() words = len(args.input.read_text().split()) args.output.write_text(str(words)) print("Counted %s words in %s" % (words, args.input))
def pre_test(): import tempfile from pathlib import Path folder = Path(tempfile.mkdtemp()) text = folder.joinpath("text.txt") text.write_text("Album runs every solution in its own environment.") return {"--input": str(text), "--output": str(folder.joinpath("count.txt"))}
def test(): from album.runner.api import get_args count = get_args().output.read_text() assert count == "8", "expected 8 words, got %s" % count
def uninstall(): print("Uninstalling this solution...")
setup(
group="my-group",
name="count-words",
version="0.1.0",
album_api_version="0.7.3",
title="Count words",
description="Counts the words in a text file.",
solution_creators=["Your name"],
cite=[{"text": "Your citation text",
"doi": "your.citation.doi"
}],
tags=["text", "example"],
license="MIT",
documentation=["documentation.md"],
covers=[{ "description": "Cover image.", "source": "cover.png" }],
args=[{"name": "input",
"type": "file",
"required": True,
"description": "The text file."
}, {
"name": "output",
"type": "file",
"required": True,
"description": "The file the number of words is written to."
}], install=install, run=run, pre_test=pre_test, test=test, uninstall=uninstall,dependencies={"environment_file": env_file}
)





