FAQ#

Can I run a fully unconditioned design?#

Yes, two ways. If you have a real input structure and just want nothing fixed, omit conditions: entirely (or leave it {}) — nothing gets revealed, so the model designs freely at whatever size and chain layout input/contig produced. If you want a pure de novo design with no real structure contributing anything, the spec’s contig cannot express it (see contig tokens); build a raw annotated CIF with one wholly expandable chain and no conditions through the Python API instead, the way data/benchmarks/monomer/*.cif do.

Why is my .pdb rejected?#

PDB does not reliably encode bonds or formal charges, and the model consumes both. Convert to CIF with atomworks using parse and to_cif_file, then audit the bonds and charges before you run.

A condition matched 0 atoms.#

Conditions resolve against the structure after contig runs, except for res_id, which uses pre contig numbering for preserved segments. A dropped res_id, or a res_id where you meant res_name, matches nothing. Trust the printed summary over your intent.

My selection caught an expandable placeholder.#

Sentinels have no original res_id, so any res_id == or range selection excludes them. But a selection on chain_id or res_name alone matches them, and so does a negated res_id !=. For conditions that need real sequence or coordinates, meaning C_SEQ and C_CRD, add and res_name != '<segment>'. Conditions aimed at the placeholder itself, like C_HOT, do not need it.

Are specs checked before the run?#

Not by default. Each design gets built when the run reaches it. Pass prevalidate_inputs=true to generate.py to build every design up front and run the same safeguards the CIF writer runs. That catches typos across a whole batch, at the cost of building every design before the run starts. The CIF writer script does this by default, and --no-prevalidate turns it off. Expandable segments are realized on a temporary copy for the pre-save pipeline check; the saved CIF retains their placeholders and length ranges. This checks one realization, not every combination of allowed lengths. Separately, an unrecognized field under a design’s key always raises at build time rather than getting ignored, whether or not you prevalidate. That covers a typo’d conditions: and a stale global_args key folded onto every design.

Do I need to write CIFs to disk?#

No. generate.py builds each design in memory. To materialize CIFs for inspection, run scripts/write_condition_spec_cifs.py <spec> --out-dir <dir>. For anything complicated, do this. It is the cheapest way to catch a mistake before you spend GPU time on it.