Skip to main content

bindsight

Expression → Binder. An open-source pipeline that joins cohort RNA-seq target discovery to de novo protein binder design in one reproducible workflow, with machine-readable provenance from every ranked binder back to the patient samples it came from.

CI License: AGPL v3 Python: 3.11+ Workflow: Snakemake

Genomics tooling stops at "here are the interesting genes." Protein-design tooling starts at "given a target…". The bridge between them is built ad-hoc, per project, and rarely reproducibly. bindsight ships that bridge as one tool, and carries a PROV-O / RO-Crate audit trail across the join.


Start here

Everything below is in this repository. Nothing on this page requires a website, an account, or a GPU to read.

If you want to… Go to
Run it in five minutes Install, then bindsight demo
See what it has and has not shown What the evidence says
Reproduce a published number Reproducing the results
Understand how it works ARCHITECTURE.md
Read the study benchmarks/study/ · write-up
Read the control that withdrew a headline benchmarks/calibration/
See the provenance chain, run end to end benchmarks/provenance_join/
Find your way around the code Repository map
Use your own data Scope — what it accepts
Design binders on a free GPU RUN_FREE_GPU.md
Look up a term (PROV-O, RO-Crate, ipTM, PAE-int…) Glossary
Contribute CONTRIBUTING.md
Cite it Citation

Install

One command, one way. Python 3.11+, Windows / macOS / Linux, CPU only.

git clone https://github.com/mikhaeelatefrizk/bindsight.git
cd bindsight
pip install -e ".[discover,report]"

Add dev if you intend to run the tests (pip install -e ".[dev,discover,report]"), and runners if you intend to send work to a GPU backend. Conda users can build the same dependency set first with mamba env create -f envs/discover.yaml.

Check the install, then run the demo:

bindsight --version
bindsight doctor
bindsight demo

bindsight demo runs the full discovery half on a real TCGA-BRCA tumour-versus-adjacent-normal cohort, auto-downloaded from NIH/GDC, and writes an HTML report you can open in a browser. It needs internet on first run (the cohort and the enrichment lookups are cached afterwards) and takes a few minutes of real DESeq2. No GPU.

For a local interface over the same thing — the evidence behind every claim below, the demo, your own cohort, and the predicted binder–target complexes rendered in 3-D. Served from your machine; nothing is fetched from a network once installed.

bindsight ui      # opens http://localhost:8501

What the evidence says

Stated plainly, including the parts that did not work. Each claim links to the artifacts it comes from.

The discovery half

Run on fifteen whole, unstratified TCGA projects as patient-paired contrasts, scored against a panel of 22 antigen-cohort pairs fixed in git before any cohort was run. Nothing in a cohort's definition refers to the antigen being sought.

Two null models, and they point in different directions — both are reported, because reporting only one would make the other the finding:

  • Against abundance- and dispersion-matched decoys — negative. 3 of 22 pairs are nominally significant; none survives Benjamini-Hochberg across the panel. The smallest adjusted value this panel could have produced is 0.022, so a pair could genuinely have survived — the negative is a measurement, but not a sensitive one.

  • Against a permuted assignment of indications — positive. Mean standing 0.858 against every reassignment of cohorts to antigens, exact permutation p = 3.97e-04 over all 5,040 orderings. 5,040 is 7!, because the test is restricted to the 7 antigens with a single indication in the panel — an antigen used in two cancers has no one cohort to permute. That p is the floor this design can express, so it says the result is as extreme as an exhaustive enumeration of this panel can show, not that it is vanishingly unlikely.

    Calibration, on its own denominator. KICH and THCA carry no panel antigen and were run to show what no signal looks like on this scale. Antigens sit at mean standing 0.765 in the cancer they are actually used in against 0.417 there: a within-antigen difference of 0.348 (95% CI 0.188–0.513), cluster-bootstrapped over 13 antigens, each antigen its own control, interval excluding zero. It carries an interval and no p-value — the permutation p above belongs to the 7-antigen test and is not the significance of this difference, which no test reports.

The indication-specificity null is the strongest claim this project supports, and it is a claim about the ordering, not about any individual hit. Absolute recall is low and stated as such: at rank 20 it is 1 of 17 on approved-agent antigens (95% CI 0.01–0.27). Most clinically validated antigens are simply not significantly over-expressed in an unstratified bulk contrast.

→ benchmarks/study/RESULTS.md · write-up

The design half

The pipeline runs RFdiffusion → ProteinMPNN → Boltz-2 end to end on a free Kaggle T4 and produces real predicted complexes. What it does not establish is that those designs bind.

A paired control folds every design beside a shuffle of its own sequence — same length, same composition, order destroyed. Under a seeded validator averaging five diffusion draws, the shuffles cleared the customary ipTM 0.65 bar more often than the designs did (50% against 30%; paired difference −0.043, 95% CI −0.142 to +0.054; 9 of 20 designs beat their own shuffle, where 10 is chance).

success@0.65 is therefore withdrawn as a measure of design quality, and this page does not quote it as one. The ipTM values are real Boltz-2 outputs; what does not follow is that the rate measures the designs. The control's predictions were written down before its data arrived.

→ benchmarks/calibration/ · benchmarks/designer_benchmark/

The join

The claim the project rests on — a reviewer can start at a ranked binder and reach the patient samples it came from — was exhibited once, end to end, on a target the discovery half chose for itself: CA9 at rank 1 and CD70 at rank 2 out of TCGA-KIRC, carried through to 40 designs and a walkable PROV-O graph. The committed manifest lets you verify the first three steps of that walk from this clone; the rest needs the crate rebuilt, and that directory says so precisely.

→ benchmarks/provenance_join/

What has not been done

  • The three-way designer comparison (RFdiffusion+ProteinMPNN vs BindCraft vs BoltzGen) is not run. Both alternatives need 24–32 GB against anything larger than a small domain, so those arms require paid backends; on free hardware no shipped backend can run them.
  • The calibration's own power analysis puts 142 paired designs at 80% power to detect a 0.05 ipTM difference. The committed control has 20.

Scope — what it accepts

The pipeline takes a counts matrix and a sample design table naming a two-level factor, and contrasts those two levels. Nothing on that path knows about cancer. tumor and normal are values you supply, not values the code expects: tests/test_non_cancer_cohort.py drives the whole documented path on a drug-versus-vehicle experiment paired within donor, with no oncology vocabulary anywhere, and asserts that none leaks into the provenance manifest.

Three parts are domain-specific, and they are separable:

  • The optional inputs.download block fetches a cohort from NIH/GDC, so it knows TCGA's sample type names. Point inputs.counts and inputs.design at your own files and it never runs.
  • The rediscovery benchmark scores recovery of known tumour antigens. It is an evaluation harness for the ranker, not part of a run.
  • The safety gate compares candidates against GTEx normal-tissue baselines. That is a human resource, and so are the SURFY surfaceome, the UniProt membrane extension and SURFACE-Bind's site inventory.

So the honest scope is any human bulk RNA-seq contrast between two conditions — disease versus healthy, treated versus untreated, responder versus non-responder, one tissue versus another. Non-human cohorts would need substitutes for four reference resources, none of which is wired in.


What it does

  bulk RNA-seq counts                               Designed protein binders
              │                                              ▲
              │                                              │
              ▼                                              │
   Differential expression  ──►  Surface-exposed  ──►  De novo backbone
   (pydeseq2)                   (SURFY)              (RFdiffusion / BindCraft / BoltzGen)
                                     │                       │
                                     ▼                       ▼
                              Targetable sites          Sequence design
                              (SURFACE-Bind)            (ProteinMPNN)
                                     │                       │
                                     ▼                       ▼
                              AlphaFoldDB structure     Affinity + structure
                                                        validation
                                                        (Boltz-2 / Chai-1r)
                                                              │
                                                              ▼
                                                  Multi-objective ranking
                                                              │
                                                              ▼
                                       HTML report + RO-Crate (FAIR)
                                       with full PROV-O provenance

Commands

Capability Status How to try
bindsight demo — full discovery on a real cohort + report ✅ ready bindsight demo
bindsight discover — your own RNA-seq cohort → ranked targets ✅ ready bindsight discover my.yaml --out runs/x
bindsight ui — local interface: the evidence, a demo, your own data, past runs, and the 20 predicted complexes in 3-D ✅ ready bindsight ui
bindsight report — paper-style HTML, embedded volcano + provenance ✅ ready bindsight report runs/x
bindsight run — full orchestrator (discover → design → validate → rank → report → export) ✅ ready bindsight run my.yaml --out runs/x
bindsight design — RFdiffusion + ProteinMPNN + Boltz-2 on a free Kaggle T4 ✅ runs end to end bindsight design runs/x --backend kaggle
bindsight design <run_dir> --dry-run — GPU cost estimate before spending ✅ ready bindsight design runs/x --backend modal --dry-run
bindsight validate — materialise the design job's metrics ✅ ready bindsight validate runs/x
bindsight rank — multi-objective composite scoring ✅ ready bindsight rank runs/x
bindsight export — RO-Crate zip for deposit ✅ ready bindsight export runs/x --out runs/x.crate.zip
bindsight benchmark — score rediscovery of held-out known antigens ✅ ready bindsight benchmark runs/x --known-antigens benchmarks/known.tsv
bindsight doctor — diagnose deps, caches, vendored data ✅ ready bindsight doctor
bindsight verify-licenses — per-component license inventory ✅ ready bindsight verify-licenses
Snakemake front-end — the same stage functions as a DAG ✅ ready, stops before the crate snakemake --configfile my.yaml --cores 4 (needs .[workflow])
BindCraft / BoltzGen / Chai-1r / AF2-IG ⚠️ wired, but no shipped backend can run them The executor dispatches to all four, and no backend builds an environment in which that dispatch succeeds. The CLI refuses the combination locally rather than spending GPU quota discovering it — see below

Runner and plugin status

Not every backend carries the same weight of evidence, and presenting them as peers would be misleading.

Status Why
Kaggle The verified free path Headless via the Kaggle API, so a reader can re-run the exact job on their own free quota. Pinned to a T4: Kaggle's own docs warn its default P100 cannot run current PyTorch.
local_docker For your own GPU Native and containerised modes; the native mode is what CPU tests exercise.
Modal Prepared, not executed The paid escape hatch for what free hardware cannot reach. Its image carries the whole design stack, but running it costs money and it has not been run end to end.
Colab Interactive on-ramp only Google's API does not permit launching a free-tier notebook from a CLI, so this path needs a human with a browser tab open. That is a demo, not a reproducibility path.
RFdiffusion, ProteinMPNN, Boltz-2 Verified on free hardware The committed benchmark ran the whole stack on a free Kaggle T4, from a wheel built out of this tree. All 20 designs carry a target chain byte-identical to the native domain IV, so "the target was held fixed" is a check rather than a claim.
AF2 initial-guess Buildable free PyRosetta is credential-free for non-commercial use since 2024, and is the restriction on this path; the AlphaFold2 parameters are CC BY 4.0.
BindCraft, BoltzGen Reduced-target only on free hardware Both fit a 16 GB card against a small domain, not a full receptor. BoltzGen's integration was rewritten after its command was found not to exist upstream.
Chai-1r Needs Ampere or newer It requires bfloat16, which no free-tier GPU has. Verifying it means renting roughly an hour of a modern card.

Note on GPU stages. The design and validation models require CUDA, so they run on the backend you choose, not on the CPU host.


Reproducing the results

Three tiers, because they cost very different things.

1. Regenerate the published pages from committed artifacts — offline, seconds.

python scripts/build_docs_results.py   # rewrites docs/results.md; it should not change
python -m pytest -q                    # 2000+ tests, no network

2. Re-run the rediscovery study — needs network, a few CPU-hours.

Cohorts are downloaded from NIH/GDC on first use and cached under data/gdc_cache/, which is not committed; the download is the slow part.

python benchmarks/run_study.py --all --cpus 2   # fetches + runs DESeq2
python benchmarks/run_study.py --score-only     # re-scores what is already on disk

3. Re-run the binder design — needs a GPU.

score_run.py is a scorer, not a runner: it consumes the archive a GPU run produces. The full chain is in RUN_FREE_GPU.md, which runs on a free Kaggle T4.

python benchmarks/designer_benchmark/prepare_erbb2_target.py
python benchmarks/run_designer_benchmark.py --backend kaggle \
    --designers rfdiff_mpnn --trajectories 10 \
    --structures-dir data/target_structures \
    --out benchmarks/designer_benchmark/run
python benchmarks/designer_benchmark/score_run.py <out_dir>/<id>.tar.gz \
    --n-trajectories 10 --out benchmarks/designer_benchmark

Repository map

Each top-level area carries its own README.md explaining what is in it and why — bindsight/, tests/, scripts/, benchmarks/ and each benchmark under it, docs/, examples/, envs/ and paper/. Package subdirectories are documented in the table below rather than individually.

Path What it holds
bindsight/ The Python package — io, deg, targets, surfaceome, structures, epitopes, design, runners, validate, rank, benchmark, pipelines, provenance, export, report
benchmarks/ All the evidence — the study, the calibration control, the designer benchmark, the provenance join, and the held-out antigen set
tests/ 2,000+ tests. Many are guards on published claims, not on code
paper/ JOSS and bioRxiv manuscripts, and the validation write-up
docs/ Long-form documentation (mkdocs-material source)
examples/ Runnable pipeline configs
envs/ Conda environment for the discovery half, with pinned constraints
scripts/ Generators for vendored data and published pages
.github/workflows/ CI, docs, docker, release artifacts, and the two paper PDFs
File What it is
ARCHITECTURE.md The architectural source of truth
CHANGELOG.md Per-version changes
CONTRIBUTING.md Dev setup, testing, commit conventions
LICENSING.md Per-dependency licence inventory and commercial-use guidance
SECURITY.md How to report a vulnerability
CITATION.cff Citation metadata
Snakefile The Snakemake DAG front-end

Who it's for

  • Translational researchers who want a free, reproducible "data → designed binder" pipeline.
  • Clinical biologists who need an audit trail back from a binder to the cohort.
  • Method developers who want a held-out evaluation harness to benchmark new designers and validators.
  • Anyone with a two-condition human RNA-seq experiment — the cancer framing throughout this document reflects where it has been validated, not what it accepts.

What's distinctive

Existing protein-design tools bindsight
Input Target structure RNA-seq counts
Provenance PDB + maybe a log PROV-O JSON-LD + RO-Crate, audit trail to the cohort
Hardware HPC assumed CPU laptop + offload to a free Kaggle T4
Cost-awareness None --dry-run estimates GPU spend before running
Negative results Discarded Catalogued (failure_taxonomy.parquet), and published
Citability Code dump Tagged releases with SHA-256 checksums, JSON-Schema-validated outputs

For the full landscape comparison, see ARCHITECTURE.md § 8.


Acknowledgments

bindsight is an opinionated wrapper. Real intellectual credit belongs to the upstream tool authors. See LICENSING.md for the full inventory; the work this builds on most directly:

  • SURFACE-Bind (Balbi et al., PNAS 2026) — the targetable-sites catalog that makes the bridge tractable
  • pydeseq2 (Muzellec et al., Bioinformatics 2023) — Python DESeq2 implementation
  • RFdiffusion (Watson et al., Nature 2023) — backbone generation
  • ProteinMPNN (Dauparas et al., Science 2022) — sequence design
  • Boltz-2 (Wohlwend et al., 2025) — structure + affinity prediction
  • BindCraft (Pacesa et al., Nature 2025) — one-shot binder design
  • Snakemake (Mölder et al., F1000Research 2021) — workflow orchestration

Citation

This release is not archived under a DOI. Cite the repository, the tag you ran and the checksums attached to the release, plus the author:

Wahba, M. A. R. (2026). bindsight: a reproducible bridge from RNA-seq to de novo protein binder design (version X.Y.Z). https://github.com/mikhaeelatefrizk/bindsight

Citation metadata also lives in CITATION.cff; GitHub's "Cite this repository" button generates BibTeX and APA from it. Every release attaches a wheel, an sdist and a SHA256SUMS file, and every image is digest-pinned, so the artifacts behind a version are checkable even though the version has no DOI. From 0.3.5 a release also carries the bioRxiv manuscript and the JOSS paper as PDFs, typeset by CI. Please also cite the upstream tools you used — each run emits a software.bib to make that straightforward.

About the author

bindsight is built and maintained by Mikhaeel Atef Rizk Wahba, an independent researcher in Cairo, Egypt.

License

  • Code: GNU AGPL-3.0-or-later — copyright notice in COPYRIGHT. You may use, study, modify, and redistribute bindsight freely; if you distribute a modified version or run it as a network service, you must make your source available under the same licence, with attribution preserved. See LICENSING.md for component-level details — bindsight orchestrates external tools that keep their own licences, and some carry non-commercial terms.

Metadata

Release files for bindsight 0.3.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bindsight 0.3.5
File Size Uploaded
bindsight-0.3.5.tar.gz 3.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for bindsight 0.3.5
File Interpreter ABI Platform
bindsight-0.3.5-py3-none-any.whl Python 3 none any Details

Total release size: 4.1 MB

Release files / bindsight-0.3.5.tar.gz

Download URL bindsight-0.3.5.tar.gz
Size 3.4 MB
Tags Source
SHA-256 checksum
How to use checksums
216a77e774c9ff420099359a49cd29d126d116b2c2dbbbb30f9e24c0f3d8c0ee
BLAKE2b-256 checksum
How to use checksums
598c36a30e2fa6ef48b3d267c38890f75a2f76a20d2b859d9d7c8d7cc2fe346a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release files / bindsight-0.3.5-py3-none-any.whl

Download URL bindsight-0.3.5-py3-none-any.whl
Size 676.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b2f86bbbd44ba64a3343cf3484b8cf50552414b2b6701ff9fc38abf43b48c09
BLAKE2b-256 checksum
How to use checksums
ab0f6131bf9a1e137dc9281d763d0f139152bb74f427a34cf7911d1c8d4d7abe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 20, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.6

2 release files

This release

0.3.5 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page