Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
File renamed without changes.
114 changes: 114 additions & 0 deletions assets/css/custom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/* Logo dark/light switching.
Congo toggles a .dark class on <html> via JS — the native
prefers-color-scheme media query inside <picture> tags does not respond
to this toggle, so we handle switching with CSS classes instead. */
.logo-light {
display: block;
max-width: 100%;
height: auto;
}
.logo-dark {
display: none;
max-width: 100%;
height: auto;
}
html.dark .logo-light {
display: none;
}
html.dark .logo-dark {
display: block;
}

/* Experimental page — v2 callout and problem cards */
html.dark .v2-callout {
background: #1e3a5f !important;
border-color: #3b82f6 !important;
}
html.dark .v2-callout p { color: #93c5fd !important; }
html.dark .v2-callout strong { color: #bfdbfe !important; }
html.dark .problem-card {
background: #1f2937 !important;
border-color: #374151 !important;
}
html.dark .problem-card p { color: #9ca3af !important; }
html.dark .problem-card strong { color: #d1d5db !important; }
html.dark .v2-pipeline-step-neutral {
background: #1f2937 !important;
border-color: #374151 !important;
color: #d1d5db !important;
}
html.dark .v2-pipeline-step-purple {
background: #2e1065 !important;
border-color: #4c1d95 !important;
color: #c4b5fd !important;
}
html.dark .v2-pipeline-step-blue {
background: #1e3a5f !important;
border-color: #1e40af !important;
color: #93c5fd !important;
}
html.dark .v2-pipeline-step-yellow {
background: #422006 !important;
border-color: #854d0e !important;
color: #fde68a !important;
}
html.dark .v2-pipeline-step-green {
background: #052e16 !important;
border-color: #166534 !important;
color: #86efac !important;
}

/* Hero entrance animations */
@keyframes fadeUp {
from { opacity: 0; transform: translateY(28px); }
to { opacity: 1; transform: translateY(0); }
}
.hero-fade-1 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.15s both; }
.hero-fade-2 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.30s both; }
.hero-fade-3 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.45s both; }
.hero-fade-4 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.60s both; }
.hero-fade-5 { animation: fadeUp 0.7s cubic-bezier(0.22,1,0.36,1) 0.75s both; }

/* List view logos */
.list-logo-light { display: block; }
.list-logo-dark { display: none; }
html.dark .list-logo-light { display: none !important; }
html.dark .list-logo-dark { display: block !important; }

/* Pipeline step hover bounce (spring easing gives natural overshoot) */
.pipeline-step {
transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.2s ease;
}
.pipeline-step:hover {
transform: translateY(-4px) scale(1.04);
box-shadow: 0 6px 16px rgba(0,0,0,0.13);
}
html.dark .pipeline-step:hover {
box-shadow: 0 6px 16px rgba(0,0,0,0.45);
}

/* Pill icon */
.pill-icon {
height: 14px;
width: 14px;
object-fit: contain;
vertical-align: middle;
margin-right: 4px;
border-radius: 2px;
display: inline-block;
position: relative;
top: -1px;
}

/* Hero dark mode overrides */
html.dark .hero-tagline { color: #9ca3af !important; }
html.dark .hero-arrow { color: #4b5563 !important; }
html.dark .hero-stage-label { color: #6b7280 !important; }

html.dark .hero-pill-neutral { background: #1f2937 !important; border-color: #374151 !important; color: #d1d5db !important; }
html.dark .hero-pill-purple { background: #2e1065 !important; border-color: #4c1d95 !important; color: #c4b5fd !important; }
html.dark .hero-pill-blue { background: #1e3a5f !important; border-color: #1e40af !important; color: #93c5fd !important; }
html.dark .hero-pill-green { background: #052e16 !important; border-color: #166534 !important; color: #86efac !important; }
html.dark .hero-btn-primary { background: #3b82f6 !important; }
html.dark .hero-btn-outline { border-color: #374151 !important; color: #d1d5db !important; }
html.dark .hero-secondary-link { color: #6b7280 !important; border-bottom-color: #374151 !important; }
12 changes: 12 additions & 0 deletions config/_default/hugo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
baseURL = "https://cytomining.github.io/"
locale = "en"
title = "Cytomining"
theme = "congo"

enableRobotsTXT = true
paginate = 10

[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
9 changes: 9 additions & 0 deletions config/_default/languages.en.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
label = "English"
weight = 1
title = "Cytomining"

[params]
description = "Essential tools, workflows, and best practices for single-cell image-based profiling."

[params.author]
name = "Cytomining"
29 changes: 29 additions & 0 deletions config/_default/menus.en.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
[[main]]
name = "Tools"
pageRef = "tools"
weight = 10

[[main]]
name = "Experimental tools"
pageRef = "experimental"
weight = 20

[[main]]
name = "Media"
pageRef = "media"
weight = 30

[[main]]
name = "About"
pageRef = "about"
weight = 40

[[main]]
name = "History"
pageRef = "history"
weight = 50

[[main]]
name = "Contact"
pageRef = "contact"
weight = 60
32 changes: 32 additions & 0 deletions config/_default/params.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
colorScheme = "ocean"
defaultAppearance = "light"
autoSwitchAppearance = true
enableSearch = true
enableCodeCopy = false

[homepage]
layout = "background"
showRecent = false

[header]
layout = "fixed"

[footer]
showCopyright = true
showThemeAttribution = false
showAppearanceSwitcher = true
showScrollToTop = true

[article]
showDate = false
showAuthor = false
showReadingTime = false
showTableOfContents = true
showRelatedContent = false
showEdit = false

[list]
showCards = true
groupByYear = false
cardView = true
showSummary = true
91 changes: 91 additions & 0 deletions content/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
title: "Cytomining"
description: "Open-source tools for single-cell image-based profiling"
---

<div class="not-prose" style="text-align: center; padding: 3rem 0 2rem;">

<!-- Logo -->
<div class="hero-fade-1" style="margin-bottom: 1.5rem;">
<img
src="https://avatars.githubusercontent.com/u/19327357?v=4"
alt="Cytomining"
style="width: 96px; height: 96px; border-radius: 50%; margin: 0 auto 1rem; display: block; box-shadow: 0 4px 20px rgba(0,0,0,0.12);"
>
<h1 style="font-size: 2.5rem; font-weight: 800; letter-spacing: -0.02em; margin: 0;">Cytomining</h1>
</div>

<!-- Tagline -->
<div class="hero-fade-2" style="margin-bottom: 2.5rem;">
<p style="font-size: 1.2rem; color: #6b7280; max-width: 540px; margin: 0 auto; line-height: 1.6;">
Open-source tools for every stage of the<br>single-cell image-based profiling workflow.
</p>
</div>

<!-- Pipeline visualization -->
<div class="hero-fade-3" style="margin-bottom: 2.5rem; overflow-x: auto; padding: 0.5rem 0;">
<div style="display: inline-flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; justify-content: center; padding: 0 1rem;">

<div class="pipeline-step" style="background: #f3f4f6; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #374151; font-weight: 500; border: 1px solid #e5e7eb;">
🔬 Raw Images
</div>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">→</span>

<a href="/experimental/iceberg-bioimage/" class="pipeline-step" style="background: #ede9fe; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #5b21b6; font-weight: 600; border: 1px solid #ddd6fe; text-decoration: none;">
iceberg-bioimage
</a>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">→</span>

<a href="/tools/cytotable/" class="pipeline-step" style="background: #ede9fe; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #5b21b6; font-weight: 600; border: 1px solid #ddd6fe; text-decoration: none;">
CytoTable
</a>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">→</span>

<a href="/tools/cosmicqc/" class="pipeline-step" style="background: #dbeafe; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #1e40af; font-weight: 600; border: 1px solid #bfdbfe; text-decoration: none;">
coSMicQC
</a>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">→</span>

<a href="/tools/pycytominer/" class="pipeline-step" style="background: #dbeafe; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #1e40af; font-weight: 600; border: 1px solid #bfdbfe; text-decoration: none;">
pycytominer
</a>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">→</span>

<a href="/tools/copairs/" class="pipeline-step" style="background: #dcfce7; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #166534; font-weight: 600; border: 1px solid #bbf7d0; text-decoration: none;">
copairs
</a>

<span style="color: #9ca3af; font-size: 1.1rem; font-weight: 300;">/</span>

<a href="/experimental/buscar/" class="pipeline-step" style="background: #dcfce7; border-radius: 8px; padding: 0.45rem 0.9rem; font-size: 0.8rem; color: #166534; font-weight: 600; border: 1px solid #bbf7d0; text-decoration: none;">
buscar
</a>

</div>
<p style="font-size: 0.72rem; color: #9ca3af; margin-top: 0.75rem;">ingest &nbsp;·&nbsp; quality control &nbsp;·&nbsp; process &nbsp;·&nbsp; evaluate</p>
</div>

<!-- CTA -->
<div class="hero-fade-4" style="margin-bottom: 2.5rem; display: flex; gap: 0.75rem; justify-content: center; flex-wrap: wrap;">
<a href="/tools/" style="display: inline-block; background: #2563eb; color: white; font-weight: 600; font-size: 0.95rem; padding: 0.65rem 1.5rem; border-radius: 8px; text-decoration: none; transition: background 0.15s;">
Explore tools →
</a>
<a href="https://cytomining.github.io/profiling-handbook" target="_blank" style="display: inline-block; background: transparent; color: #374151; font-weight: 600; font-size: 0.95rem; padding: 0.65rem 1.5rem; border-radius: 8px; text-decoration: none; border: 1.5px solid #d1d5db; transition: border-color 0.15s;">
Profiling handbook
</a>
</div>

<!-- Community + get started links -->
<div class="hero-fade-5" style="font-size: 0.85rem; color: #6b7280; display: flex; gap: 1.25rem; justify-content: center; flex-wrap: wrap;">
<a href="https://github.com/cytomining/profiling-recipe" target="_blank" style="color: #6b7280; text-decoration: none; border-bottom: 1px dashed #d1d5db;">Profiling recipe</a>
<a href="https://forum.image.sc/" target="_blank" style="color: #6b7280; text-decoration: none; border-bottom: 1px dashed #d1d5db;">image.sc forum</a>
<a href="https://github.com/orgs/cytomining/people" target="_blank" style="color: #6b7280; text-decoration: none; border-bottom: 1px dashed #d1d5db;">Contributors</a>
<a href="https://www.cytodata.org/" target="_blank" style="color: #6b7280; text-decoration: none; border-bottom: 1px dashed #d1d5db;">CytoData community</a>
</div>

</div>
7 changes: 7 additions & 0 deletions content/about/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: "About"
description: "About the Cytomining ecosystem and community."
---

Cytomining is an open-source software ecosystem that maintains essential tools, workflows, and best practices for single-cell image-based profiling and microscopy data analysis research.
We are proud members of the [CytoData](https://www.cytodata.org/) scientific community.
8 changes: 8 additions & 0 deletions content/contact/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
title: "Contact"
description: "Get in touch with the Cytomining community."
---

- 💬 Join the conversation on our [Discourse forums](https://forum.image.sc/)
- 📫 Subscribe to the [CytoData mailing list](https://www.cytodata.org/contact/)
- 🐛 Report issues on [GitHub](https://github.com/cytomining)
6 changes: 6 additions & 0 deletions content/experimental/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: "Experimental"
description: "Next-generation tools under active development in the WayScience organization."
---

The following tools are under active development in the [WayScience](https://github.com/WayScience) organization and represent the next generation of the Cytomining ecosystem.
23 changes: 23 additions & 0 deletions content/experimental/buscar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: "buscar"
description: "Hit calling — identifies biologically active perturbations from single-cell morphological profiles using distribution-level scoring."
showDate: false
showAuthor: false
logoUrl: "https://raw.githubusercontent.com/WayScience/buscar/main/logo/just-icon.png"
---

<img class="logo-light" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-light-bg.png" alt="buscar logo" width="400">
<img class="logo-dark" src="https://raw.githubusercontent.com/WayScience/buscar/main/logo/with-text-for-dark-bg.png" alt="buscar logo" width="400">

buscar is a Python package for reproducible hit calling in high-content screening.
Rather than averaging cells into population-level summaries, it operates on individual cell distributions to preserve biological heterogeneity and identify perturbations with on-target morphological signatures.

**Key capabilities:**

- Define on-target and off-target morphology signatures from reference profiles
- Score perturbation efficacy via Earth Mover's Distance
- Assess specificity with off-target scoring to reduce false positives
- Preserve single-cell heterogeneity throughout hit calling
- Integrates directly with pycytominer, coSMicQC, and CytoTable workflows

**[View on GitHub →](https://github.com/WayScience/buscar)**
22 changes: 22 additions & 0 deletions content/experimental/iceberg-bioimage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
title: "iceberg-bioimage"
description: "Data cataloging — scans bioimaging stores and publishes image metadata to Cytomining-compatible Parquet warehouses via Apache Iceberg."
showDate: false
showAuthor: false
logoUrl: "https://raw.githubusercontent.com/WayScience/iceberg-bioimage/main/docs/src/_static/iceberg-bioimage-logo.png"
---

<img src="https://raw.githubusercontent.com/WayScience/iceberg-bioimage/main/docs/src/_static/iceberg-bioimage-logo.png" alt="iceberg-bioimage logo" width="400">

iceberg-bioimage is a Python package that catalogs bioimaging data using Apache Iceberg.
It scans image stores across formats, publishes structured metadata tables, and exports layouts compatible with the Cytomining profiling ecosystem — bridging raw image archives and downstream analysis pipelines.

**Key capabilities:**

- Scan image stores into canonical `ScanResult` objects
- Publish image metadata with PyIceberg for versioned, queryable catalogs
- Export Cytomining-compatible Parquet warehouses for profiling workflows
- Validate profile tables against microscopy join contracts
- Supports Zarr, OME-TIFF, and Parquet source formats

**[View documentation →](https://wayscience.github.io/iceberg-bioimage/)**
22 changes: 22 additions & 0 deletions content/experimental/ome-arrow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
title: "OME-arrow"
description: "Image storage — stores microscopy images alongside metadata and derived data in a unified, queryable Apache Arrow format."
showDate: false
showAuthor: false
logoUrl: "https://raw.githubusercontent.com/WayScience/OME-arrow/main/docs/src/_static/ome-arrow-logo.png"
---

<img src="https://raw.githubusercontent.com/WayScience/OME-arrow/main/docs/src/_static/ome-arrow-logo.png" alt="OME-arrow logo" width="400">

OME-arrow brings Open Microscopy Environment (OME) specifications to Apache Arrow, enabling microscopy images to be stored directly in data tables alongside their metadata and derived features as multilayer structs.
This makes bioimaging data fast to query, easy to share, and compatible with modern tensor-based ML workflows.

**Key capabilities:**

- Store images, metadata, and derived features together in a single table
- Support for TIFF, OME-Zarr, NumPy, and Parquet source formats
- Lazy reading and region-of-interest (ROI) access for large datasets
- Tensor-focused output compatible with PyTorch, JAX, and DLPack
- Visualization integrations for matplotlib, PyVista, and Napari

**[View documentation →](https://wayscience.github.io/ome-arrow/)**
Loading
Loading