A clean interface for navigating collections, items, and files
.eaf transcript on the timeline, beneath the recording it annotates — the playhead marks where playback is, and clicking an annotation seeks to it. Switch to Table for the same annotations as readable rows.Works without a web server — just open index.html directly in your browser.
Hierarchical browsing of your archive structure at every level.
Audio and video play in the page — whatever format your browser can decode, asked at render time rather than fixed to a list. Images too.
.eaf annotations render beside the recording they annotate — as a table, or as an ELAN-like timeline. The playhead highlights the current annotation, and clicking one seeks the player to it.
Search across items, collections, languages, and filenames.
RO-Crate rootDataset display with resolved linked entities.
A single curl command downloads and sets everything up.
Get up and running in under a minute
curl -fsSL https://github.com/crate-works/bowerbird/releases/latest/download/install.sh | bash
bashcurltardata/
└── {CollectionId}/
├── ro-crate-metadata.json
└── {ItemId}/
├── ro-crate-metadata.json
├── audio.mp3
├── audio.eaf
└── image.jpg
Or a single crate describing the whole collection — either shape works.
What does the install script do? It downloads the latest release tarball, extracts the pre-built viewer files, and runs the catalog generator against your data/ directory to produce the static browse and search indexes — and to parse any ELAN .eaf files into transcripts the viewer can render.
Need more detail? See the step-by-step guide below for a complete walkthrough with examples.
Place your RO-Crate files in data/{CollectionId}/{ItemId}/
A single curl command downloads the viewer and generates your catalog
Double-click index.html — no server needed
A detailed walkthrough for setting up the viewer with your data
Before you begin, you need Node.js (version 20 or later) installed on your computer. If you don't have it, visit nodejs.org and download the LTS version — it includes everything you need.
You also need curl and tar, which come pre-installed on macOS and Linux.
Create a new folder where the viewer and your data will live together. Open a terminal and run:
mkdir ~/my-archive
cd ~/my-archive
You can name this folder anything you like and put it anywhere. The installer will place the viewer files directly into this directory.
Place your RO-Crate data inside a data/ folder within your working directory. The generator finds every ro-crate-metadata.json beneath it and reads the collections and items out of the crates themselves, so the folder layout is up to you.
Most archives use one of two shapes. The first gives every item its own crate — this is what the PARADISEC catalogue exports:
my-archive/
└── data/
├── NT1/ ← Collection folder
│ ├── ro-crate-metadata.json ← Collection metadata (optional)
│ ├── 001/ ← Item folder
│ │ ├── ro-crate-metadata.json ← Item metadata
│ │ ├── NT1-001-001A.mp3 ← Audio recording
│ │ └── NT1-001-001A.jpg ← Image
│ └── 002/ ← Another item
│ ├── ro-crate-metadata.json
│ └── NT1-002-001A.mp3
└── AC1/ ← Another collection
├── ro-crate-metadata.json
└── 001/
├── ro-crate-metadata.json
└── AC1-001.wav
The second uses a single crate describing the collection and every item in it, which is what tools like lameta export:
my-archive/
└── data/
└── VKS4/ ← Collection folder
├── ro-crate-metadata.json ← The collection and every item in it
└── Sessions/
├── VKS4-001/ ← Item folder, no crate of its own
│ ├── VKS4-001-A.wav
│ └── VKS4-001-A.jpg
└── VKS4-002/
└── VKS4-002-A.wav
data/ (e.g. NT1, AC1)RepositoryObject in a crate — either its own ro-crate-metadata.json, or one crate covering the whole collectionro-crate-metadata.json is optional but recommended — it provides the collection name and description shown in the viewerFrom inside your working directory, run the install command:
curl -fsSL https://github.com/crate-works/bowerbird/releases/latest/download/install.sh | bash
This command does three things:
ro-crate-metadata.json files, and transcripts from any ELAN .eaf files it findsAfter it finishes, your directory will look like this:
my-archive/
├── data/ ← Your data (unchanged)
├── index.html ← Open this in your browser
├── catalog.js ← Generated search index
├── rocrate-data.js ← Generated metadata
├── transcripts.js ← Generated ELAN transcripts
├── generate-catalog.js ← Catalog generator script
└── assets/ ← Viewer CSS and JavaScript
Open index.html in your web browser. The easiest way is to double-click it in your file manager. From the terminal, you can run:
# macOS
open index.html
# Linux
xdg-open index.html
The viewer works in all modern browsers — Chrome, Firefox, Safari, and Edge. No web server is required; it runs directly from the file on your computer.
To share your browsable archive with others:
my-archive/ folder into a ZIP file. The recipient unzips it and opens index.html — no installation needed on their endpython3 -m http.server 8080