changeset 2:c520f64ffd57 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/seurat commit 0c7884b059c6a12ecf22a025317f04c160962be7
author iuc
date Thu, 26 Mar 2026 11:15:58 +0000
parents fee4b4eb0ef5
children
files New folder/test-data/imagedimplot.png New folder/test-data/imagefeatureplot.png New folder/test-data/test_seurat_spatial.rds macros.xml plot.xml test-data/imagedimplot.png test-data/imagefeatureplot.png test-data/test_seurat_spatial.rds
diffstat 8 files changed, 337 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
Binary file New folder/test-data/imagedimplot.png has changed
Binary file New folder/test-data/imagefeatureplot.png has changed
Binary file New folder/test-data/test_seurat_spatial.rds has changed
--- a/macros.xml	Tue Nov 05 11:55:07 2024 +0000
+++ b/macros.xml	Thu Mar 26 11:15:58 2026 +0000
@@ -1,28 +1,46 @@
 <macros>
-    <token name="@TOOL_VERSION@">5.0</token>
+    <token name="@TOOL_VERSION@">5.4.0</token>
     <token name="@VERSION_SUFFIX@">0</token>
     <token name="@PROFILE@">23.0</token>
     <xml name="bio_tools">
         <xrefs>
             <xref type="bio.tools">seurat</xref>
         </xrefs>
-      </xml>
+    </xml>
+    <xml name="creators">
+        <creator>
+            <person givenName="Marisa" familyName="Loach" url="https://github.com/MarisaJL" />
+            <person givenName="Maria" familyName="Doyle" url="https://github.com/mblue9" />
+            <person givenName="Marius" familyName="van den Beek" url="https://github.com/mvdbeek" />
+            <person givenName="Björn" familyName="Grüning" url="https://github.com/bgruening" />
+            <person givenName="Alex" familyName="Ostrovsky" url="https://github.com/astrovsky01" />
+            <person givenName="Nicola" familyName="Soranzo" url="https://github.com/nsoranzo" />
+            <person givenName="Lance" familyName="Parsons" url="https://github.com/lparsons" />
+            <person givenName="mtekman" url="https://github.com/mtekman" />
+            <person givenName="Pavankumar" familyName="Videm"  url="https://github.com/pavanvidem" />
+            <person givenName="bernt" familyName="matthias"  url="https://github.com/bernt-matthias" />
+            <person givenName="Khaled" familyName="Jum'ah" url="https://github.com/khaled196" />
+            <person givenName="Krzysztof" familyName="Poterlowicz" url="https://github.com/kpoterlowicz" />
+            <organization name="poterlowicz-lab" url="https://github.com/poterlowicz-lab" />
+        </creator>
+    </xml>
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@TOOL_VERSION@">r-seurat</requirement>
             <requirement type="package" version="1.2.1">fit-sne</requirement>
-            <requirement type="package" version="3.58.1">bioconductor-limma</requirement>
-            <requirement type="package" version="1.28.0">bioconductor-mast</requirement>
-            <requirement type="package" version="1.42.0">bioconductor-deseq2</requirement>
-            <requirement type="package" version="2.1.3">r-svglite</requirement>
+            <requirement type="package" version="3.62.1">bioconductor-limma</requirement>
+            <requirement type="package" version="1.32.0">bioconductor-mast</requirement>
+            <requirement type="package" version="1.46.0">bioconductor-deseq2</requirement>
+            <requirement type="package" version="1.18.0">bioconductor-glmgampoi</requirement>
+            <requirement type="package" version="1.22.0">bioconductor-batchelor</requirement>
+            <requirement type="package" version="2.2.2">r-svglite</requirement>
             <requirement type="package" version="1.1">r-metap</requirement>
-            <requirement type="package" version="1.14.0">bioconductor-glmGamPoi</requirement>
-            <requirement type="package" version="0.5.3">umap-learn</requirement> <!-- https://github.com/satijalab/seurat/issues/8283 -->
-            <requirement type="package" version="0.10.2">leidenalg</requirement>
-            <requirement type="package" version="1.2.0">r-harmony</requirement>
-            <requirement type="package" version="1.18.0">bioconductor-batchelor</requirement>
-            <requirement type="package" version="2.0.0">numpy</requirement>
-            <requirement type="package" version="2.2.2">pandas</requirement>
+            <requirement type="package" version="23.0.1" >r-arrow</requirement>
+            <requirement type="package" version="1.2.4">r-harmony</requirement>
+            <requirement type="package" version="0.5.8">umap-learn</requirement>
+            <requirement type="package" version="0.11.0">leidenalg</requirement>
+            <requirement type="package" version="2.3.5">numpy</requirement>
+            <requirement type="package" version="2.3.3">pandas</requirement>
         </requirements>
     </xml>
     <xml name="citations">
@@ -56,24 +74,30 @@
     </token>
     <token name="@reticulate_hack@"><![CDATA[
 library(reticulate)
-## HACK: CI biocontainers do not contain a useable conda binary, just the env.
-##  see: https://github.com/galaxyproject/tools-iuc/issues/5585#issuecomment-1803773923
-is_biocontainer = grepl("^# cmd: /opt/conda/bin/",
-                        paste0(reticulate:::python_info_condaenv_find("/usr/local/"),
-                               "-none"))
+
+## Detect biocontainer environment
+is_biocontainer <- FALSE
+
+if (file.exists("/usr/local/bin/python") && !file.exists("/opt/conda/bin/conda")) {
+    is_biocontainer <- TRUE
+}
+
 if (is_biocontainer) {
-   ## conda detection false positive
-   assignInNamespace("is_conda_python", function(x) FALSE, ns="reticulate")
-   use_python("/usr/local/bin/python")
+    ## Inside a biocontainer: prevent reticulate from assuming conda exists
+    assignInNamespace("is_conda_python", function(x) FALSE, ns = "reticulate")
+    use_python("/usr/local/bin/python", required = TRUE)
+
 } else {
-   conda_path = Sys.getenv("CONDA_PREFIX")
-   if (conda_path != "") {
-      ## Active conda env found
-      use_python(file.path(conda_path, "bin", "python3"))
-   } else {
-      ## Not biocontainer or conda, assume system python
-      use_python("/usr/bin/python3")
-   }
+
+    ## Conda or system Python
+    conda_path <- Sys.getenv("CONDA_PREFIX")
+
+    if (nzchar(conda_path)) {
+        use_python(file.path(conda_path, "bin", "python3"), required = TRUE)
+    } else {
+        use_python("/usr/bin/python3", required = TRUE)
+    }
+
 }]]>
     </token>
     <xml name="input_rds">
@@ -406,11 +430,17 @@
     <xml name="plot_group_by">
         <param name="group_by" type="text" optional="true" value="" label="Factor to group cells by" help="(group.by)"/>
     </xml>
+    <xml name="plot_fov">
+        <param name="fov" type="text" optional="true" value="" label="Name of FOV to plot" help=""/>
+    </xml>
     <xml name="plot_split_by">
         <param name="split_by" type="text" optional="true" value="" label="Factor or identity to split the plot by" help="(split.by)"/>
     </xml>
     <xml name="plot_alpha">
-        <param argument="alpha" type="integer" value="1" label="Alpha value for points"/>
+        <param argument="alpha" type="integer" optional="true" value="1" label="Alpha value for points"/>
+    </xml>
+    <xml name="plot_shuffle_cols">
+        <param argument="shuffle_cols" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Randomly choose colors when a palette or vector of colors is provided to cols"/>
     </xml>
     <xml name="plot_pt_size">
         <param name="pt_size" type="float" optional="true" value="" label="Point size for plot" help="(pt.size)"/>
@@ -418,9 +448,58 @@
     <xml name="plot_smooth">
         <param argument="smooth" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Smooth the graph"/>
     </xml>
+    <xml name="plot_boundaries">
+        <param argument="boundaries" type="text" optional="true" value="" label="Boundaries" help="A vector of segmentation boundaries per image to plot e.g boundaries ('slideA_fov1' = 'segmentation', 'slideB_fov2' = 'centroids')"/>
+    </xml>
+    <xml name="plot_molecules">
+        <param argument="molecules" type="text" optional="true" value="" label="Molecules" help="A vector of molecules to plot"/>
+        <param argument="mols_size" type="float" value="0.1" label="Point size for molecules" help="(mols.size)"/>
+        <param argument="mols_cols" type="text" optional="true" value="" label="Molecules Colors" help="A vector of color for molecules. The 'Set1' palette from RColorBrewer is used by default (make sure the vector has the same length as the molecules)"/>
+    </xml>
+    <xml name="plot_mol_alpha">
+        <param name="mols_alpha" type="float" optional="true" value="1.0" min="0.0" max="1.0" label="Alpha value for molecules" help="Controls the transparency of individual molecules when plotted; 0 is fully transparent and 1 is fully opaque."/>
+    </xml>
+    <xml name="plot_nmols">
+        <param name="nmols" type="integer" optional="true" value="1000" label="Max number of each molecule specified in `molecules` to plot" help=""/>
+    </xml>
     <xml name="plot_ncol">
         <param argument="ncol" type="integer" optional="true" value="" label="Number of columns to display"/>
     </xml>
+    <xml name="plot_border">
+        <param argument="border_color" type="text" value="white" label="Color of cell segmentation border" help="Default color is set to white"/>
+        <param argument="border_size" type="integer" optional="true" value="" label="Thickness of cell segmentation borders" help=""/>
+    </xml>
+    <xml name="plot_na_value">
+    <param name="na_value" type="select" label="Colour for NA points when using custom scale" help="(na.value)">
+        <option value="lightgrey" selected="true">lightgrey</option>
+        <option value="grey">grey</option>
+        <option value="black">black</option>
+    </param>
+    </xml>
+    <xml name="plot_dark_background">
+        <param argument="dark_background" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="true" label="Set plot background to black"/>
+    </xml>
+    <xml name="plot_crop">
+        <param argument="crop" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Crop the plots to area with cells only"/>
+    </xml>
+    <xml name="plot_overlap">
+        <param argument="overlap" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Overlay boundaries from a single image to create a single plot"/>
+    </xml>
+    <xml name="plot_axes">
+        <param argument="axes" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Keep axes and panel background"/>
+    </xml>
+    <xml name="plot_combine">
+        <param argument="combine" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="true" label="Combine plots into a single patchwork"/>
+    </xml>
+    <xml name="plot_coord_fixed">
+        <param argument="coord_fixed" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="true" label="Plot cartesian coordinates with fixed aspect ratio"/>
+    </xml>
+    <xml name="plot_flip_xy">
+        <param argument="flip_xy" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Flag to flip X and Y axes"/>
+    </xml>
+    <xml name="plot_cells">
+        <param argument="cells" type="data" format="txt,tabular" optional="true" label="List of cells to include on plot" help="text file with one cell on each line"/>
+    </xml>
     <xml name="raster_select">
         <conditional name="raster">
             <param argument="raster" type="select" label="Convert points to raster format" help="NULL will automatically use raster if more than 100,000 points plotted">
--- a/plot.xml	Tue Nov 05 11:55:07 2024 +0000
+++ b/plot.xml	Thu Mar 26 11:15:58 2026 +0000
@@ -6,6 +6,7 @@
     <expand macro="bio_tools"/>
     <expand macro="requirements"/>
     <expand macro="version_command"/>
+    <expand macro="creators"/>
     <command detect_errors="exit_code"><![CDATA[
 @CMD@
     ]]></command>
@@ -246,6 +247,115 @@
     combine = TRUE
 )
 
+#else if $method.method == 'ImageDimPlot'
+
+#if $method.adv.cells
+    cells_list<-paste(readLines('$method.adv.cells'), collapse=",")
+    #end if
+
+plot<-ImageDimPlot(
+    seurat_obj,
+    #if $method.plot.fov != ''
+    fov = c(unlist(strsplit(gsub(" ", "", '$method.plot.fov'), ","))),
+    #end if
+    #if $method.plot.boundaries != ''
+    boundaries = c(unlist(strsplit(gsub(" ", "", '$method.plot.boundaries'), ","))),
+    #end if
+    #if $method.adv.group_by != ''
+    group.by = '$method.adv.group_by',
+    #end if
+    #if $method.adv.split_by != ''
+    split.by = '$method.adv.split_by',
+    #end if
+    #if $method.plot.cols != ''
+    cols = c(unlist(strsplit(gsub(" ", "", '$method.plot.cols'), ","))),
+    shuffle.cols = $method.plot.shuffle_cols,
+    #end if
+    size = $method.plot.size,
+    #if $method.plot.molecules != ''
+    molecules = c(unlist(strsplit(gsub(" ", "", '$method.plot.molecules'), ","))),
+    mols.size = $method.plot.mols_size,
+    mols.cols = c(unlist(strsplit(gsub(" ", "", '$method.plot.mols_cols'), ","))),
+    mols.alpha = $method.plot.mols_alpha,
+    nmols = $method.plot.nmols,
+    #end if
+    alpha = $method.plot.alpha,
+    #if $method.adv.border_color != ''
+    border.color = '$method.adv.border_color',
+    #end if
+    #if $method.adv.border_size != ''
+    border.size = $method.adv.border_size,
+    #end if
+    na.value = '$method.plot.na_value',
+    dark.background = $method.adv.dark_background,
+    crop = $method.adv.crop,
+    #if $method.adv.cells
+    cells = c(unlist(strsplit(cells_list, ","))),
+    #end if
+    overlap = $method.adv.overlap,
+    axes = $method.adv.axes,
+    combine = TRUE,
+    coord.fixed = $method.adv.coord_fixed,
+    flip_xy = $method.adv.flip_xy
+)
+
+#else if $method.method == 'ImageFeaturePlot'
+
+#if $method.adv.cells
+    cells_list<-paste(readLines('$method.adv.cells'), collapse=",")
+    #end if
+
+plot<-ImageFeaturePlot(
+    seurat_obj,
+    features = '$method.features',
+    #if $method.plot.fov != ''
+    fov = c(unlist(strsplit(gsub(" ", "", '$method.plot.fov'), ","))),
+    #end if
+    #if $method.plot.boundaries != ''
+    boundaries = c(unlist(strsplit(gsub(" ", "", '$method.plot.boundaries'), ","))),
+    #end if
+    size = $method.plot.size,
+    #if $method.adv.min_cutoff != ''
+    min.cutoff = '$method.adv.min_cutoff',
+    #end if
+    #if $method.adv.max_cutoff != ''
+    max.cutoff = '$method.adv.max_cutoff',
+    #end if
+    #if $method.adv.split_by != ''
+    split.by = '$method.adv.split_by',
+    #end if
+    #if $method.plot.molecules != ''
+    molecules = c(unlist(strsplit(gsub(" ", "", '$method.plot.molecules'), ","))),
+    mols.size = $method.plot.mols_size,
+    mols.cols = c(unlist(strsplit(gsub(" ", "", '$method.plot.mols_cols'), ","))),
+    nmols = $method.plot.nmols,
+    #end if
+    alpha = $method.plot.alpha,
+    #if $method.adv.border_color != ''
+    border.color = '$method.adv.border_color',
+    #end if
+    #if $method.adv.border_size != ''
+    border.size = $method.adv.border_size,
+    #end if
+    dark.background = $method.adv.dark_background,
+    blend = $method.plot.blend,
+    #if $method.plot.blend == 'TRUE'
+    cols = c("#ff0000", "#00ff00"),
+    blend.threshold = $method.plot.blend_threshold,
+    #else
+    cols = c("lightgrey", "firebrick1"),
+    scale = '$method.plot.scale',
+    #end if
+    crop = $method.adv.crop,
+    #if $method.adv.cells
+    cells = c(unlist(strsplit(cells_list, ","))),
+    #end if
+    overlap = $method.adv.overlap,
+    axes = $method.adv.axes,
+    combine = TRUE,
+    coord.fixed = $method.adv.coord_fixed
+)
+
 #else if $method.method == 'DimHeatmap'
 plot<-DimHeatmap(
     seurat_obj,
@@ -310,8 +420,12 @@
     #end if
     alpha = $method.plot.alpha,
     order = $method.plot.order,
+    #if $method.adv.min_cutoff != ''
     min.cutoff = 'q$method.adv.min_cutoff',
+    #end if
+    #if $method.adv.max_cutoff != ''
     max.cutoff = 'q$method.adv.max_cutoff',
+    #end if
     #if $method.adv.split_by != ''
     split.by = '$method.adv.split_by',
     by.col = $method.plot.blend.by_col,
@@ -501,6 +615,8 @@
                 <option value="VariableFeaturePlot">Plot Variable Genes with 'VariableFeaturePlot'</option>
                 <option value="VizDimLoadings">Visualize Reduction Results with 'VizDimLoadings'</option>
                 <option value="DimPlot">Visualize Dimensional Reduction with 'DimPlot'</option>
+                <option value="ImageDimPlot">Visualize spatial clusters or other categorical groupings with 'ImageDimPlot'</option>
+                <option value="ImageFeaturePlot">Visualize expression in a spatial context with 'ImageFeaturePlot'</option>
                 <option value="DimHeatmap">Visualize Reduction Results with 'DimHeatmap'</option>
                 <option value="ElbowPlot">Determine dimensionality with 'ElbowPlot'</option>
                 <option value="FeaturePlot">Visualize expression with 'FeaturePlot'</option>
@@ -687,19 +803,75 @@
                         <when value="false">
                         </when>
                     </conditional>
-                    <param name="na_value" type="select" label="Colour for NA points when using custom scale" help="(na.value)">
-                        <option value="lightgrey" selected="true">lightgrey</option>
-                        <option value="grey">grey</option>
-                        <option value="black">black</option>
-                    </param>
+                    <expand macro="plot_na_value"/>
                 </section>
                 <section name="adv" title="Advanced Options">
-                    <param argument="cells" type="data" format="txt,tabular" optional="true" label="List of cells to include on plot" help="text file with one cell on each line"/>
+                    <expand macro="plot_cells"/>
                     <expand macro="plot_group_by"/>
                     <expand macro="plot_split_by"/>
                     <param name="shape_by" type="text" optional="true" value="" label="Shape points by a group or identity" help="only when not saving as raster (shape.by)"/>
                 </section>
             </when>
+            <when value="ImageDimPlot">
+                <section name="plot" title="Plot Formatting Options">
+                    <expand macro="plot_fov"/>
+                    <expand macro="plot_boundaries"/>
+                    <expand macro="plot_cols"/>
+                    <expand macro="plot_shuffle_cols"/>
+                    <param name="size" type="float" value="1.0" label="Point size for cells" help="(size)"/>
+                    <expand macro="plot_alpha"/>
+                    <expand macro="plot_molecules"/>
+                    <expand macro="plot_mol_alpha"/>
+                    <expand macro="plot_nmols"/>
+                    <expand macro="plot_na_value"/>
+                </section>
+                <section name="adv" title="Advanced Options">
+                    <expand macro="plot_group_by"/>
+                    <expand macro="plot_split_by"/>
+                    <expand macro="plot_border"/>
+                    <expand macro="plot_dark_background"/>
+                    <expand macro="plot_crop"/>
+                    <expand macro="plot_cells"/>
+                    <expand macro="plot_overlap"/>
+                    <expand macro="plot_axes"/>
+                    <expand macro="plot_combine"/>
+                    <expand macro="plot_coord_fixed"/>
+                    <expand macro="plot_flip_xy"/>
+                </section>
+            </when>
+            <when value="ImageFeaturePlot">
+                <param argument="features" type="text" value="nFeature_RNA" label="Features to plot" help="comma-separated list e.g. MS4A1, percent.mito, PC_1"/>
+                <section name="plot" title="Plot Formatting Options">
+                    <expand macro="plot_fov"/>
+                    <expand macro="plot_boundaries"/>
+                    <param name="size" type="float" value="1.0" label="Point size for cells" help="(size)"/>
+                    <expand macro="plot_alpha"/>
+                    <expand macro="plot_molecules"/>
+                    <expand macro="plot_nmols"/>
+                    <param argument="blend" type="boolean" truevalue="TRUE" falsevalue="FALSE" checked="false" label="Scale and blend expression values to visualize coexpression"/>
+                    <param name="blend_threshold" type="float" value="0.5" min="0" max="1" label="Colour cutoff from weak signal to strong signal" help="(blend.threshold)"/>
+                    <param name="scale" type="select" label="How to handle colour scale across multiple plots" help="(scale)">
+                        <option value="feature" selected="true">Scale each feature separately</option>
+                        <option value="all">Scale all to same maximum</option>
+                        <option value="none">Plots are not scaled</option>
+                    </param>
+                    <expand macro="raster_select"/>
+                </section>
+                <section name="adv" title="Advanced Options">
+                    <expand macro="plot_group_by"/>
+                    <expand macro="plot_split_by"/>
+                    <expand macro="plot_border"/>
+                    <expand macro="plot_dark_background"/>
+                    <expand macro="plot_crop"/>
+                    <expand macro="plot_cells"/>
+                    <expand macro="plot_coord_fixed"/>
+                    <expand macro="plot_overlap"/>
+                    <expand macro="plot_axes"/>
+                    <expand macro="plot_combine"/>
+                    <param name="min_cutoff" type="text" optional="true" value="" label="Minimum cutoff for features - as quantile" help="Minimum values for each feature eg, 'q1'or 'q10')"/>
+                    <param name="max_cutoff" type="text" optional="true" value="" label="Maximum cutoff for features - as quantile" help="Maximum values for each feature (eg, 'q1'or 'q10')"/>
+                </section>
+            </when>
             <when value="DimHeatmap">
                 <param argument="dims" type="text" value="1:10" label="Dimensions from reduction to plot" help="enter one or a range of dimensions e.g. 3 to plot dim 3, 1:10 to plot dims 1 to 10">
                     <validator type="regex" message="Please only use numbers or colon">^[\d:]+$</validator>
@@ -927,11 +1099,11 @@
                     <has_text_matching expression="VlnPlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_png" location="https://zenodo.org/records/13732784/files/VlnPlot.png" ftype="png" compare="image_diff"/>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/VlnPlot.png" ftype="png" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test2: FeatureScatter PDF -->
-            <param name="seurat_rds" location="https://zenodo.org/records/13732784/files/filtered.rds"/>
+            <param name="seurat_rds" location="https://zenodo.org/records/17817806/files/filtered.rds"/>
             <param name="plot_format" value="png"/>
             <conditional name="method">
                 <param name="method" value="FeatureScatter"/>
@@ -946,11 +1118,11 @@
                     <has_text_matching expression="FeatureScatter"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_png" location="https://zenodo.org/records/13732784/files/FeatureScatter.png" ftype="png" compare="image_diff"/>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/FeatureScatter.png" ftype="png" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test3: CellScatter PDF -->
-            <param name="seurat_rds" location="https://zenodo.org/records/13732784/files/variablefeatures.rds"/>
+            <param name="seurat_rds" location="https://zenodo.org/records/17817806/files/variablefeatures.rds"/>
             <param name="plot_format" value="pdf"/>
             <conditional name="method">
                 <param name="method" value="CellScatter"/>
@@ -967,7 +1139,7 @@
                     <has_text_matching expression="CellScatter"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_pdf" location="https://zenodo.org/records/13732784/files/CellScatter.pdf" ftype="pdf" compare="diff" lines_diff="50"/>
+            <output name="plot_out_pdf" location="https://zenodo.org/records/17817806/files/CellScatter.pdf" ftype="pdf" compare="diff" lines_diff="50"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test4: VariableFeaturePlot SVG -->
@@ -988,7 +1160,7 @@
                     <has_text_matching expression="VariableFeaturePlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_svg" location="https://zenodo.org/records/13732784/files/VariableFeaturePlot.svg" ftype="svg" compare="diff" lines_diff="50"/>
+            <output name="plot_out_svg" location="https://zenodo.org/records/17817806/files/VariableFeaturePlot.svg" ftype="svg" compare="diff" lines_diff="50"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test5: VizDimLoadings JPEG -->
@@ -1013,7 +1185,7 @@
                     <has_text_matching expression="VizDimLoadings"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_jpeg" location="https://zenodo.org/records/13732784/files/VizDimLoadings.jpeg" ftype="jpeg" compare="image_diff"/>
+            <output name="plot_out_jpeg" location="https://zenodo.org/records/17817806/files/VizDimLoadings.jpeg" ftype="jpeg" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test6: DimPlot TEX -->
@@ -1032,7 +1204,7 @@
                     <has_text_matching expression="DimPlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_tex" location="https://zenodo.org/records/13732784/files/DimPlot.tex" ftype="tex">
+            <output name="plot_out_tex" location="https://zenodo.org/records/17817806/files/DimPlot.tex" ftype="tex">
                 <assert_contents>
                     <has_text_matching expression="beginpicture"/>
                 </assert_contents>
@@ -1065,7 +1237,7 @@
                     <has_text_matching expression="DimHeatmap"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_tiff" location="https://zenodo.org/records/13732784/files/DimHeatmap.tiff" ftype="tiff" compare="image_diff"/>
+            <output name="plot_out_tiff" location="https://zenodo.org/records/17817806/files/DimHeatmap.tiff" ftype="tiff" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test8: ElbowPlot EPS -->
@@ -1084,7 +1256,7 @@
                     <has_text_matching expression="ElbowPlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_eps" location="https://zenodo.org/records/13732784/files/ElbowPlot.eps" ftype="eps"/>
+            <output name="plot_out_eps" location="https://zenodo.org/records/17817806/files/ElbowPlot.eps" ftype="eps"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test9: FeaturePlot PNG -->
@@ -1108,7 +1280,7 @@
                     <has_text_matching expression="FeaturePlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_png" location="https://zenodo.org/records/13732784/files/FeaturePlot.png" ftype="png" compare="image_diff"/>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/FeaturePlot.png" ftype="png" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test10: DoHeatmap PNG -->
@@ -1136,7 +1308,7 @@
                     <has_text_matching expression="DoHeatmap"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_png" location="https://zenodo.org/records/13732784/files/DoHeatmap.png" ftype="png" compare="image_diff"/>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/DoHeatmap.png" ftype="png" compare="image_diff"/>
         </test>
         <test expect_num_outputs="2">
             <!-- test11: DotPlot PNG -->
@@ -1154,7 +1326,44 @@
                     <has_text_matching expression="DotPlot"/>
                 </assert_contents>
             </output>
-            <output name="plot_out_png" location="https://zenodo.org/records/13732784/files/DotPlot.png" ftype="png" compare="image_diff"/>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/DotPlot.png" ftype="png" compare="image_diff"/>
+        </test>
+        <test expect_num_outputs="2">
+            <!-- test12: ImageDimPlot PNG -->
+            <param name="seurat_rds" location="https://zenodo.org/records/17807529/files/test_seurat_spatial.rds"/>
+            <param name="plot_format" value="png"/>
+            <conditional name="method">
+                <param name="fov" value="anterior1"/>
+                <param name="method" value="ImageDimPlot"/>
+            </conditional>
+            <section name="advanced_common">
+                <param name="show_log" value="true"/>
+            </section>
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="ImageDimPlot"/>
+                </assert_contents>
+            </output>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/ImageDimPlot.png" ftype="png" compare="image_diff"/>
+        </test>
+        <test expect_num_outputs="2">
+            <!-- test13: ImageFeaturePlot PNG -->
+            <param name="seurat_rds" location="https://zenodo.org/records/17807529/files/test_seurat_spatial.rds"/>
+            <param name="plot_format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="ImageFeaturePlot"/>
+                <param name="fov" value="anterior1"/>
+                <param name="features" value="Xkr4"/>
+            </conditional>
+            <section name="advanced_common">
+                <param name="show_log" value="true"/>
+            </section>
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="ImageFeaturePlot"/>
+                </assert_contents>
+            </output>
+            <output name="plot_out_png" location="https://zenodo.org/records/17817806/files/ImageFeaturePlot.png" ftype="png" compare="image_diff"/>
         </test>
     </tests>
     <help><![CDATA[
Binary file test-data/imagedimplot.png has changed
Binary file test-data/imagefeatureplot.png has changed
Binary file test-data/test_seurat_spatial.rds has changed