---
title: Environment & data I/O
description: Set up a Biotite job and move data in and out — pinned dependencies, FASTA, GenBank, PDB, mmCIF and MMTF inputs, and gzipped mmCIF exports.
---

This page covers how to set up the Biotite environment and move data in and out of a run — the input formats it reads, where to read and write files, and how to export results. Pinning dependencies and keeping paths storage-friendly are what most affect cold-start time and clean syncing.

> **Where this code runs**

> You cannot open a shell on the platform yourself. The scripts on this page are plain Biotite Python and shell: ask Ivy in chat to run them in the chat's [code workspace](/docs/sandbox), which ships Biotite, or run them on your own machine.

## Recommended dependencies

```txt
biotite[full]>=1.1
numpy>=1.26
pandas>=2.2
matplotlib>=3.8        # Optional plotting
mdanalysis>=2.7        # Optional trajectory parsing
```

Pin these in `requirements.txt` for a local environment. The chat's code
workspace already ships Biotite, NumPy and pandas.

## Input formats

- Sequences: FASTA, GenBank, EMBL
- Structures: PDB, mmCIF, MMTF
- Compressed archives: `.tar.gz` / `.zip` for batch uploads (extract to
  `inputs/`)

## Storage-friendly paths

- Read inputs from `inputs/` and write outputs to `outputs/`.
- Use unique run folders, e.g., `outputs/run-<timestamp>/`.
- Keep filenames ASCII to avoid path issues when syncing to storage.

## Simple batch pattern

```bash
find inputs/sequences -name "*.fasta" -print0 | while IFS= read -r -d '' file; do
  python scripts/parse_sequences.py "$file" "outputs/$(basename "$file").json"
done
```

`parse_sequences.py` should validate the file encoding and raise clear errors
for empty/invalid records.

## Exporting structures

- Prefer mmCIF for downstream pipelines that need robust metadata.
- Compress large outputs: `gzip outputs/*.pdb` to cut transfer size.
- Include a `SUMMARY.md` with counts, RMSD stats, and any skipped files.
