Tutorial

Walk the BIDS Manager GUI and CLI workflow on real data.

One walkthrough from end to end. Seventeen steps take the GUI from an empty folder to a validated dataset, scanning, curating, converting, annotating and checking a real MRI dataset, and the section after them runs the same workflow from the command line. Read at your own pace, or download one of the six sample datasets and follow along on your own machine.

What makes BIDS Manager different.

It looks before it converts. Other tools ask you to declare up front what each series is, in a heuristic file or a configuration. BIDS Manager scans the raw data first and shows you what is actually there: every series, every entity guess, every confidence score. The table you edit is the same one the converter consumes, so what you see is what is written into your BIDS dataset.

It is a curation and annotation tool, not only a converter. Getting the files into the right folders is the easy half. The hard half is describing them: which run is which, what the task was, what the reference and the ground were, how much tracer was injected and when. You get a table to curate, templates that ask each question once for a whole study, per-recording overrides for the exceptions, and a record of where every answer came from.

It refuses to lose your data. If two recordings would be written to the same BIDS filename, the conversion stops and tells you which two files, instead of writing one over the other.

It tells you what is wrong, and where the rule comes from. The validator is part of the same application, reads the same BIDS schema, and cites the schema rule behind every finding.

How the tutorials fit together

Two ways in, and they do not repeat each other.

You are here

GUI and CLI overview

The complete workflow, explained once, for any modality. Every step of the interface in order, then the same work from the command line, then a reference for every command and flag. Where a step genuinely differs between modalities it carries a tab.

Read this to learn the tool, or to look up what a control does.

Six of them

Full tutorials by modality

One dataset, start to finish, with the detail that only applies to that kind of data: how subjects are worked out, which metadata the conversion can and cannot answer, what the real numbers are, and what typically needs fixing afterwards.

Read one to convert data of your own, alongside a dataset you can download and follow exactly.

MRI · MRI, advanced · PET · EEG · MEG · Multimodal

There is one more page, and it is a task rather than a route: defacing and skull stripping. Read it before an MRI or PET dataset leaves the people who collected it. It applies whichever route you took, because a face can be removed during the conversion or at any point afterwards.

Step 0

What you'll need.

  • BIDS Manager installed, and nothing else. The one-click bootstrap installer is the quickest path, and pip install bids-manager works too. Either way every conversion engine is installed with it, so there is no second tool to fetch before you start. See the installation guide.
  • One raw dataset. Either one of the six sample datasets below, each a small download from the University of Oldenburg cloud, or your own folder of recordings.
  • About 30 minutes. The GUI walkthrough runs seventeen steps and the command-line section runs five commands. Both drive the same engine, so the order is up to you.
Mental model

The workflow at a glance.

You begin by creating or opening a dataset project (the work is saved into it and is resumable). From there BIDS Manager runs in eight stages, alternating user-driven and engine-driven steps. Every step below mirrors what BIDS Manager does on disk, using the same engine the CLI exposes. The full interactive diagram is on the About page.

  1. Raw. Your input folder, scanned into a project.
  2. Scan. Read metadata from inside every file.
  3. Curate. Review every acquisition; filter what shouldn't convert.
  4. Convert. Run the right backend per modality.
  5. Enrich. Auto-fill required sidecar fields.
  6. Fix-ups. Open the Editor and fix anything the enrichment couldn't infer.
  7. Validate. Audit against the BIDS schema.
  8. BIDS. A schema-compliant dataset, ready to share.
Pick a dataset

Six sample datasets, one workflow.

The walkthrough below uses the primary MRI dataset (Oldenburg neuroimaging unit), but any of the six will follow the same seventeen steps. Each More info link opens that dataset's own page, with its folder tree, the real numbers from a full run, and the quirks specific to that modality. Those pages are also listed under Tutorials in the site navigation.

MRI

Primary walkthrough.

Oldenburg neuroimaging unit · 3 folders / 2 BIDS subjects · 33 inventory rows.

Small Siemens MRI dataset with T1w, T2w, BOLD, DWI, fmap, and physio. The cleanest end-to-end example, and the one the GUI walkthrough below uses.

EEG

PhysioNet motor imagery.

2 subjects · 14 EDF runs each · 28 inventory rows.

Shows the task-name override case: filenames carry only an opaque run token (S001R01...). The user assigns the real protocol task names in the interactive table before any conversion runs.

PET

One FDG scan, with its paperwork.

35 DICOM files · PMOD blood curves · 959 KB

A GE Advance phantom acquisition, the two blood curves drawn during it, and the operator's dose record. Covers the PET metadata template, attaching arterial blood to the run it belongs to, and the nine required fields no scanner writes down.

Multimodal

One participant, four modalities.

MRI, PET, EEG and MEG · 10 inventory rows · 57 MB

One visit through four machines, in four file formats. Produces a single inventory, three conversion engines in one pass, and the problem that makes multimodal hard: four modalities that disagree about who was scanned.

MEG

Elekta sample data.

2 subjects · 23 FIF files · multi-session inference.

Shows automatic session inference from date-named folders. Tasks parse cleanly (driving, rest, empty-room). Demonstrates the MEG conversion path through mne-bids.

MRI advanced

Richer Siemens dataset.

3 folders / 2 BIDS subjects · 51 inventory rows · 19 skipped.

The deep dive. T1w / T2w / T2starw / FLAIR anatomicals, BOLD plus SBRef, DWI with FA / colFA / trace / TENSOR derivatives, fmap pairs, Siemens CMRR physio.

GUI walkthrough

The GUI walkthrough, step by step.

Eighteen steps, from an empty window to a validated dataset. The steps are the same for every modality; where a modality genuinely differs, the step carries a tab for it. Each step is listed separately in the page navigation, so you can come back to one of them without scrolling through the rest.

One workflow, whatever you are converting.

The examples use the primary MRI dataset, because it exercises anatomical, functional, diffusion, fieldmap and physiological data in one small folder. Only the engine behind each row changes: dcm2niix for DICOM, mne-bids for EEG and MEG recordings, pet2bids for PET ECAT and blood curves, and bidsphysio for the physiological signals stored inside Siemens MRI DICOM files. For per-modality detail see the MRI, PET, EEG, MEG and multimodal pages.

Step 1

Create a project

Everything you do lives inside a project. A project is your dataset folder plus a hidden record of every scan you have run and every edit you have made, so you can close the application and pick the work up exactly where you left it.

On the Home tab choose Create, give the dataset a folder and a name, and BIDS Manager scaffolds dataset_description.json, a README and a .bidsignore for you. If you have worked on this dataset before, choose Open, or pick it from the recent list.

The name you type here is written into dataset_description.json as the dataset title. If you later change that name, BIDS Manager asks whether you meant to rename the project folder as well, or to keep the folder name and use the new one as the dataset title. It does not guess.

What you should see now: the Converter tab, with an empty inventory table and the project name in the header.

Create scaffolds a new BIDS dataset, with dataset_description.json, a README and a .bidsignore, and starts the project that records everything you do next. Open continues a project you already started, or adopts a dataset created elsewhere. From this point the BIDS output is fixed to the project you chose, so there is no second output path to set and no way to convert into the wrong folder by mistake.
Before you scan

Two settings worth a look first.

The defaults are chosen so you can convert a dataset without opening Settings at all, and most of what is in there can wait. Two things are worth knowing before you start, because they are easier to set now than to change later. The gear is in the header.

Which version of BIDS you are working to

The first tab decides which version of the standard this session works to, and it reaches everything downstream: the fields the metadata forms ask for, the entities a filename may carry, the BIDSVersion written into dataset_description.json, and the rules validation judges the result by.

Leave it on the newest for a new dataset. Change it when you are adding to a dataset that was built against an older version, so the forms ask for that version's fields and validation does not report changes the standard made after your data was collected.

The BIDS version tab of the Settings dialog, with a summary of the selected version
One choice, applied everywhere. The summary line under the dropdown says what the selected version actually contains, here 16 datatypes, 35 entities and 449 metadata fields, so the choice is not an abstract number. The command line takes the same choice per run as --schema.

What happens automatically after a conversion

The Convert and post-convert tab holds the chain that runs after every conversion: generate the metadata, mark what could not be filled, validate, and write a report. It is all on by default, which is why the walkthrough below can go straight from converting to reading findings without a separate step.

The setting in the same tab that matters most is Existing subjects. The default, Skip, keeps what is already in the dataset and adds only what is new, so re-running a conversion is safe. The others exist for when you deliberately want to replace something.

The Convert and post-convert tab, showing the conversion defaults and the post-conversion chain
The chain, as a hierarchy. Each step is a checkbox, and the indented ones belong to the step above them, so turning off validation turns off the deep checks and the report with it.
The rest can wait.

Scan rules, the validation filters, worker counts and the display options are all covered in the GUI tour, tab by tab. Nothing in them needs setting before a first conversion.

Step 2

Point at your raw data

Press Scan and choose the folder holding your raw recordings. Point at the top of the tree, not at one subject. The scanner walks down through everything below it and works out subjects, sessions and series for itself.

You do not have to tell it what is in there, and you do not have to separate the modalities first. A folder holding MRI DICOM, EEG recordings and PET data all at once produces a single inventory with every recording in it.

Nothing is written yet.

Scanning only reads. No file is converted, moved, renamed or written to disk until you press Run conversion in Step 11.

Choosing the raw input folder. It can hold DICOM directories, EDF, FIF or BrainVision files, CTF .ds folders, ECAT files and physiological logs, in any arrangement. The Scan button enables once the path is valid, and this is the only path you set: the output was fixed when you opened the project.
Step 3

Run a scan

The scan opens every file it finds and reads the metadata inside it. Not the filenames: the headers. For DICOM that means the acquisition parameters, the study and series identifiers, the patient identifiers used to group subjects, and the timestamps. For EEG and MEG it means channel counts by type, sampling frequency, duration, and the recording date used to infer sessions.

It then classifies each recording, proposing a datatype and a suffix with a confidence score, and builds one row per recording.

Probe convert, and why to leave it on

With probe convert enabled, the scan additionally runs the converter once per series and reads the sidecar it produced. That is how BIDS Manager knows, before you have typed anything, which metadata fields the conversion is going to answer by itself. Those fields are then shown to you as already answered rather than asked for. It costs some scanning time and saves a great deal of typing.

What you should see now: the inventory table filled with rows, and the chips in the toolbar showing how many are valid, how many carry warnings, and how many were auto-skipped.

A scan of the MRI sample dataset. The status line names the stage it is in, walking the folder, reading headers, grouping subjects, and the chips settle on their final counts: 21 recordings to keep and 12 localisers and scanner reports skipped automatically, 33 rows in total. Because the scanner reads inside the files rather than trusting their names, mixed subjects, repeated takes and residual volumes all arrive as separate rows you can see.

DICOM is grouped into series by their identifiers, and subjects are grouped by the patient identifiers rather than by folder, so two subjects mixed in one folder appear as two rows. Sessions come from the study identifiers and dates. Probe convert runs dcm2niix once per series.

Formats are detected by reading the file rather than its extension, so an ECAT file renamed by your site is still recognised by its MATRIX7x signature. A PET/CT study converts its PET half and excludes the CT with the reason shown, because BIDS has no CT datatype. A PET/MR study converts both halves in one pass.

Every recording is opened and asked the same questions mne-bids will ask: channel counts by type, sampling frequency, duration and recording type. Subjects come from path heuristics, and sessions are inferred from the recording date when the path carries no session token. A format that cannot be read, such as an ANT .cnt without its optional reader, appears as an excluded row with the reason, rather than disappearing silently.

Step 4

Read the inventory

One row per recording, whatever produced it. A PET DICOM series, a Siemens physiological log, an EEGLAB file and a MEG FIF all arrive in the same table with the same columns, which is what lets you curate a multimodal study as one piece of work instead of four.

The inventory table with PET, MRI, physiological, EEG and MEG rows together, each with its format and confidence
Four modalities, one table. Read down the format column: DICOM, EEGLAB, FIF. Read down conf and you can see how the classification was reached: 1.00 where the file format itself settles it, 0.85 where the converter's own guess agreed with the schema, 0.45 where only the sequence name suggested it. The low ones are the rows worth reading before you convert.

Before changing anything, read what the scan found. These are the columns that carry the most information.

ColumnWhat it tells you
the tick boxWhether this row will be converted. Untick to leave it out.
the status iconValid, warning, error, skipped, or an object with no image data. Hover it for the reason.
idThe subject label this recording was grouped under.
sesThe session, where there is one.
data, suffixThe datatype and suffix the classifier decided on.
confHow sure the classifier is. Low values are worth reading.
originThe source folder the recording came from.
formatDICOM, ECAT, EDF, FIF and so on, so you can see what came from where.
sequenceThe original scanner or file label, kept beside the BIDS name so you can check a classification.
predicted basenameThe exact BIDS filename this row will produce.

Those are the columns shown by default. There are around forty in all, and Manage columns below the table shows, hides and reorders them; the layout is remembered. Channel counts, sampling rate, duration, patient details and the proposed-issues text are all there, hidden until you want them. Each carries a description of what it holds, so an unfamiliar one can be identified without leaving the dialog.

Three headings differ from the column behind them.

Most of the table's headings are the name of the TSV column, so session, datatype and modality are what you will find in the file. Three are not: subject is participant_id, suffix is bids_guess_suffix, and confidence is bids_guess_confidence. It matters when you open the TSV in a spreadsheet, or read the CLI reference, which names the file's columns rather than the table's headings.

Inventory rows the scan set aside, each carrying the reason in the issues column
What the scan set aside, and why. The teal row with the crossed circle is an object carrying no image data at all. The dimmed rows are localisers, excluded automatically. The blue-ticked rows below are keepers. Every row's reason is in the issues column, hidden by default and shown here; hovering a row gives the same text as a tooltip.

What the row colours mean

Rows are tinted so that problems are visible without opening anything. A red row has an error that will stop it converting or that needs your decision. An amber row carries a warning worth reading. A dimmed row is excluded. A teal row with a crossed-circle badge is an object with no image data inside it, such as a Siemens TENSOR map or a scanner report, which cannot be converted at all and has been excluded with the reason shown. Hover any row to see why it is marked.

The inventory, one editable row per recording, tinted by status so that anything needing attention is visible without opening a file. The sequence column keeps the original scanner label beside the predicted BIDS name, which is how you check that a classification is right. Any cell can be edited by clicking it.
Step 5

Curate: include, exclude, rename

This is the step the rest of the workflow depends on. Everything you decide here is what gets converted, and nothing is written to disk until you are finished.

Excluding what you do not want

The first column of the table is a tick box, and it is the only thing that decides whether a row becomes a file. Untick anything that should not be in the dataset: localisers, calibration scans, a run that was aborted and repeated. The scan already excluded what it could recognise as unconvertible, but only you know that the second T1w was the one worth keeping.

The inventory table with five rows ticked and four unticked, the unticked ones dimmed and showing no predicted name
The answer is visible without reading the column. A ticked row is bright and shows the name it will be written under. An unticked one is dimmed and shows no name, because it is not going to have one. Nothing is deleted and nothing is written: unticking is a decision you can change until you press Run. The teal row is a different case again, a DICOM object with no image in it, which the scan set aside for you and explains on hover.

You can also work from the Filter / structure tree on the left, which shows the same recordings grouped by subject, session and datatype. Unticking a folder there unticks everything inside it, which is how you drop a whole session or a whole datatype without hunting for its rows in the table. It is one model shown two ways, so a change in either is a change in both.

Editing many rows at once

Select several rows and use Bulk edit to set the same value on all of them: a task label across fourteen runs, a session across a whole subject. This is the fastest way to fix a systematic naming problem.

It also removes an entity, and both the set and the remove are applied row by row. Select the whole study and ask for the acquisition label to go: it comes off the rows that have one and are allowed to lose it, and the rest are left alone rather than the edit being refused. A _bold keeps its task because the schema requires it; an anatomical row does not have to. The dialog says how many rows it will touch before you tick anything.

The bulk edit dialog with all 56 rows selected and the acquisition entity set to be removed, taking it off the 6 rows that carry one
Every row selected, and only six change. This is the whole inventory, fifty-six rows across MRI, PET, EEG and MEG, with the acquisition label set to go. It comes off the six rows that carry one and every other row is untouched, and the dialog says so twice before anything is written: in the count under the tick and on the button. Removing is not the same as blanking a cell, which used to leave the entity in the filename. Subject is never offered: the participants.tsv row has to travel with it, which is what Rename in the Editor is for.
Bulk edit. Select the rows, choose the column, type the value once, and it is written to all of them. The alternative, editing a task label on fourteen rows by hand, is where transcription mistakes come from.

Finding the rows you need

The Filter pane narrows the table by subject, datatype, modality or status, which matters once an inventory runs to hundreds of rows. Manage columns lets you show, hide, reorder and resize columns, and every column carries a description of what it holds.

The table opens with subject, format, session, datatype, suffix, BIDS name and sequence first, which is the order a row reads in. If you have already arranged the columns to suit yourself, that arrangement is left alone; Reset defaults in the Manage columns dialog puts them back to that order whenever you want them back.

The Manage columns dialog listing every inventory column with its description and a Reset defaults button
Every column, with what it holds. The inventory carries far more columns than any one dataset needs, so the dialog explains each before you decide to show it.
Filter and structure. The same recordings shown as a tree grouped by subject, session and datatype, with tri-state checkboxes. Filter to bring a subset into the table, or untick a whole group to leave it out of the conversion. It is one model shown two ways, so a change in either is a change in both.
Manage columns. The inventory carries more columns than any one dataset needs, so show, hide, reorder and resize them to suit what you are curating. Each column comes with a description of what it holds, and your layout is remembered.

One row at a time

Select a row and the properties panel on the right shows its entities as editable fields, at the level BIDS sets: a red asterisk for required, an amber dot for recommended. Below them is the predicted path, so you can see the consequence of an edit immediately, and any validation messages for that row.

An entity that carries a value and is allowed to do without one has a × beside it that takes it off this recording. Clearing the field does the same thing, but nothing on screen said so: an empty box reads as not filled in yet rather than as an instruction. Required entities have no button, because there is nothing to offer.

The properties panel for an anatomical row, with a remove button beside the session and acquisition entities and none beside subject
The schema decides what is offered. On this anat/T1w row, session and acquisition can be taken off and subject cannot, so only the first two carry the button. The predicted path below updates as you edit.
Per-row properties. The panel is built from the schema for the row you selected, so only the entities BIDS allows for that datatype and suffix appear, and the predicted path updates as you type. EEG, MEG and PET rows also carry their recording metadata here, where an answer can be set for one recording without changing the rest of the study.
Step 6

Resolve duplicate names

Two recordings must never end up with the same BIDS filename. If they do, the second is written over the first, and a scan disappears from your dataset without anything being reported.

BIDS Manager works out the destination of every included row before converting anything, and handles the two cases differently.

When BIDS has an answer, it is applied

If several recordings genuinely are repeats of the same thing, and the standard allows a run entity for that datatype, they are numbered run-1, run-2 and so on. The order is by acquisition time where the files record one, and by source path otherwise, so re-scanning the same folder gives the same numbers rather than shuffling filenames underneath you. The scan tells you it did this.

When it does not, the name turns red

A run number is the right answer for two repeats of one acquisition and the wrong answer for two different tasks, and nothing in the file can tell those apart. So where a run cannot be assigned, because the datatype does not allow one or because a run is already set and the names still clash, the predicted basename is shown in red and left alone.

Hover the row to see why. Then change whichever entity actually differs: a task label if they are different tasks, a session if they were acquired on different days, a run if they really are repeats. The red clears as soon as the clash is resolved, on both rows at once, because it is recomputed from the table as it stands rather than remembered from the scan.

Conversion refuses while any name is duplicated.

It stops before writing anything and lists the clashing name along with every source file competing for it. Excluding one of the rows also resolves it, since an excluded row is never written.

A worked example. A workshop EEG tree gives each subject a rest folder and a video folder, both containing a recording named after the participant code. Both resolve to the same BIDS name. The right fix is not a run number: it is a task label, because they are different tasks. That distinction is exactly what BIDS Manager declines to guess.

Three inventory rows resolving to the same BIDS name, shown in red, above two rows given run numbers automatically
Both halves of the answer in one table. The top three rows are three different recordings that all resolve to sub-014_pet. No entity distinguishes them, so all three names are red and the conversion will refuse to start. The two rows below them were also duplicates, of the same subject and the same scan, and a run number is what the standard allows there, so they were separated automatically into run-1 and run-2. Fixing a red row clears the red on every row it was clashing with, because the state is worked out from the table as it stands rather than recorded when the scan ran.
Step 7

Fill the metadata template

Getting the files into the right folders is the quick part. Describing them correctly is the part that takes the time, and this step is where most of that work happens. Open Dataset metadata.

A section speaks for every file of its kind

This is the thing to understand before anything else. A section headed

every *_bold.json · in func/ · 61 files · for example sub-003_task-rest_bold.json

is not a form about sub-003. It is the statement you are making about all 61 functional runs in the dataset. Answer it once and it is written into every one of them. The real filename is shown only as an example of what the section covers.

What it does not ask you

The template does not ask for anything your data has already answered. Fields the conversion will fill by itself appear in a folded green block at the top of each section, headed Already answered by the conversion, showing the value that will be written.

That block is editable, and deliberately so. The converter reads those values out of your data, and when the data is wrong, or a legacy file carries nothing, this is the only place to correct it. Typing nothing there changes nothing.

Reading the form

MarkMeaning
Red asteriskThe standard requires this field for this kind of file
Amber dotThe standard recommends it
UnmarkedOptional
Greyed valueInherited from a broader level; the tooltip says which
differs per recordingThe scan found your files disagree, so the answer belongs on the row, not here
N to answer, M required by BIDSThe section heading, telling you what is still missing

Every field carries the standard's own description as a tooltip, on the label and on the box, so you do not need to keep the BIDS specification open beside you. Fields with a fixed vocabulary offer it as a dropdown you can still type into.

Values are typed, not just text

Whatever you type is converted into the shape the schema declares before it is written. A mains frequency reaches the sidecar as the number 50, not as the string "50", which BIDS would reject.

The dataset metadata dialog with the modality-agnostic and modality-specific sections open
The metadata template. Each section covers every file of one kind at once, so a question is answered once and written into all of them. Required fields carry a red asterisk. The green Already answered by the conversion block holds the fields the conversion fills by itself, shown so you can check them rather than type them again. Every description in the form is the BIDS standard's own wording, so what you read while answering is what the specification says.

What the form looks like for your data

The dialog is built from the standard and from what your scan found, so it asks a different set of questions for each modality. Pick yours:

MRI is the modality that asks you for least, because a DICOM header states most of what BIDS wants. Nearly everything arrives in the green block already answered, and your job is to read it rather than type it.

The MRI section of the template with the green already-answered block open, showing 29 fields filled from the DICOM header
Twenty-nine fields you do not have to type. This is the Already answered by the conversion block opened up on an anatomical section: manufacturer, model, coil, field strength, echo and inversion times, the institution, all read out of the DICOM header. It is folded away by default because the form is about what is still missing, and it is editable rather than read-only because when the header is wrong this is the only place to correct it.

EEG is the opposite case. An EEG header records the signal and very little about the setup, so the standard's three required fields have to come from you.

The EEG section of the template, with red asterisks on EEGReference, PowerLineFrequency and SoftwareFilters
Three red asterisks at the top. EEGReference, PowerLineFrequency and SoftwareFilters are required and no file states them, so nothing can fill them but you. Below them, amber dots mark what the standard recommends: the cap, the ground, the device, the institution. Answer them here and every EEG recording in the dataset carries the same answer.

MEG sits in between. mne-bids derives the channel counts, the sampling rate and the head-coil fields from the recording, so the template asks only for what the file genuinely cannot say.

The MEG section of the template, asking for dewar position, associated empty room and subject artefacts
Only what the file cannot say. Dewar position, which noise recording belongs to this session, and anything in the subject that shows up in the data, such as dental work. Notice what is not asked: the channel counts, the digitised head points and the head-coil frequencies are all derived from the recording, so asking for them would only invite a second, disagreeing answer.

PET asks the most, and not because the format is poor. The numbers BIDS requires, injected dose and mass, specific activity, how the tracer was given, are recorded on a dose sheet at the scanner and never enter the image file at all.

The PET groups of the template: radiochemistry, dosage, reconstruction and blood
Grouped the way the standard groups them. Radiochemistry, dosage, the reconstruction, and, when you have linked blood curves, a section for those. Each field carries the standard's own description, which is worth reading here more than anywhere else: the units for dose and specific activity are easy to get wrong, and a wrong unit produces a number that looks plausible.
Step 8

Override an answer for one recording

The dataset template states what is true of every file of a kind. Two things are usually not true of every file: something that genuinely varies, and something that was wrong for one session only.

Select the row and answer in the properties panel instead. A per-recording answer always beats the dataset answer, for that recording alone. An inherited value is shown greyed, with a tooltip naming where it came from, so you can always tell what you set from what you are inheriting.

Editing an inherited field back to the dataset value clears the override rather than storing a duplicate, and changing the dataset answer re-flows into every row still inheriting it.

Where the answers are kept. Nothing is written into your BIDS dataset at this stage. Answers live beside the inventory until the metadata step applies them, which means you can change your mind freely, and re-run a conversion without losing them.

The same panel, on four kinds of recording

The panel is built from the schema for whatever row you selected, so it asks a different set of questions on each one. What stays the same is the shape: the entities that make the name, the path they produce, then the metadata, with the questions every modality shares kept separate from the ones only this modality has.

The properties panel on an anatomical run: entity fields, the predicted path, and a scanner warning
On MRI the work is the naming. Datatype and suffix at the top, then every entity the standard allows for this kind of file, with a red asterisk on the ones it requires. Underneath, the path this row will produce, which updates as you type, and any message the scan raised about it. Here the scan is telling you that this folder held more than one study, which is worth knowing before you convert it as though it were one.
The properties panel on an EEG recording, showing the reference and montage section
On EEG the work is the metadata. Below the entities, the same reference, ground, mains frequency and montage the dataset template asks for, scoped to this recording alone. A blank field inherits the study answer and is shown greyed with a tooltip naming where it came from; typing in it overrides the study answer for this file only.
The properties panel on a MEG recording, with the predicted path, a valid entity set and the shared metadata region
The schema checks as you go. The green line confirms that the entity set is one the standard permits for a MEG recording, and it turns red the moment it is not, before anything has been written. Below it the panel separates the questions every modality shares, the participant and the companion files, from the ones only MEG has.
The properties panel on a PET run, with the tracer, radionuclide and dosage fields for this scan
Where one scan differs from the rest. PET is the modality where per-recording overrides earn their keep: a study can share a tracer and a reconstruction and still have one subject injected with a different dose. Answer the dose once for the study and correct it here for the one scan it is wrong for.
Step 9

Attach companion and blood files

Some of what belongs in a BIDS dataset never passes through the scanner. The events your stimulus software wrote, a behavioural log, the stimulus files themselves, a channel table somebody corrected by hand, the electrode positions a digitiser produced, and for PET the arterial blood curves. BIDS has a place for all of them, and the software cannot invent any of them, so this is the step where you say which file goes with which recording.

Every row can carry companions, whatever it holds. Companions are not an EEG feature or a PET feature. An MRI functional run has events, a behavioural session has a _beh.tsv and no image at all, and a physiological recording can arrive as a separate file. Select a row, then find COMPANION FILES in the properties panel on the right.

The companion files section of the properties panel, with a kind dropdown, a Link file button and a Remove button
On every row, whatever the modality. Pick the kind, choose the file, and it is copied into the dataset when the conversion runs, renamed to match the recording it belongs to. You never type the destination name: it is the recording's own name with the companion's suffix, so it cannot drift out of step.

The six kinds, and when you would use each

KindWhat it isTypical source
events What happened during the run and when. Onsets, durations and condition labels. Presentation, PsychoPy, E-Prime, a lab script
beh Behavioural measures for a task: responses, accuracy, reaction times. Can also stand alone as a run with no imaging data. The same stimulus software, or a questionnaire tool
stim A continuous stimulus trace sampled alongside the recording, such as an audio envelope or a video luminance signal. The stimulus computer
physio Continuous physiological signals: pulse, respiration, skin conductance. Only needed when they are a separate file. Siemens physio stored inside the DICOM is converted for you and needs no link. BIOPAC, a pulse oximeter, a respiration belt
channels The channel table for an electrophysiology recording: name, type, units, status. Link one when you have corrected it by hand rather than accepting what the header says. Your own quality control
electrodes Where the electrodes actually were, in coordinates, which matters for source analysis and is not in most recordings. A Polhemus or optical digitiser
You do not have to link the obvious ones.

A companion that already sits beside the recording in a form the converter understands is picked up on its own: the channel table and sidecar that mne-bids writes from an EEG or MEG header, the .bval and .bvec that come out of a diffusion series, the physiological trace stored inside a Siemens DICOM. This step is for the files that live somewhere else, in a format nothing can guess.

Event codes, while you are here

A recording usually carries numeric trigger codes rather than labels, and only you know that code 3 was the target condition. You do not link a file for that: the recording metadata dialog takes the labels once for the whole dataset, and the conversion writes them into events.tsv and its sidecar, so every run gets the same vocabulary.

PET blood is a companion too, but it is converted

Blood curves have their own section, BLOOD SAMPLING, because they are the one companion that is not simply copied. A PMOD .bld export is read, merged and rewritten as a BIDS blood table, with the sample times converted to seconds. Three curves are linked separately: whole blood, plasma, and parent fraction.

For each, say whether the samples were drawn manually or by an autosampler. This is not a formality: hand-drawn and autosampled series have different time resolution, so BIDS writes them into separate files, and your choice decides which file each curve lands in.

The blood sampling section of the properties panel, with whole blood, plasma and parent fraction each set to manual or autosampler
Attaching blood data to a PET run. The three curves the standard recognises are linked separately, and each is marked as manually drawn or taken by an autosampler. That answer is not cosmetic: it decides an entity in the filename, so the preview changes to recording-manual or recording-autosampler as you set it.

After conversion you get sub-001_trc-FDG_run-1_recording-manual_blood.tsv and its sidecar, carrying the run's own entities so a subject with two tracers gets two distinct sets rather than two files competing for one name. The data dictionary is generated from the table that was actually written, and the availability flags follow from what you linked, so you are never asked to state them.

Linking blood also adds an every *_blood.json section to the dataset template, asking for what the curves cannot tell you: whether the plasma was dispersion corrected, which BIDS requires, the withdrawal rate, the tubing, the haematocrit. If you linked a parent fraction curve it also asks how metabolites were measured, because that requirement applies only when metabolite data exists.

Step 10

Preview the BIDS tree

Before converting, open the BIDS preview in the bottom panel. It shows the exact folder structure and the exact filenames your current table will produce, built from the same schema the converter uses.

This is the last cheap moment to notice that a subject label is wrong, that a session is missing, or that a task name reads task-Rest in one row and task-rest in another. Reading the tree takes a minute; fixing it afterwards means converting again.

What you should see now: a tree of sub-*/ folders with datatype folders inside them, and no name appearing twice.

The BIDS preview. The exact layout the conversion will produce, every folder, filename and sidecar, before anything is written. If a name here is not the name you want, the moment to fix it is now, while it costs one edit rather than a re-run.
Step 11

Run the conversion

Press Run conversion. Each row is sent to the engine that reads its format: dcm2niix for DICOM, mne-bids for EEG and MEG recordings, pet2bids for ECAT and blood, bidsphysio for the physiological signals inside Siemens MRI DICOM files. You do not pick the engine; the row's format does.

What happens while it runs

Files are written into a private staging folder per subject first, and moved into place only when that subject converted successfully. A failure therefore leaves no half-written subject behind. If one file defeats its engine, that failure is contained: the row is reported and every other row still converts.

Conversion also repairs what the engines get wrong on the way out: fieldmaps are renamed to their BIDS suffixes and given an IntendedFor list, scans.tsv is written, key casing and scalar-where-array mistakes in sidecars are corrected against the schema.

You can stop a running conversion. It finishes the file it is on and stops cleanly rather than leaving a partial dataset.

Convert and metadata are two different steps.

Conversion produces a faithful conversion and repairs only what the engines got wrong. It does not apply your template answers. The metadata step does that, and the GUI runs it immediately afterwards, which is why from the Run button it looks like one action. Running the conversion alone, from the CLI, gives you a conversion with no opinions in it.

The conversion running. Each row goes to the engine that reads its format, and the log streams what every one of them did. Subjects are built in a private temporary folder and moved into the dataset only once they have succeeded, so an interrupted run leaves no half-written subject behind.
Step 12

Read what the conversion reported

Open the Log in the bottom panel when it finishes. Read it even when everything succeeded, because it tells you what was done on your behalf.

You may seeWhat it means
A row reported as skippedIt was excluded, or it had no image data to convert. The reason is given.
Residual outputs droppeddcm2niix split one series into the real image plus derived single-volume copies. The copies are dropped by default; a setting keeps them.
An engine error on one fileContained. The rest converted. The detail is written to a log file inside the project.
Fields filled after conversionThe metadata step applying your template and the enrichment.

For the other half of the question, what you actually ended up with, the Editor has a Dashboard under Tools: how many subjects, which modalities, how much of the metadata each one has answered, and which subject is the odd one out. The log says what happened; the dashboard says what you have. It is covered in the GUI tour, and you will use it in a moment.

What you should see now: a populated BIDS dataset on disk, and the Editor tab ready to open it.

Sharing this dataset later?

A head scan contains a face, and a face can be rendered from one. BIDS Manager can remove faces during the conversion itself, so the identifiable image never enters the dataset, or afterwards from the Editor's Tools menu, and it shows you the before and the after side by side so you can check. Defacing and skull stripping →

Step 13

Open the dataset in the Editor

Switch to the Editor and open your converted dataset. This is where you review and repair what the conversion produced, without needing any other software.

The window has three parts. On the left, the BIDS tree of your dataset, with every row carrying how many findings are inside it: warnings in amber, errors in red, a green tick where there is nothing to report. In the centre, whatever you have selected, opened in the right viewer for its type. On the right, the validation pane listing findings for the dataset, the folder and the selected file.

The chips in the toolbar summarise the whole dataset at a glance, and clicking one opens the list of files carrying that severity, so you can work through the problems rather than hunting for them.

The whole Editor window: BIDS tree, sidecar viewer and validation pane, with the severity chips in the toolbar
The Editor, in one frame. The toolbar validates at three scopes and carries the Deep checks toggle and the severity chips, which summarise the whole dataset in three numbers. Below it, the three panes: the BIDS tree with the findings counted on every row, the viewer showing whatever you selected, and the validation pane listing findings for the dataset, the folder and the file, each with the schema rule it came from. Clicking a chip opens the list of files carrying that severity.
The Editor's BIDS tree with the number of errors and warnings on every file and folder
The tree tells you where to look, and how much. Every file carries how many findings are inside it, amber for warnings and red for errors, with a green tick where there is nothing to report. A folder adds up what it contains rather than showing the worst of it, and says what it holds, so a subject can be read without expanding it. The number is the useful part: one missing recommended field looks nothing like ninety.
The Editor, opened on the converted dataset. The severity chips in the toolbar are clickable: open the errors or warnings, click a finding, and the file that caused it opens in the viewer. Fix it, re-validate, and watch the count fall.
Step 14

Edit sidecars and tables

Selecting a file opens it in an editor built for its type. Both are editing surfaces, not just viewers: what you change is written back to the file.

JSON sidecars

A .json sidecar opens as a schema-aware form, not as raw text. Every field the standard declares for that datatype and suffix is listed, in requirement order, whether or not the file contains it: required fields first with a red asterisk, then recommended, then optional. Fields the file carries but the standard does not define are shown too, so nothing is hidden from you.

Each row carries the standard's own description, so you can see what a field means while you fill it. This is the view that makes a sidecar reviewable by someone who does not have the specification memorised.

The Tree view tab shows the same file as a plain two-column key and value tree, which is the faster way to read a file you already understand, or to inspect keys that fall outside the schema.

A JSON sidecar shown as a schema-aware form, with fields colour-coded by requirement level
The sidecar form. The coloured bar on each field is its level in the standard: red required, amber recommended, grey optional. Values read out of the DICOM header are already filled in, RepetitionTime, EchoTime, FlipAngle, and the fields nothing could fill hold the literal TODO that makes them findable. The footer counts what the file has, what is missing, and how many findings it carries.

TSV tables

A .tsv file, such as participants.tsv, events.tsv or channels.tsv, opens as an editable table. Click a cell, type, and the file is updated.

Large tables stay usable: the file is read on a background thread so the window never freezes, and only the visible cells are drawn, so a table with two million rows opens as quickly as a small one.

Undo

Editing is undoable. The toolbar carries undo and redo covering both sidecar edits and table edits, so you can try a change and step back from it.

The sidecar form. A JSON sidecar shown as the fields the standard declares for that datatype and suffix, in requirement order and colour-coded by level, each with the standard's own description beside it. Fields the file carries that the schema does not define are shown too, so nothing in the file is hidden from you. The Tree view tab shows the same file as raw keys and values.
The table editor. participants.tsv, channels.tsv, events.tsv and the scans tables open as editable tables. The file is read on a background thread and only visible cells are drawn, so a table with two million rows opens as quickly as a small one and the window never freezes while you scroll.
Step 15

Look at the images and signals

The Editor opens your converted data directly. You do not need a separate image viewer or a separate signal browser to check that a conversion produced what you expected.

The image viewer. One plane at a time, or Multi-Planar for sagittal, coronal and axial sharing a single crosshair: click or drag in any of them and the other two follow. The crosshair colour and thickness are yours to set and are remembered.
The 4-D graph. Click a voxel and see its value across every volume, beside the slices. It is the quickest way to catch drift, spikes or motion in a BOLD run without leaving the application. On a dynamic PET run the axis is real seconds rather than a frame index.
The signal viewer. A metadata card first, read without loading the data, then Load signal for the interactive view: choose channels, scroll and zoom, apply high-pass, low-pass and notch filters, resample, open the power spectrum, and overlay the events from the BIDS events.tsv beside the recording.
The power spectrum of an EEG recording, with a sharp peak at the mains frequency
The power spectrum. Two tabs, every channel overlaid and an average per channel type with a standard deviation band. The tall spike is the mains frequency, which is how you confirm that the PowerLineFrequency you wrote into every sidecar is the one actually in the data. A channel sitting well away from the rest is usually a bad electrode.

A .nii or .nii.gz file opens in the image viewer. Start in the single-plane view, or press Multi-Planar for sagittal, coronal and axial side by side, sharing one crosshair: click or drag in any plane and the other two follow.

Scroll with the wheel to move through slices, and use the brightness and contrast controls for a volume that looks flat. The crosshair colour and thickness are yours to set, and are remembered.

A 4-D file gains a Graph tab: click a voxel and see its time course. For a dynamic PET run the x axis is real seconds, taken from FrameTimesStart, not a frame index. That matters, because PET frames are ten seconds early in a scan and three hundred seconds late, and an index axis flattens exactly the early kinetics you want to see.

The 3D tab renders the volume itself on the graphics card: rotate it, zoom, and cut through it with an oblique clipping plane whose cut face shows the underlying slice. There are materials and lighting presets, an orientation cube, and a switch between radiological and neurological convention that applies to the 2-D views as well. If your machine has no suitable graphics support the 3D tab is absent and the rest of the viewer works as usual.

Selecting a recording first shows a metadata card: what the file is, how many channels of which types, the sampling frequency and the duration, read without loading the signal. Press Load signal to open the interactive viewer.

From there you can filter by channel type, including CTF axial gradiometers and magnetometer plus gradiometer combinations, pick individual channels, set how many are visible at once, change the amplitude scaling and the time window, and move through the recording with the scrollbar, the wheel or the keyboard. Hovering a trace names the channel.

High-pass, low-pass and notch filters can be applied to the segment you are looking at, and the recording can be resampled for a quicker overview. The PSD view opens the power spectrum in two tabs, per channel and averaged per channel type with a standard deviation band, with a crosshair readout and a decibel toggle. It is the fastest way to confirm that a recording has the line frequency you expect at the amplitude you expect.

Events are drawn over the signal, read from the BIDS events.tsv beside the recording or from the stimulus channel. Turning them on jumps the view to the first event, because triggers often begin well into a recording.

JSON sidecars and TSV tables open in their own editors, described in Step 14. They are editing surfaces rather than previews: what you change is written back to the file, and undo covers both.

Any two NIfTI images can also be opened side by side, through Tools → Compare images or by right-clicking a selection in the tree. One set of controls drives both panes: crosshair, slice, plane, volume, the 4-D graph, the 3-D camera and its effects. Images of different shapes work, because the crosshair travels in millimetres rather than in voxels. It was built for checking a defaced image against the original and turned out to be useful for raw against preprocessed, echo against echo, and one session against another. How the compare viewer works →

Step 16

Validate, and read a finding

Press Validate dataset. The validator is part of the same application and reads the same BIDS schema as everything else, so what it checks and what the metadata forms ask for can never disagree.

Three scopes

Validate file checks the selected file, Validate folder everything under the selected folder, and Validate dataset the whole tree including the dataset-level files and the relationships between files. Validation also re-runs as you edit, so a fix turns a finding green without leaving the window.

Deep checks

The Deep checks toggle additionally opens NIfTI image headers, which catches a truncated or corrupt image that every name-based check would pass. It is slower, so the usual pattern is to leave it off while editing and switch it on once before a final review. It has no effect on a dataset of EEG or MEG recordings, which are validated from their sidecars and channel tables.

How to read a finding

Every finding tells you three things:

  • What is wrong, in the standard's own terms.
  • How to fix it, including an example of the value that is expected.
  • Which rule of the BIDS schema it came from, shown beneath the message, so the requirement can be checked against the standard rather than accepted on the tool's authority.

Findings point at the field or the table column they refer to. The fix button takes you straight to that row of the sidecar form or that column of the table, and Highlight in editor tints every field or cell a finding refers to, so you can see all of them at once.

Things it catches that name-based checks do not

A correctly named file inside a folder that is not a BIDS datatype, such as sub-01/ses-pre/anatomy/, is reported as an error. Every filename in there can be perfect, and no BIDS tool will ever read them.

A literal TODO left in a sidecar is flagged as well. The metadata step writes those into recommended fields it could not fill, precisely so that they are visible here rather than forgotten.

Reports you can send

The severity filter in Settings controls what is shown, so you can work errors first and warnings later. A validation report can be written out as HTML, which is the artefact to attach when someone else needs to see the state of a dataset.

Running it. The three buttons in the toolbar validate the selected file, the selected folder, or the whole dataset. The severity chips beside them summarise the result, and clicking a chip opens the list of files carrying that severity.

The whole dataset at a glance

The pane always shows three scopes at once, from the outside in. The dataset section holds findings about the dataset as a whole, the things no single file is responsible for. The folder section holds findings about the folder you are in. The file section holds findings about the file you have selected. Each carries a count, so a section with a zero beside it needs no attention.

Two different threes, and they are easy to confuse.

The buttons choose how much gets checked: this file, this folder, or the whole dataset. The sections in the pane say what each finding is about. You can validate the whole dataset and still see a zero beside the dataset section, because practically every rule in the standard is a rule about one file. In normal use the file section is where the work is, and a number beside dataset means something structural: a table that describes nothing, a file the standard cannot place.

The validation pane showing the dataset, folder and file scopes each with a count
Three scopes, one pane. Reading from the top: what is wrong with the dataset, what is wrong with this folder, what is wrong with this file. Here the dataset section is not empty because a sidecar in it describes a data file that is not there, which is nobody's file in particular. The tree on the left carries the per-file half of the same information, so you can find the problem files, and the worst of them, without clicking through every one.

An error inside a file

Not every problem is a naming problem. This one is a value: a timestamp in a scans table that is not a valid datetime, which no filename check could ever see. The message names the column and the offending value, the chip beside it names the field, and the grey line underneath is the rule in the BIDS schema that the requirement comes from.

A validation error on a scans table, with the schema rule printed underneath the message
A finding with its source. The rule path, rules.tabular_data.modality_agnostic.Scans, is the part of the standard this requirement is drawn from. You can go and read it, which is what makes a finding checkable rather than something to take on trust. Highlight in editor tints the offending cell in the table itself.

Warnings, and how to clear them

Warnings are recommendations rather than violations. Most of what you see after a first conversion are recommended fields nobody has answered yet, and each carries a Fix button that takes you straight to the field in question.

Warnings on dataset_description.json, each with the schema rule and a fix button
Seven warnings on one file. Missing recommended fields, each with the standard's own description of what it is for and an example of the value expected, plus a hint that the author list looks like one name rather than several. None of these stop the dataset being valid; all of them make it less useful to whoever reads it next.

An error inside a sidecar

The other kind of internal error is a field holding the wrong kind of value. A number written as text, a string where the standard wants an object. The file parses, the name is fine, and the value is unusable by anything that reads it expecting a number.

Two errors on an EEG sidecar, each naming the field and the type the standard expects
A type error inside a sidecar. SamplingFrequency holds "160 Hz" where the standard declares a number. It reads correctly to a person and is the wrong type to every tool, which is the kind of mistake no filename check can catch. The finding carries the field's own description and an example of a correct value, so the fix does not require looking anything up. The amber finding below it is a different thing entirely: a recommended field nobody has answered.

Something that should be there and is not

Some findings are about a file that is missing rather than a file that is wrong. These are warnings, because the standard recommends rather than requires them, and they are easy to miss precisely because nothing is visibly broken.

A warning that a task run has no events table beside it
A file that should be there and is not. The recording converted correctly and nothing about it is malformed. What is missing is the table describing what happened during it, which is the file most analyses will want. A warning rather than an error, because the standard recommends it rather than requires it, and the message says how to settle it either way: supply the table, or say in the task name that the run was rest.

Structural errors, which are the ones most tools miss

A structural error is not about the contents of a file. The file can be perfectly named and perfectly formed and still be somewhere, or called something, that no BIDS tool will ever look at. Checked one filename at a time there is nothing wrong, which is exactly why these survive into published datasets.

The three below are all real findings on one dataset. It is the converted multimodal sample with three things broken by hand afterwards, which is how these happen: somebody tidies a folder, renames a file, or copies a naming pattern from another modality.

A datatype folder with a typo in it

Someone renamed anat to anatt. The T1w inside still has a flawless BIDS name. Every BIDS tool reads inside the datatype folders, so from now on that scan does not exist as far as any pipeline is concerned, and no per-file check will say a word about it.

A structural error: a correctly named T1w inside a folder called anatt instead of anat
One finding, and it names the fix. The folder line reads ANATT; the message says the file has a valid name but is not in a datatype directory, and lists what it should be. The same finding appears on funce elsewhere in this dataset, on the BOLD run.

An entity that does not belong on this kind of file

BIDS defines which entities each kind of file may carry, and they are not interchangeable between modalities. echo is meaningful on an MRI acquisition and meaningless on an EEG recording, so a name copied from one to the other produces a file the standard cannot account for.

A validation error: the echo entity is not allowed on an EEG recording
The rule it broke, named. The chip on the right is the offending entity, and the grey line under the message, rules.files.raw.eeg.eeg, is the part of the schema the requirement comes from, so you can check the claim rather than take it on trust. The suggestion offers both readings: remove the entity, or you meant a different suffix.

What breaks next, which nobody expects

Moving those two folders also broke something else. scans.tsv lists every image in the session by its path, and two of those paths no longer point at anything. The manifest and the tree now disagree.

A validation error: the paths listed in scans.tsv no longer match the files in the dataset
A consequence, not a separate mistake. This is the argument for validating the dataset rather than the file you just edited: renaming two folders produced an error in a third file that nobody touched.
You will not hit these if you let the conversion name things.

Every one of the three was introduced by hand after a clean conversion. Names built from the schema land in the right folder with the right entities, and scans.tsv is rewritten to match. These findings exist for datasets that have been edited since, which in practice is most datasets.

Step 17

Correct the shape, if it is wrong

Some problems are not a value in a file. A task label is wrong on forty recordings, one participant's scans were never put into a session although everybody else's were, a pilot run should not have been converted at all. These are changes to the shape of the dataset, and they live under Tools in the Editor toolbar, or on a right-click in the tree.

Moving the files is the easy half. What breaks a dataset is everything left pointing at what moved: the *_scans.tsv row naming a path that is gone, the IntendedFor entry on a fieldmap still pointing at the old image, the participants.tsv row for a subject who is no longer there. A validator reports none of those as a broken link, because every filename still in the dataset is perfectly valid. Each action below repairs all of it in the same step, and each is one step in the Editor's history, so a single Undo takes the whole thing back.

Try it on this dataset

In the sample MRI dataset, sub-001 has two sessions and sub-002 has none, because only one of the two people was scanned twice. That is legal BIDS, but it is awkward to analyse, and most studies would rather every subject had the same shape. So put the second subject into a session:

  1. Click sub-002 in the BIDS tree.
  2. Tools, then Sessions....
  3. Type a session label. pre, to match the other subject.
  4. Press Plan and read the preview before anything happens.
The Sessions dialog with a plan made, showing each file's whole destination path and the repairs that follow
Read the second column. It shows the whole destination path, not just the new filename, because these files change folder as well as name. Underneath, Follows automatically lists what moves with them: the scans table goes to the level BIDS defines for a dataset that has sessions, and every row inside it is rewritten to the new paths.

The preview nests subject, then session, then datatype, then file, the way the dataset is actually shaped, and every file has its own tick box. Acting on part of a selection is a legitimate answer, and the repairs are recomputed for whatever you leave ticked. The repairs themselves cannot be unticked: switching one off would reintroduce exactly the damage the action exists to prevent.

The other two

Add or remove an entity
The key-value pairs in a BIDS filename are called entities (task-rest, acq-highres, run-2). This adds one a file is permitted to have or removes an optional one it has. The list on offer holds only what the standard allows for that kind of file, so a required entity cannot be taken away and an entity that does not belong cannot be added. The new pair is placed in the standard's own order rather than where you typed it. Across a selection it works file by file, so a file that cannot take the change is left alone rather than stopping the others.
Delete
Remove a recording, a datatype, a session or a whole subject, together with the scans rows, the IntendedFor entries, the participants row of a subject with nothing left, and the folders the deletion empties. A scans table is deleted only when nothing it describes survives; otherwise its rows are edited. The dataset root, dataset_description.json and the change history itself are refused.
Rename entity
Change a value everywhere it appears: task-rest to task-restingstate across the study, or one subject's label. The sidecar's TaskName follows the label, but only when the value there really does derive from the old one, so something you wrote by hand is left alone rather than overwritten with a guess.
On a dataset BIDS Manager did not convert.

The Editor opens any BIDS dataset, but a dataset it has never seen has no record of what it looked like before you arrived, so nothing you do can be taken back. Tools, then Track changes, reads every file once and writes that starting point. Nothing else in the dataset is touched, and every BIDS tool ignores dot-folders, so validation is unaffected.

What you should see now: the tree in its new shape, with the counts on each row updated, because validation re-runs itself after a change of this kind.

These four actions are in the application only. There is no command line equivalent, because each one is a decision about a particular dataset that you want to see previewed before it happens, and a flag cannot show you a preview.

Step 18

Fix, re-validate, and finish

Work down the findings, fixing each where the fix button takes you, then press Re-validate. The counts on the tree and the chips in the toolbar update, and you are finished when the errors are gone. A finding that landed on several files at once has a Fix in all files button on its group: it lists every file it fired on with the value each one holds now, so you answer once rather than twelve times.

What "done" looks like

Zero errors. Warnings are worth reading rather than clearing blindly: many are recommended fields that genuinely do not apply to your study, and a warning you have read and decided about is a different thing from one you have not seen.

Adding more data later

You do not start again. Scan the new folder into the same project and convert with --on-existing skip, or its equivalent in the Settings. New subjects and sessions merge in and the files already converted are left alone. Every scan is versioned inside the project, so you can always see what you converted and when.

Your curation is saved too. Reopening the project restores the inventory, the edits and the template answers, so a dataset you return to in six months does not need to be understood again from scratch.

The Editor's BIDS tree with a green tick on the files that are clean
Work down the tree. Re-validating after a fix updates the counts and the chips together, so a file that turns green is a file you can stop thinking about. You are finished when the red ones are gone; the amber ones are for reading, not for clearing blindly.
CLI reference

Every command, every flag.

BIDS Manager ships seven console scripts plus the GUI entry. Every verb accepts -v for INFO logging and -vv for DEBUG. Synopses below mirror what --help prints on a fresh install of bids-manager on PyPI. The project-first verbs (bidsmgr-create, bidsmgr-project) and the --project flag are additive: every classic positional form still works.

bidsmgr-create

Creates and scaffolds a BIDS dataset workspace (or adopts an existing BIDS folder). Writes dataset_description.json, a README, and a .bidsignore, and initialises the project bundle. The folder name is the dataset slug the other verbs use.

bidsmgr-create <output_dir> [options]

Positional arguments

output_dir
Dataset folder to create or adopt.

Options

--name NAME
Human-readable dataset Name for dataset_description.json (defaults to the folder name).
--description TEXT
Optional project description recorded in the project bundle.

bidsmgr-scan

Walks a raw input folder, reads metadata from inside every file (DICOM tags, EDF / FIF headers), classifies each series with the schema-driven chain, and writes a single inventory TSV with one row per series plus an entities JSON column carrying the BidsGuess. With --project the inventory is saved as a versioned, resumable scan inside the project instead of a loose TSV.

bidsmgr-scan <dicom_root> [<output_tsv>] [options]

Positional arguments

dicom_root
Directory containing the raw recordings (any depth). DICOM, EDF, BDF, BrainVision, FIF, CTF, EEG / MEG, and Siemens CMRR physio are all detected automatically.
output_tsv
Destination path for the inventory TSV. Omit when using --project.

Options

--project DIR
Scan into a project dataset folder (created by bidsmgr-create or the GUI; created / adopted if absent). The inventory is saved as a new versioned scan under <project>/.bidsmgr/project/scans/, so it is resumable in the GUI and never overwrites an earlier scan. --dataset defaults to the project folder name.
--jobs N, -j N
Parallel worker threads used to read file headers. Defaults to 80% of the host CPU count.
--probe-convert
After the metadata walk, run dcm2niix as a probe on every DICOM series (one invocation per SeriesInstanceUID) into a hidden staging tree, harvest what was produced, then remove it. Adds probe_n_files / probe_n_nifti / probe_n_volumes / probe_extensions columns and surfaces conversion anomalies in issues. The staging tree is always removed, including on error. Slow but most accurate.
--no-bids-guess
Skip the dcm2niix BidsGuess classifier and fall back to the legacy regex-only layer. For comparison / debug.
--dataset NAME
BIDS dataset slug stamped into every row's dataset column. The converter writes each distinct value to <bids_parent>/<dataset>/. Defaults to a slugified form of the raw root's folder name.
--line-freq HZ
EEG / MEG only. Power-line frequency in Hz, stamped into every EEG / MEG row's line_freq column (goes into PowerLineFrequency in the sidecar). Typical values: 50 (most of the world), 60 (most of the Americas, parts of Asia). Per-row TSV value wins.
--montage NAME
EEG / MEG only. Name of a built-in mne montage (e.g. standard_1005, biosemi64) stamped into every EEG / MEG row's montage column. The converter applies it before write_raw_bids, filling electrodes.tsv + coordsystem.json. Per-row TSV value wins.
--rules-file JSON
Path to a JSON file of user scan rules: classifier hints (extend the classifier) and series exclusions (mark matching series include=0), matched by sequence name or path. The same schema the GUI Settings Scan rules tab persists.

bidsmgr-rebuild

Reconciles the inventory TSV's entities JSON column with its derived display cells (bids_name, session, task, run). bidsmgr-convert runs this automatically in memory before reading rows, so manual calls are mostly for diff-style preview.

bidsmgr-rebuild <tsv> [options]

Positional arguments

tsv
Inventory TSV produced by bidsmgr-scan.

Options

--from {entities,columns}
Source of truth for this rebuild. Default entities regenerates the display cells from the entities JSON; columns does the reverse (use after editing task / run / session cells in a spreadsheet).
--dry-run
Print the diff but don't write the TSV back.

bidsmgr-convert

Reads the inventory and converts every keeper row to BIDS using the right backend per modality (dcm2niix for DICOM including PET DICOM, mne-bids for EEG / MEG, pet2bids for PET ECAT and blood curves, bidsphysio for Siemens CMRR physio). Stages each subject privately, then atomic-renames into the BIDS root. Re-running merges new subjects and sessions in safely. With --project it converts the project's active scan version into its locked root, replaying the curation edits recorded in the GUI.

bidsmgr-convert [<tsv>] [<bids_parent>] [options]

Positional arguments

tsv
Inventory TSV produced by bidsmgr-scan. Omit when using --project.
bids_parent
Parent directory; each distinct dataset value becomes a sibling BIDS root underneath. Omit when using --project (output is the project).

Options

--project DIR
Convert the project dataset's active (latest) scan version into its locked root. Resolves the inventory, output, and recording metadata from <project>/.bidsmgr/project, replaying the GUI curation edits. Supersedes the positionals.
--version ID
With --project, convert a specific scan version instead of the latest (version id or index; see bidsmgr-project).
--dataset NAME
Limit conversion to rows whose dataset cell equals this value.
--jobs N, -j N
Number of backend invocations to run in parallel. Defaults to 80% of the host CPU count.
--on-existing {skip,update,replace,error}
Policy when an incoming subject already exists on disk. New sessions and datatypes always merge in; this governs colliding files: skip keep existing (default), update replace only changed files, replace back up + replace colliding files, error abort the subject if anything would collide.
--overwrite
Alias for --on-existing replace.
--recording-meta PATH
EEG / MEG enrichment JSON. Its dataset defaults supply line_freq / montage for blank inventory cells, and its richer fields fill the sidecar reference / ground / filters / device / institution, retype auxiliary channels, and map event codes to labels. Optional; omitting it leaves PowerLineFrequency as n/a, since the mains frequency is a property of the building and nothing in the recording states it.
--pet-metadata PATH
PET dose and tracer metadata as JSON, keyed by BIDS sidecar field names (TracerName, InjectedRadioactivity, ModeOfAdministration and the rest). A flat object applies to every PET run; an object keyed by sub-<label> scopes it per subject. It reads the shape pypet2bids accepts, its nifti_json wrapper included, so a file written for that tool works here unmodified. Keys BIDS does not define for a PET sidecar are reported and dropped, never written.
--pet-spreadsheet PATH
The same information from the dose table a lab already keeps. One row per scan or one row per field; loose about column naming and strict about values.
--force-edf
Re-encode EEG recordings to EDF on write instead of keeping the source format. Harmonises a study to one BIDS-native format and makes a non-BIDS-native but mne-readable source convertible. MEG / NIRS are unaffected.
--overwrite-curation
When re-converting a subject that already exists, let the fresh conversion win outright. By default a JSON sidecar and a *_scans.tsv are merged field by field instead, so metadata you curated in the Editor survives the second pass. Only has an effect together with --on-existing update or replace.
-v / --verbose
More log detail: -v for INFO, -vv for DEBUG. Worth reaching for when a conversion produced something you did not expect and the default log does not say why.
--deface
Remove the face from anatomical and PET images before each subject is committed, so the identifiable image never enters the dataset. This is the safest placement, because conversion stages a subject in a temporary folder and defacing runs there, before the move. Nothing is kept to undo from: your raw source data is where a re-run starts. See the defacing tutorial.
--deface-engine NAME
Which engine, one of allineate (the default), allineate-robust, allineate-afni, mindgrab or strip-atlas. The last two keep only the brain and write a derivative rather than replacing the image.
--keep-residuals
Keep dcm2niix residual / secondary outputs. By default the converter drops the derived single-volume duplicates dcm2niix splits off one input series (e.g. ..._bolda alongside ..._bold), which have no valid BIDS suffix.
--raw-root PATH
Folder the original scan was run against. Used as the first candidate when resolving EEG / MEG rows' relative source_file paths. If omitted, the TSV's parent directory is tried.
--dcm2niix PATH
Override the default dcm2niix binary. Defaults to the one bundled with the bids-manager wheel.
--dry-run
Print the per-row conversion plan; write nothing.

bidsmgr-metadata

Post-conversion metadata engine. Walks a BIDS root and fills every required field the schema can infer (Manufacturer, MagneticFieldStrength, EchoTime, RepetitionTime, etc.) from the converted files. Writes dataset_description.json, enriches every sidecar (including participants.tsv demographics and optional phenotype tables), and leaves a metadata_report.json audit log.

bidsmgr-metadata [<target>] [options]

Positional arguments

target
BIDS root, or a parent containing one or more BIDS roots (the parent form is what bidsmgr-convert writes into). Omit when using --project.

Options

--project DIR
Run on a project dataset folder: the target is the project root and the inventory is resolved from its active scan version (so demographics / phenotype / participants flow through). Supersedes the positional target.
--version ID
With --project, take the inventory from a specific scan version instead of the latest.
--dataset NAME
When target is a parent, limit the run to this single dataset name.
--inventory-tsv PATH
Inventory TSV produced by bidsmgr-scan. Used to enrich participants.tsv with demographics; without it those columns default to n/a.
--participants PATH
Participants spreadsheet (TSV / CSV / XLSX / ODS) keyed by a participant_id column. Its age / sex / handedness columns override the inventory-derived demographics.
--phenotype PATH
Phenotype measure table keyed by participant_id. Repeat for each instrument; each is written to phenotype/<measure>.tsv + JSON.
--fill-todos
For every sidecar with a missing required or recommended field (and for missing recommended fields of dataset_description.json), write the literal string "TODO". Existing values are never overwritten, so you can sweep through later in the Editor.
--name NAME
Dataset Name (defaults to the BIDS root directory name).
--bids-version VERSION
BIDS spec version for dataset_description.json. Defaults to the bundled schema's version.
--license, --author (repeatable), --acknowledgements, --how-to-acknowledge, --funding (repeatable), --ethics-approvals (repeatable), --references-and-links (repeatable), --dataset-doi
Optional dataset_description.json fields. The repeatable ones take one value per flag.
--no-report
Skip writing .bidsmgr/metadata_report.json (written by default so the GUI and CI tooling can pick it up).

bidsmgr-validate

Schema-driven validation, delegated to the bidsval engine and supplemented with the BIDS Manager conventions that bidsval does not carry, such as flagging literal TODO placeholders. Runs the fast structural pass by default; --strict adds the deep checks. Every finding carries the schema rule it came from.

bidsmgr-validate <target> [options]

Positional arguments

target
BIDS root, or a parent containing one or more BIDS roots.

Options

--dataset NAME
When target is a parent, limit to this single dataset name.
--strict
Deep checks: read NIfTI headers and file contents as well as the structural and metadata checks. Catches unreadable or malformed files, and is slower on large trees.
--schema VERSION
The BIDS schema version to validate against, for example 1.11.1. bidsval ships several, so an older dataset can be checked against the standard it was built to. Defaults to the bundled schema.
--max-rows N
How many rows of each TSV to scan during column and value checks. Default 1000; raise it to scan more of a long table.
--no-todo-warnings
Do not flag literal TODO values as warnings. That flagging is a BIDS Manager convention, on by default; turning it off gives counts identical to bidsval alone.
--strict-warn
Treat warnings as errors for the exit code. By default the command exits non-zero only when there is at least one error.
--html
In addition to the JSON report, write a self-contained HTML report at .bidsmgr/validation_report.html. Inline CSS, safe to share or archive. Issues are colour-coded and grouped by scope (dataset / folder / file).
--no-report
Skip writing .bidsmgr/validation_report.json.

bidsmgr-deface

Removes the face from the anatomical and PET images of a dataset that already exists, or keeps only the brain and writes the result as a derivative. One reversible operation, recorded in the Editor's history. --dry-run reads headers only, so it reports what would happen without needing the engine installed. The defacing tutorial covers every option with pictures.

bidsmgr-deface <bids_root> [options]

Options

--target PATH
Limit the run to this file or folder. Repeatable. Defaults to the whole dataset.
--engine NAME
allineate (default), allineate-robust, allineate-afni, mindgrab, strip-atlas. The first three remove the face; the last two keep only the brain.
--dry-run
Print the images that would be treated and the ones that would be skipped with the reason, and stop.
--keep-original-in-sourcedata
Copy each original to sourcedata/ first, so it can be restored at any point later. Those copies still contain the face, so remove them before sharing.
--in-place
For a skull-strip engine: overwrite the original instead of writing to derivatives/bidsmgr-skullstrip/.
--list-engines
Describe every engine and exit.
-q, --quiet
Only report the outcome.

bidsmgr-project

Inspects a project dataset and lists its versioned scans. The active scan is the latest, marked with an asterisk. Useful for finding a version id to pass to bidsmgr-convert --version or bidsmgr-metadata --version.

bidsmgr-project <dataset> [--list]

Positional arguments

dataset
Project dataset folder.

Options

--list
List the scan versions (the default action).

bidsmgr (GUI)

Launches the desktop GUI. The Converter and Editor views drive the same engine the CLI exposes, so anything you can do here can be scripted.

bidsmgr [options]

Options

--theme {dark,light}
Initial colour theme. If omitted, the last theme the user selected in-app is restored (default dark on first run).
--project PATH
Open (or create / adopt) a BIDS dataset project at this directory and land in the Converter bound to it (same as the Home tab's Open / Create). The output is locked to the dataset. Note: this is a dataset directory, not a bundle file.

The canonical source for every flag is --help on each verb. If a flag here ever drifts out of date, the argparse definitions in the repository are authoritative.

CLI walkthrough

The same workflow, from the command line.

The GUI you just walked is a window onto the same engine you can drive from a script. The project-first flow is five commands: create a project, scan into it, convert, enrich, validate. Numbers below come from the primary MRI dataset (33 inventory rows; 12 auto-skipped; 21 keepers).

1. Create a dataset project.

Scaffolds dataset_description.json, a README, and a .bidsignore, and initialises the project bundle. The folder name is the dataset slug; the BIDS output is locked to it from here on.

# Create the project the scan / convert / metadata steps below write into.
bidsmgr-create <dataset_dir> --name "Oldenburg neuroimaging unit"

2. Scan the raw folder into the project.

Walks the input tree, reads metadata from inside every file, runs the schema-driven classifier, and saves a versioned, resumable scan inside the project. --probe-convert runs one dcm2niix probe per series so the inventory carries the same BidsGuess the converter will see.

# Save a versioned scan under the project; resumable in the GUI.
bidsmgr-scan <raw_root> --project <dataset_dir> --probe-convert -j 4

# 33 rows, 12 pre-marked bids_guess_skip=true (scouts, Phoenix reports).

3. Convert the active scan into the locked BIDS root.

Reads the project's latest scan, dispatches each row to the right backend per modality, stages per subject under .tmp_bidsmgr/, then commits atomically. Re-runs merge new subjects and sessions in safely.

# Convert the project's active version; output is the project itself.
bidsmgr-convert --project <dataset_dir> -j 4 --on-existing skip

# Writes 21 NIfTI files + sidecar JSONs + events / channels TSVs.

4. Auto-fill required sidecar fields.

Runs the post-conversion metadata engine over the project: fills every required field the schema can infer, plus participants.tsv demographics. For EEG / MEG it also fills reference, ground, filters, device, and event labels.

# Auto-enrich sidecars; stamp "TODO" on anything that needs a human.
bidsmgr-metadata --project <dataset_dir> --fill-todos

5. Validate against the BIDS schema.

The same engine the Editor's validation pane uses, so a dataset that passes here passes there. Prints a severity-coloured summary, and each finding names the schema rule behind it.

# Validate the dataset; add --strict for deep checks, --html for a report.
bidsmgr-validate <dataset_dir>

# Primary MRI dataset result: 55 ok / 7 warn / 0 err.
# The 7 warnings are TODO placeholders, fillable in the Editor in one pass.

Recipes for the things you will actually need

The five commands above are the whole flow. These are the variations that come up in practice, each with the reason you would reach for it.

Add new subjects to a dataset you already converted. New sessions merge in and existing files are left alone.

bidsmgr-scan /data/raw_july --project /data/bids/my_study --probe-convert
bidsmgr-convert --project /data/bids/my_study --on-existing skip

See what would happen, without writing any file.

bidsmgr-convert inv.tsv /data/bids --dry-run

Convert PET using your lab's dose spreadsheet. Loose about how your columns are named, strict about the values it reads.

bidsmgr-convert inv.tsv /data/bids --pet-spreadsheet doses.xlsx

Convert ECAT when the inventory is not beside the raw data. ECAT rows store a path relative to the folder that was scanned, so without this the file cannot be found. The message tells you as much.

bidsmgr-convert inv.tsv /data/bids --raw-root /data/raw

Work against a specific BIDS version. Every verb takes --schema, so the metadata forms, the filenames, the enrichment and the validator all agree on which version of the standard you are targeting.

bidsmgr-scan /data/raw inv.tsv --schema 1.8.0
bidsmgr-validate /data/bids --schema 1.8.0

Re-encode EEG recordings to EDF on the way in.

bidsmgr-convert inv.tsv /data/bids --force-edf

Teach the scanner about your site's sequence names. The same JSON the GUI writes from Settings, Scan rules, so a rule you set up once in the window works headless too.

bidsmgr-scan /data/raw inv.tsv --rules-file site_rules.json

Bring in participant demographics and questionnaires. Columns become participants.tsv; each phenotype table becomes a file under phenotype/ with its own data dictionary.

bidsmgr-metadata /data/bids --participants demographics.xlsx \
                            --phenotype hads.tsv --phenotype moca.tsv

Produce a validation report you can send to someone. --strict additionally opens NIfTI image headers, which catches a truncated or corrupt image that every name-based check would pass.

bidsmgr-validate /data/bids --strict --html

Edit the inventory in a spreadsheet, then rebuild the names. Change the entities, and the predicted BIDS names are recomputed from them.

bidsmgr-rebuild inv.tsv --from entities

List the scan versions saved inside a project. Every scan is versioned, so you can see what you have and convert an earlier one.

bidsmgr-project /data/bids/my_study --list
Media placeholder 15: cli_asciinema

A terminal running the five-command sequence on the PET sample dataset, from bidsmgr-create through bidsmgr-validate, ending on the validator summary line.

Prefer the classic form? Every verb still takes positionals: bidsmgr-scan <raw> <inv.tsv>, bidsmgr-convert <inv.tsv> <bids_parent>, and so on. --project is additive. The full surface (every flag, every verb) is in the reference above.