One batch

bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1
The default is:
--pipeline s_core_relations_smoke_drug
--writers sqlite
--offline
The plain run writes one database file. It does not create per-note CSV/XMI/HTML folders unless those writers are requested.

Multiple batches

If the input folder looks like this:
input/
  batch1/
  batch2/
  batch3/
run:
bash scripts/run_input.sh --input-root input --output-root outputs/site_run --foreground
That writes:
outputs/site_run/batch1/
outputs/site_run/batch2/
outputs/site_run/batch3/
run_input.sh defaults to background mode. Use --foreground when a clinician or reviewer wants to watch the run in the terminal.

Normal database run

bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1
Output:
outputs/batch1/annotations.sqlite
outputs/batch1/run_manifest.json
outputs/batch1/run_pipeline.log
outputs/batch1/run_pipeline.effective.piper
outputs/batch1/run_dictionary.effective.xml

CSV and XMI run

Use this only when someone specifically asks for folder outputs:
bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1_standard --writers standard
Output:
outputs/batch1_standard/concepts/
outputs/batch1_standard/rxnorm/
outputs/batch1_standard/cui_counts/
outputs/batch1_standard/xmi/
outputs/batch1_standard/run_manifest.json
standard keeps CSV and XMI on, but keeps HTML off.

Database plus CSV/XMI

bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1_standard_sqlite --writers standard --sqlite
That keeps the CSV/XMI folders and also writes:
outputs/batch1_standard_sqlite/annotations.sqlite

HTML views

HTML is off by default. Use this only for a small debug or demo run:
bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1_html --writers all
That writes html/ along with XMI and CSV.

Stable run id

bash scripts/run_pipeline.sh \
  -i input/batch1 \
  -o outputs/batch1 \
  --run-id star-siteA-batch1-20260709
run_id lands in:
run_manifest.json
annotations.sqlite: run_metadata.run_id
annotations.sqlite: documents.run_id
annotations.sqlite: concepts.run_id
annotations.sqlite: rxnorm.run_id
annotations.sqlite: cui_counts.run_id
If no --run-id is passed, the wrapper generates one from the run time and run inputs. That generated id is an audit id for this execution, not the reproducibility fingerprint by itself.

Custom dictionary XML

bash scripts/run_pipeline.sh \
  -i input/batch1 \
  -o outputs/batch1_custom_dict \
  --dict /path/to/custom_dictionary.xml
Use this only when the custom dictionary XML has already been tested. The wrapper will still snapshot the effective XML into:
outputs/batch1_custom_dict/run_dictionary.effective.xml

Smaller memory

If Java asks for too much memory:
export CTAKES_AUTOSCALE_MEM_PERCENT=60
bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1
Or set a fixed heap:
bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1 --xmx 4096
4096 means 4096 MB.

Show the write plan

bash scripts/run_pipeline.sh -i input/batch1 -o outputs/batch1 --print-write-plan
That prints the output folder, work folder, log path, manifest path, effective pipeline snapshot path, effective dictionary snapshot path, and SQLite path without running the notes.