{"id":49096907,"url":"https://github.com/aignostics/tme-studio","last_synced_at":"2026-04-20T21:02:59.318Z","repository":{"id":350419099,"uuid":"1204991127","full_name":"aignostics/tme-studio","owner":"aignostics","description":"🎨 A toolkit to explore the OpenTME dataset.","archived":false,"fork":false,"pushed_at":"2026-04-10T08:57:16.000Z","size":7654,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-10T10:18:35.896Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aignostics.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":".github/AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-08T14:26:52.000Z","updated_at":"2026-04-10T08:57:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aignostics/tme-studio","commit_stats":null,"previous_names":["aignostics/tme-studio"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/aignostics/tme-studio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aignostics%2Ftme-studio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aignostics%2Ftme-studio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aignostics%2Ftme-studio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aignostics%2Ftme-studio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aignostics","download_url":"https://codeload.github.com/aignostics/tme-studio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aignostics%2Ftme-studio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32065584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-20T21:02:57.826Z","updated_at":"2026-04-20T21:02:59.312Z","avatar_url":"https://github.com/aignostics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/aignostics/tme-studio/blob/main/LICENSE)\n[![CI](https://github.com/aignostics/tme-studio/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/aignostics/tme-studio/actions/workflows/ci-cd.yml)\n[![Dependabot](https://img.shields.io/badge/dependabot-active-brightgreen?style=flat-square\u0026logo=dependabot)](https://github.com/aignostics/tme-studio/security/dependabot)\n[![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/aignostics/tme-studio/issues?q=is%3Aissue%20state%3Aopen%20Dependency%20Dashboard)\n[![codecov](https://codecov.io/gh/aignostics/tme-studio/graph/badge.svg)](https://codecov.io/gh/aignostics/tme-studio)\n[![Ruff](https://img.shields.io/badge/style-Ruff-blue?color=D6FF65)](https://github.com/aignostics/tme-studio/blob/main/noxfile.py)\n[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-grayscale-inverted-border-orange.json)](https://github.com/aignostics/foundry-python)\n[![Open in molab](https://molab.marimo.io/molab-shield.svg)](https://molab.marimo.io/notebooks/nb_6P1wbPYcPEN5GfXbUjVnpg/app)\n\n# 🎨 TME Studio\n\nWelcome to TME Studio! This readme explains the content of TME Studio, and the dataset it is built on:  [OpenTME](https://huggingface.co/datasets/Aignostics/OpenTME).\n\nNew to TME Studio? Want to try out the notebooks right away without any set up required? [Try out our interactive demo via molab](https://molab.marimo.io/notebooks/nb_6P1wbPYcPEN5GfXbUjVnpg/app). \nMake sure you have [access to OpenTME on Hugging Face](#hugging-face-access), then open the link and start exploring. \n\n\nAlready familiar with TME Studio? You want to edit the notebooks and adapt them to your needs? \nYou can choose to either \n* follow the setup instructions to [fork the notebooks into your molab workspace](#edit-notebooks-in-molab) OR\n* follow the setup instructions to [run the notebooks locally](#edit-notebooks-locally) .\n\n## Content\n- [What is OpenTME?](#what-is-opentme)\n- [What is TME Studio?](#what-is-tme-studio)\n- [Setup instructions](#setup-instructions)\n\n\n## What is OpenTME?\nOpenTME is an open-source project by [Aignostics](https://aignostics.com) that provides academic researchers with pre-computed quantitative TME (Tumor Micro-Environment) features across H\u0026E-stained Whole-Slide Images (WSIs) from The Cancer Genome Atlas (TCGA). It provides comprehensive spatial outputs characterizing key cellular and tissue components of the TME, including cancer cells, immune cells, and stromal features, as well as their relationships within the tissue architecture.\n\nAll outputs were generated using [Atlas H\u0026E-TME](https://www.aignostics.com/products/he-tme-profiling-product), Aignostics' AI-powered computational pathology application for the automated identification and quantification of TME features in FFPE H\u0026E-stained tissue samples. \n\n\n## What is TME Studio?\n\nTME Studio contains a set of tutorials and example notebooks to help you explore [OpenTME](https://huggingface.co/datasets/Aignostics/OpenTME). TME Studio is provided as an entry point into OpenTME, and intended to accelerate research output from the OpenTME data.\n\n\n### Content\n\nThe structure of the notebooks in this repo looks as follows:\n\n```\ntme_studio/\n|-- src/\n    |-- aignostics_tme_studio/\n        |-- notebooks/\n            |-- demo/\n            |-- examples/\n            |-- tutorials/\n```\n*Each folder is described below. Follow the links and click the \"Fork\" button to run the notebooks in molab (make sure \nyou have [access to OpenTME on Hugging Face](#hugging-face-access), and a [molab](https://molab.marimo.io/) account).*\n\n* **Tutorials:** Step-by-step notebooks to help users get started, covering foundational tasks such as loading and exploring the dataset, and providing a guide through the OpenTME features.\n    1. [Getting started](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/tutorials/1_getting_started.py)\n    2. [Description of the OpenTME features](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/tutorials/2_description_opentme_features.py)\n    3. [Including TCGA metadata](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/tutorials/3_including_TCGA_metadata.py)\n* **Examples:** Concise notebooks demonstrating specific types of analysis, such as tumor immune phenotype classification and Kaplan–Meier survival plots. Note that these are examples that may be used as a starting point for your own analysis.\n    1. [Clustering](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/examples/clustering.py)\n    2. [Outlier detection](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/examples/outlier_detection.py)\n    3. [Survival analysis](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/examples/survival_analysis.py)\n    4. [Tumor immune phenotyping](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/examples/tumor_immune_phenotyping.py)\n\n* **Demo:** contains a demo notebook showcasing all features in OpenTME and some example analyses.\n    1. [Demo](https://molab.marimo.io/notebooks/nb_6P1wbPYcPEN5GfXbUjVnpg/app)\n  \nIf you are unfamiliar with the OpenTME dataset, we suggest beginning at the [getting started](https://molab.marimo.io/github.com/aignostics/tme-studio/blob/main/src/aignostics_tme_studio/notebooks/tutorials/1_getting_started.py) notebook. To get a feeling for all the different features you can find in OpenTME, have a look at the [demo](https://molab.marimo.io/notebooks/nb_6P1wbPYcPEN5GfXbUjVnpg/app).\n\n\n# Setup instructions \n## Hugging Face access\nRegardless of how you decide to run the notebooks, you will need to get access to OpenTME on Hugging Face 🤗. \n### Creating an access token\n1. Make sure you have a Hugging Face account. If you don't have one, you can create one for free at [hf.co/join](https://hf.co/join).\n2. Get access to the dataset by going to https://huggingface.co/datasets/Aignostics/OpenTME and clicking \"Access\"\n\n\u003e Note: You will receive an email from Hugging Face as soon as your access request has been reviewed. This may take a few working days.\n\n\u003e Note: No need to download the dataset! The tutorials will show you how to access the dataset via the Hugging Face API. \n\n3. Create an access token by going to https://huggingface.co/settings/tokens\n\n### Authenticating with your token\nYou can now use your token in two ways:\n1. Enter it in the designated box for it inside each notebook. This is how you authenticate when you are running a notebook in molab. You will have to repeat this action each time you open a notebook. \n2. Log in via the Hugging Face CLI (only when running notebooks locally). In this case your token will be stored and you won't have to enter your token each time you open a notebook.\n\n    1. Download the [Hugging Face CLI](https://huggingface.co/docs/huggingface_hub/en/guides/cli)\n    2. Log into hugging face by calling\n```\nhf auth login\n```\nand log in with your access token.\n\n\u003e Note: If you invalidated your token, you can force logging in with a new token by calling `hf auth login \\--force`\n\n\n## Edit notebooks in molab \nTo edit your own copy of the TME Studio notebooks in molab, do the following:\n1. Open the notebook of choice via the link in the [content overview](#content) above. E.g. our \n[Demo](https://molab.marimo.io/notebooks/nb_6P1wbPYcPEN5GfXbUjVnpg/app) notebook.\n2. Create a molab account, via the \"Sign In\" button in the upper right corner.\n3. Click the \"Fork\" button.\n4. Run the notebook via the play button.\n5. Install \"missing packages\" via the pop-up menu on the left tab bar.\n\nYou can start exploring now.\n\n## Edit notebooks locally\nTo run the TME Studio notebooks on your local machine, follow these installation instructions:\n\n### Prerequisites\n\n| Tool | Version | Purpose |\n|------|---------|---------|\n| [mise](https://mise.jdx.dev/) | latest | Task runner \u0026 tool version manager |\n| Git | latest | Version control |\n\n### Installing mise\n\n[mise](https://mise.jdx.dev/) manages tool versions (Python, uv, trivy, etc.) and runs all project tasks. Install it first:\n\n```shell\ncurl https://mise.run | sh\n\n# activate mise in the current shell and add to shell config for future sessions\necho 'eval \"$(mise activate --shims bash)\"' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\nFor .zsh users:\n```shell\necho 'eval \"$(mise activate --shims zsh)\"' \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n```\n\nFor other shells, see [mise installation docs](https://mise.jdx.dev/installing-mise.html).\n\n\nVerify the installation:\n\n```shell\nmise --version\n\n# Check path - mise shims should be first in the PATH to ensure the correct tool versions are used\necho $PATH\n\nwhich uv # Path should contain the `mise/shims/uv` shim, not a system-wide uv installation; please do not install uv in the same directory as `mise` to avoid conflicts\n```\n\n\n### Cloning the repository\n\nAuthenticate with GitHub using the Github CLI to clone the repository:\n\n```shell\ngh auth login\n\ngh repo clone aignostics/tme-studio\n\ncd tme-studio\nmise trust\ngh auth setup-git\n```\n\n\n### Installation\n\n```shell\n# Install all dev dependencies, pre-commit hooks, and keyring tooling\nmise run install\n\n# Verify everything works\nmise run lint\n\n# List all existing mise tasks\nmise tasks\n```\n\nThis runs `uv sync --all-extras` to install all dependencies, then sets up pre-commit hooks.\n\n### Starting Marimo\nYou are now ready to explore the notebooks! 🎨\n\nStart marimo by calling the following command and opening the URL in your browser:\n```\nuv run marimo edit\n```\nUse the marimo UI opened in your browser to navigate to the notebooks. \n\nAlternatively, you can run\n```\nuv run marimo edit path/to/notebook.py\n```\nto open a specific notebook directly.  \n\n## Citation\nIf you use OpenTME or TME Studio in your research, please cite:\n```\n@article{galama2026opentme,\n  title={{OpenTME}: An Open Dataset of {AI}-Powered {H\\\u0026E} Tumor \n         Microenvironment Profiles from {TCGA}},\n  author={Galama, Maaike and Kozar-Gillan, Nina and Embacher, Christina \n          and Dembo, Todd and B{\\\"o}hm, Cornelius and Ramberger, Evelyn \n          and Ribbat-Idel, Julika and Krupar, Rosemarie and Aumiller, Verena \n          and H{\\\"a}gele, Miriam and Standvoss, Kai and Erdmann, Gerrit \n          and Pablos, Blanca and Angelo, Ari and Schallenberg, Simon \n          and Norgan, Andrew and Matyas, Viktor and M{\\\"u}ller, Klaus-Robert \n          and Alber, Maximilian and Ruff, Lukas and Klauschen, Frederick},\n  journal={arXiv preprint arXiv:2604.12075},\n  year={2026},\n  url={https://arxiv.org/abs/2604.12075},\n}\n```\n\n\n## Further reading\n- [OpenTME](https://arxiv.org/abs/2604.12075) - Paper on arxiv describing OpenTME and TME Studio\n- [Security policy](SECURITY.md) - Documentation of security checks, tools, and principles\n- [Release notes](https://github.com/aignostics/tme-studio/releases) - Complete log of improvements and changes\n- [Attributions](ATTRIBUTIONS.md) - Open source projects this project builds upon\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faignostics%2Ftme-studio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faignostics%2Ftme-studio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faignostics%2Ftme-studio/lists"}