Bug Report: Voila v3.0.17 - ValueError: Invalid Zarr format 3 data_type ¿?

41 views
Skip to first unread message

Maximo Rivarola

unread,
Feb 20, 2026, 3:15:24 PMFeb 20
to Biociphers

First of all, I wanted to say thank you for the amazing work on MAJIQ 3 and Voila 3.

 It is a fantastic tool!

 I am still quite new to the full range of advanced options and configurations available in this new version, but I’m learining....

I’m writing to you because I’ve hit a technical hurdle while trying to visualize results synced from our HPC cluster to my local workstation. It seems to be a specific metadata parsing issue related to the transition to Zarr V3.  (command below, all in V3 done)

The Setup:

  • Data Generation (HPC): MAJIQ v3.0.13.dev1+g2db64969d (Python 3.11).

  • Local Visualization: Voila v3.0.17.dev1+g11dc0f550 (Python 3.12).

  • Storage: Zarr V3 format.

The Issue: When running voila view, the process fails while reading the contigs group from the splicegraph.zarr. The error appears to be a mismatch between the Zarr V3 metadata specification and NumPy's dtype parsing for UTF-32 strings.

Error Message: ValueError: Invalid Zarr format 3 data_type: {'name': 'fixed_length_utf32', 'configuration': {'length_bytes': 44}}

System Details:

  • OS: Ubuntu 22.04 LTS

  • Zarr: 3.0.2 (also tested with 3.1.5)

  • NumPy: 1.26.4

  • Xarray: 2025.1.0

As I am still getting familiar with the full breadth of MAJIQ's new features, I wanted to ask if there is a recommended dependency stack or a specific configuration I might be missing to handle these Zarr V3 string encodings correctly.

I am happy to provide sample metadata files or more detailed logs if it helps the community!

Thanks again for the support and for such a great tool.

Best regards, maximo


details:   

$ voila view -p 5000 -j 8 \
  01_majiq_build_output/splicegraph.zarr \
  07_majiq_deltapsi_outputFULL_v4/T2_C_vs_T2_P.voila \
  08_majiq_sgc_output/
2026-02-20 17:05:45,339 (PID:73162) - INFO - Command: /home/epilab/Majiq3/majiq_native_env/bin/voila view -p 5000 -j 8 01_majiq_build_output/splicegraph.zarr 07_majiq_deltapsi_outputFULL_v4/T2_C_vs_T2_P.voila 08_majiq_sgc_output/
2026-02-20 17:05:45,339 (PID:73162) - INFO - Voila v3.0.17.dev1+g11dc0f550
2026-02-20 17:05:45,341 (PID:73162) - INFO - ╔═══════════════════════════════════════════════════════════════╗
2026-02-20 17:05:45,341 (PID:73162) - INFO - ╠╡ ACADEMIC License applied                                     ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ║  Name: Official Majiq Academic-only License                   ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ║  File: majiq_license_academic_official.lic                    ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ║  Expiration Date: Never                                       ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ║                                                               ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ╠╡ The academic license is for non-commercial purposes by       ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ╠╡ individuals at an academic or not for profit institution.    ║
2026-02-20 17:05:45,341 (PID:73162) - INFO - ╚═══════════════════════════════════════════════════════════════╝
2026-02-20 17:05:45,341 (PID:73162) - INFO - config file: /tmp/voila-config-d79c7e2a579e9ba02a083f219ce8f917
/home/epilab/Majiq3/majiq_native_env/lib/python3.12/site-packages/rna_majiq/core/Contigs.py:123: RuntimeWarning: Failed to open Zarr store with consolidated metadata, but successfully read with non-consolidated metadata. This is typically much slower for opening a dataset. To silence this warning, consider:
1. Consolidating metadata in this existing store with zarr.consolidate_metadata().
2. Explicitly setting consolidated=False, to avoid trying to read consolidate metadata, or
3. Explicitly setting consolidated=True, to raise an error in this case instead of falling back to try reading non-consolidated metadata.
  with xr.open_zarr(store, group=group) as df:


2026-02-20 17:05:45,447 (PID:73162) - ERROR - Invalid Zarr format 3 data_type: {'name': 'fixed_length_utf32', 'configuration': {'length_bytes': 44}}


Traceback (most recent call last):
  File "/home/epilab/Majiq3/majiq_native_env/lib/python3.12/site-packages/zarr/core/metadata/v3.py", line 717, in parse





San Jewell

unread,
Feb 20, 2026, 4:48:55 PMFeb 20
to Biociphers
Hello!

Given your installation, I might try installing various versions of zarr to check which one resolves the check, (for example you can run $ pip index versions zarr to list all available versions) however, then there would then possibly be other dependency issues. I could help you work through this step by step but it would likely be slow going. 

The better solution is that the analysis and the viewing are run with the same versions of majiq/voila, which would involve upgrading your server version or downgrading your local version. 

Let me know which you would be able to pursue and I can help you through the steps I would take. 

Thanks!
-San  

Maximo Rivarola

unread,
Feb 23, 2026, 11:44:43 AMFeb 23
to Biociphers
Hi San, thanks for reply!,
ok, am struggling with zarr format, will re run on local workstation . starting from bam files. will let you know. thanks!!! ;)
I have:

(majiq_native_env) () epilab@epilab-workstation:Tomate$ 

voila --version
voila 3.0.17.dev1+g11dc0f550
majiq --version
majiq 3.0.17.dev1+g11dc0f55
all installed with pip in python env.

thanks, will let you know.
cheers
maximo

Maximo Rivarola

unread,
Feb 23, 2026, 3:48:32 PMFeb 23
to Biociphers
hi San, how are you? thanks for all,

I ran all steps, but seems to be a bug with either view or modulize, do not work on same version?

info:   currently working with Voila v3.0.17.dev1+g11dc0f550 on an Ubuntu 22.04 workstation and believe we’ve uncovered a small bug in the modulize and tsv configuration logic. Even when providing a valid splicegraph.zarr and .voila directories, the execution consistently fails with a TypeError: ClassifyConfig.__new__() got an unexpected keyword argument 'disable_reads' (or TsvConfig respectively). 

It seems like the code is trying to trigger a fallback mode when it doesn't find raw experiment coverage (like .sgc or .psicov.zarr), but it's passing an argument that the configuration classes aren't yet set up to handle. We've tried a few workarounds, like pointing to the source .sj files, but the error persists.
seems to be like this? maybe of course i am missing swomething...
can add scripts as well? maybe you have seen this before?
Voila view i have working with one contrast at a time,its fine :) on 127.0.0.1 port 5050


any ideas?
cheers maximo

San Jewell

unread,
Feb 24, 2026, 11:41:59 AMFeb 24
to Biociphers
Hi Maximo, 

I do appreciate the bug report. While I've not seen this specific case before, as a continually evolving software I expect there may be some usage configurations that were not properly accounted for. 

Can you let me know the command that was run to trigger the issue? It's modulize and tsv modes? I have tried running them on the latest version of majiq_academic (the version noted in your message) and I was unable to reproduce the error. Feel free to redact the names of the actual files, I'd just like to see the types of files input and command line flags to see if I can reproduce the issue. 

Thanks!
-San

Maximo Rivarola

unread,
Feb 27, 2026, 12:45:13 PMFeb 27
to Biociphers
hi san, ok i will try to be clear in my confusion jaja
Hope its not too messy, any help is greatllyyyy appreciated!!!
any commments :)

Here goes :
Main steps here:
Basically i have no "sgc" files, is this ok in new majiq?
and have only directories for "voila", correct?
Am confused now if to run moduliza on all or one sample at atime, and where we launch "view" is that used?

Also basically its correct to run " voila view splicegraph.zarr/ deltapsi.voila/   ???¿¿
And confused if need to run moduliza before i can view? and where in view command that is inserted???
below i have steps performed with listings of directoriess etc for clarification...

see below Main steps::
## --- Project: Tomato Priming Splicing Analysis ---
## --- Environment: majiq_native_env (Python 3.12) ---
##  Initial Setup
## Load the environment and license required for all steps
source /home/epilab/Majiq3/majiq_native_env/bin/activate
export MAJIQ_LICENSE_FILE=/home/epilab/Majiq3/majiq_license_academic_official.lic

# Summary
# Directory Command Origin Content
# 01_majiq_build_output majiq build Splicegraph and SJ files.
# 02_all_samples.psicov.zarr majiq psicoverage Global coverage metadata.
# 03_majiq_psi_output majiq psi Baseline inclusion levels.
# 06_majiq_deltapsi_output majiq deltapsi Contrasts and .voila folders.
# 07_voila_tsv_reports voila tsv (partial) Extracted text tables.
# 09_majiq_modulize_output voila modulize (buggy) Categorized splicing events.


## experiments.tsv   21 samples.
# path
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T3_Control_3.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T4_Primed_1.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T1_Control_2.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T2_Primed_1.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T3_Primed_1.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T4_Control_2.bam
# /home/epilab/Data1TB/Tomate/majiq3_sync/bams/T2_Control_1.bam
# etc....


## 1. Build Splicegraph
## Generates the reference splicing architecture from BAMs and GFF3
## Creates: 01_majiq_build_output/
majiq build \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/experiments.tsv \
    -c /home/epilab/Data1TB/Tomate/Genome/S_lycopersicum_Jun_2022.gff3 \
    --output /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output \
    -j 7
# ls -p dir: 01_majiq_build_output/
# majiq_build_QC.log  T1_Control_3.sj/  T2_Primed_1.sj/   T3_Control_2.sj/  T3_Primed_3.sj/   T4_Primed_1.sj/
# splicegraph.zarr/   T2_Control_1.sj/  T2_Primed_2.sj/   T3_Control_3.sj/  T4_Control_1.sj/  T4_Primed_2.sj/
# T1_Control_1.sj/    T2_Control_2.sj/  T2_Primed_3.sj/   T3_Primed_1.sj/   T4_Control_2.sj/  T4_Primed_3.sj/
# T1_Control_2.sj/    T2_Control_3.sj/  T3_Control_1.sj/  T3_Primed_2.sj/   T4_Control_3.sj/  voila_index.hdf5
##   195 MB total used.


## 2. Calculate PSI Coverage (Quantification backbone)
## Essential for the statistical confidence of the analysis
## Creates: 02_all_samples.psicov.zarr/
majiq psicoverage \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/splicegraph.zarr \
    -o /home/epilab/Data1TB/Tomate/majiq3_local_run/02_all_samples.psicov.zarr \
    -j 7

# ls -p 02_all_samples.psicov.zarr/
# events/  psi_coverage/
# ## 66 MB used

## 3. Quantify Baseline PSI
## Calculates Percent Spliced In (PSI) for individual groups
## Creates: 03_majiq_psi_output/
majiq psi \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/splicegraph.zarr \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/02_all_samples.psicov.zarr \
    -o /home/epilab/Data1TB/Tomate/majiq3_local_run/03_majiq_psi_output \
    -j 7

#  ls -lthp 03_majiq_psi_output/
#  1.7K Feb 23 16:19 majiq_psi_summary_stats.tsv
#  12M Feb 23 16:18 all_samples.psi.tsv



###############################################################
## 4. Compute DeltaPSI (Statistical Contrasts)
## Compares conditions (Control vs Primed) across 9 timepoints
## Creates: 06_majiq_deltapsi_output/
majiq deltapsi \
    -grp1 T1_C T1_C T2_C T3_C T4_C T1_C T1_C T2_C T3_C T4_C \
    -grp2 T1_P T2_C T2_P T3_P T4_P T2_P T3_P T2_P T3_P T4_P \
    --splicegraph /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/splicegraph.zarr \
    --psicov /home/epilab/Data1TB/Tomate/majiq3_local_run/02_all_samples.psicov.zarr \
    -o /home/epilab/Data1TB/Tomate/majiq3_local_run/06_majiq_deltapsi_output \
    -j 7

# ls -p 06_majiq_deltapsi_output/   # 60MB total
# T1_C_vs_T2_C.deltapsi.tsv  T1_C_vs_T3_C.voila/        T1_C_vs_T4_P.deltapsi.tsv  T3_C_vs_T3_P.voila/
# T1_C_vs_T2_C.voila/        T1_C_vs_T3_P.deltapsi.tsv  T1_C_vs_T4_P.voila/        T4_C_vs_T4_P.deltapsi.tsv
# T1_C_vs_T2_P.deltapsi.tsv  T1_C_vs_T3_P.voila/        T2_C_vs_T2_P.deltapsi.tsv  T4_C_vs_T4_P.voila/
# T1_C_vs_T2_P.voila/        T1_C_vs_T4_C.deltapsi.tsv  T2_C_vs_T2_P.voila/
# T1_C_vs_T3_C.deltapsi.tsv  T1_C_vs_T4_C.voila/        T3_C_vs_T3_P.deltapsi.tsv


# General Syntax for Voila Modulize (v3.x)
voila modulize 01_majiq_build_output/splicegraph.zarr 06_majiq_deltapsi_output \
    -d 09_majiq_modulize_output    --changing-between-group-dpsi [THRESHOLD] \
    --probability-changing-threshold [CONFIDENCE] \
    -j [THREADS]   --overwrite
# ls -p 09_majiq_modulize_output
# T1_C_vs_T2_C/  T1_C_vs_T3_C/  T1_C_vs_T4_C/  T2_C_vs_T2_P/
# T1_C_vs_T2_P/  T1_C_vs_T3_P/  T1_C_vs_T4_P/
# # du -hc 09_majiq_modulize_output/
# # 16K     09_majiq_modulize_output/T1_C_vs_T3_C
# # ...
# # 104K    total


##########################################
####################################################################
## use "view" ,   one which works:
## 6. Interactive Visual Exploration
## Launches the local web server for a single contrast
## Binding to 127.0.0.1:5050 fixed previous Firefox connection issues
CONTRAST="T2_C_vs_T2_P"
rm -f /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/voila_index.hdf5
voila view \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/splicegraph.zarr \
    /home/epilab/Data1TB/Tomate/majiq3_local_run/06_majiq_deltapsi_output/${CONTRAST}.voila \
    --host 127.0.0.1 --port 5050 -j 7
# works in:
# http://127.0.0.1:5050


#################################################
### Commands with error:
### moduliza:
voila modulize \
01_majiq_build_output/splicegraph.zarr \
06_majiq_deltapsi_output/T1_C_vs_T2_C.voila/\
-d 09_majiq_modulize_All \
--overwrite \
--debug
# voila modulize: error: argument files: cannot find "/home/epilab/Data1TB/Tomate/majiq3_local_run/06_majiq_deltapsi_output/T1_C_vs_T2_C.voila/-d"
# # voila is always folder, not file, correct?

### Can use "view" all samples:¿¿¿??? 
voila view \
01_majiq_build_output/splicegraph.zarr \
06_majiq_deltapsi_output \
--host 0.0.0.0 \
--port 8080
# 2026-02-27 13:48:25,208 (PID:8587) - INFO - config file: /tmp/voila-config-d9f1dd374b4925f5c227733a5e0f5324
# 2026-02-27 13:48:25,247 (PID:8587) - WARNING - Could not find any .sgc experiment data inputs, reads display disabled
# 2026-02-27 13:48:25,926 (PID:8587) - INFO - Using Cache: /home/epilab/Data1TB/Tomate/majiq3_local_run/01_majiq_build_output/voila_index.hdf5
## I have no sgc files, is this ok?

####################
voila view --only-index -j 8 \
  /home/epilab/Data1TB/Tomate/majiq3/splicegraph.zarr \
  /home/epilab/Data1TB/Tomate/majiq3/07_majiq_deltapsi_outputFULL_v4/*.voila
# voila view: error: argument files: cannot find "/home/epilab/Data1TB/Tomate/majiq3/splicegraph.zarr"

#################################################################################
# ls on dir

(majiq_native_env) () epilab@epilab-workstation:majiq3_local_run$ ls
01_majiq_build_output              07run_local_voila_tsv.sh                                        experiments.tsv
01run_local_build.sh                  07_voila_tsv_reports                                               majiq_deltapsi_QC.log
02_all_samples.psicov.zarr      08run_local1contrast_voila_view.sh                     majiq_psicov_QC.log
02run_local_psicoverage.sh     08run_local_voila_view.sh                                      majiq_psi_QC.log
03_majiq_psi_output                 09_majiq_modulize_output                                    majiq_sgcoverage_QC.log
03run_local_psi.sh                     09run_local_modulize_hack.sh                             StepsInfo.sh
04run_local_QCstats.py            09run_local_modulize.sh                                        StepsInfo_v2.sh
06_majiq_deltapsi_output         09run_local_modulize_singleContrast.sh            voila_tsv_QC.log
06run_local_deltapsi.sh             draft.05run_local_sgcoverage.sh





thanks a million!!!!
cheers, maximo
Reply all
Reply to author
Forward
0 new messages