Melodic report ignores TR units
https://github.com/poldracklab/niworkflows/blob/7594df0f4a7bb054e51e2d1f31586017c3cade81/niworkflows/viz/utils.py#L505

Those can be seconds or msec. There is a field for it in the nifti header.
diff --git a/niworkflows/viz/utils.py b/niworkflows/viz/utils.py
index e73bd8d0..be6c9b82 100644
--- a/niworkflows/viz/utils.py
+++ b/niworkflows/viz/utils.py
@@ -503,6 +503,18 @@ def plot_melodic_components(melodic_dir, in_file, tr=None,
     in_nii = nb.load(in_file)
     if not tr:
         tr = in_nii.header.get_zooms()[3]
+        units = in_nii.header.get_xyzt_units()
+        if units:
+            if units[-1] == 'msec':
+                tr = tr / 1000.0
+            elif units[-1] == 'usec':
+                tr = tr / 1000000.0
+            elif units[-1] != 'sec':
+                NIWORKFLOWS_LOG.warn('Unknown repetition time units '
+                                     'specified - assuming seconds')
+        else:
+            NIWORKFLOWS_LOG.warn(
+                'Repetition time units not specified - assuming seconds')
 
     from nilearn.input_data import NiftiMasker
     from nilearn.plotting import plot_roi
['niworkflows/viz/utils.py']