Extraction Method¶
Sources¶
- Session videos + transcripts:
connect.aacr26.org(Swapcard-backed). Videos are hosted on Vimeo with auto-generated English captions. - Poster abstracts:
cattendee.abstractsonline.com/meeting/21436(CTI Meeting Technology's Abstracts Online platform).
Session transcript pipeline¶
- Log into
connect.aacr26.org(Fastly CAPTCHA requires manual solve on first visit). - Search the Sessions listing for topic terms.
- Navigate to each parent session page — the Vimeo iframe triggers a config fetch at
https://player.vimeo.com/video/<id>/config?...transcript=1. - Read
request.text_tracks[0].url— a signedcaptions.vimeo.comURL (expires in ~6 hours). curlwithReferer: https://vimeo.com/to download the.vtt.- Strip cue numbers and timestamps → plain-text
.txtversion.
Poster pipeline — two patterns¶
Keyword-union (virtual-cells, clinical-trials, single-cell-spatial-omics): Best for narrow topics.
- Log into
cattendee.abstractsonline.com/meeting/21436(last name + 7-digit Registration ID) — this is the frontend. The API is hosted atwww.abstractsonline.com(thecattendee.subdomain is CloudFront-fronted and 403s on/oe3/*). - Read Backpack auth token from
localStorage.token. - For each quoted phrase,
POST https://www.abstractsonline.com/oe3/Program/21436/Search/new/presentationwith{"Phrase": "<query>"}, headersBackpack: <uuid>andAccept: application/json(omit the Accept header and the API returns XML). - Poll
/Search/<SearchId>/Results?page=1&pagesize=2500untilSearch.Status == "Complete". - Union unique
Idvalues across all queries. - For each
Id,GET /Presentation/<Id>for full record.
Session endpoint (bioinfo-tools): Best for broad methods topics.
- Identify methods-oriented session IDs (e.g., 228 = Digital Pathology 1).
GET /Session/<sid>/Presentations— returns the full presentation array directly. Complete session coverage, no false positives.
Filter + cleanup¶
For both patterns:
- Filter
Activity ∈ {Abstract Submission, Late Breaking and Clinical Trials}+PlayerUrl present(Vimeo poster viewer link). - HTML-decode via
DOMParser, strip tags. - Emit JSONL + per-poster
.txt.
Data-transport workaround¶
Chrome download flow became blocked partway through the extraction session (macOS TCC or Claude sandbox state). Switched to:
- POST JSONL to
httpbin.org/anythingvia browserfetch(). - Capture response via chrome-devtools MCP
get_network_request --responseFilePath. - Extract the
.datafield from the JSON response withjq.
Clean, fast, bypasses the filesystem path entirely.
Keyword unions per topic¶
Virtual Cells (48 posters from 88 union hits)¶
"virtual cell", "virtual cells",
scGPT, Geneformer, scFoundation, "Universal Cell Embeddings",
scBERT, scMulan, CellLM, Nicheformer,
"cell foundation model", "foundation model",
"in silico perturbation", "in silico screen", "perturbation prediction",
"digital twin"
Single-Cell & Spatial Omics (1,015 posters from 1,331 union hits)¶
"single-cell", "single cell", "single nucleus",
"spatial transcriptomics", "spatial omics", "spatial proteomics",
"imaging mass cytometry",
MERFISH, Visium, Xenium, CODEX, CyCIF,
snRNA-seq, scRNA-seq, scATAC, CITE-seq
Clinical Trials (642 posters via hybrid union)¶
Keyword union ("Phase I", "Phase II", "Phase III", "clinical trial") → 790 IDs → filter = 578 real posters.
Plus session endpoint for 25 CT-track session IDs → 386 presentations → filter = 270 posters.
Union by Id → 642 unique posters.
See the repo¶
Source data + extraction artifacts live at LiudengZhang/aacr-2026. Raw Vimeo player configs are in raw/<topic>/.