diff --git a/deploy/csp/index.js b/deploy/csp/index.js
index e48f7f155e90e027e0274590f854d7281ca83bad..92ee364fd5cd7691811cf45956712bf98fd184c6 100644
--- a/deploy/csp/index.js
+++ b/deploy/csp/index.js
@@ -115,7 +115,7 @@ module.exports = {
           'https://unpkg.com/d3@6.2.0/', // required for preview component
           'https://unpkg.com/mathjax@3.1.2/', // math jax
           'https://unpkg.com/three-surfer@0.0.13/dist/bundle.js', // for threeSurfer (freesurfer support in browser)
-          'https://unpkg.com/ng-layer-tune@0.0.13/dist/ng-layer-tune/', // needed for ng layer control
+          'https://unpkg.com/ng-layer-tune@0.0.14/dist/ng-layer-tune/', // needed for ng layer control
           'https://unpkg.com/hbp-connectivity-component@0.6.6/', // needed for connectivity component
           (req, res) => res.locals.nonce ? `'nonce-${res.locals.nonce}'` : null,
           ...SCRIPT_SRC,
diff --git a/docs/releases/v2.12.0.md b/docs/releases/v2.12.0.md
index 0d29b901d4b58428051f2027de1140661c99564e..ba23e2fa1c0a5e1dc3cdb00fdfef918654e02bf0 100644
--- a/docs/releases/v2.12.0.md
+++ b/docs/releases/v2.12.0.md
@@ -2,6 +2,7 @@
 
 ## Feature
 
+- added opacity slider for external volumes, even if the more detail is collapsed.
 - enable rat connectivity
 - added visual indicators for selected subject and dataset in connectivity browser
 
diff --git a/src/extra_styles.css b/src/extra_styles.css
index 82f71ff959dc619fe28f06c56fab628041b69b03..38120840830934317ea6c65d369467f99202f362 100644
--- a/src/extra_styles.css
+++ b/src/extra_styles.css
@@ -821,10 +821,10 @@ mat-list.sm mat-list-item
   display: grid;
 }
 
-.grid.grid-col-3
+.grid.grid-col-4
 {
   grid-auto-columns: 1fr;
-  grid-template-columns: 1fr auto auto;
+  grid-template-columns: 1fr auto auto auto;
   gap: 0.2rem 0.2rem;
 }
 
diff --git a/src/index.html b/src/index.html
index 1ed2d8187899e51442bc39c8ab9305ac15c7ea0f..625cc65955195124a32d39c78486382edb8a9737 100644
--- a/src/index.html
+++ b/src/index.html
@@ -14,7 +14,7 @@
   <script src="extra_js.js"></script>
   <script src="https://unpkg.com/kg-dataset-previewer@1.2.0/dist/kg-dataset-previewer/kg-dataset-previewer.js" defer></script>
   <script src="https://unpkg.com/three-surfer@0.0.13/dist/bundle.js" defer></script>
-  <script type="module" src="https://unpkg.com/ng-layer-tune@0.0.13/dist/ng-layer-tune/ng-layer-tune.esm.js"></script>
+  <script type="module" src="https://unpkg.com/ng-layer-tune@0.0.14/dist/ng-layer-tune/ng-layer-tune.esm.js"></script>
   <script type="module" src="https://unpkg.com/hbp-connectivity-component@0.6.6/dist/connectivity-component/connectivity-component.js" ></script>
   <script defer src="https://unpkg.com/mathjax@3.1.2/es5/tex-svg.js"></script>
   <script defer src="https://unpkg.com/d3@6.2.0/dist/d3.min.js"></script>
diff --git a/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts b/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts
index 1bdcedc1685bc6605bb95f56f9e881daebadf6f0..017187edb71c29fc59bc0dd589790a6dc3bb4e02 100644
--- a/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts
+++ b/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts
@@ -498,8 +498,16 @@ export class NehubaViewerUnit implements OnDestroy {
             }
           )
         }
+        const { transform=null, ...rest } = layerObj[key]
+
+        const combined = {
+          type: 'image',
+          ...rest,
+          ...(transform ? { transform } : {})
+        }
+        console.log(combined)
         viewer.layerManager.addManagedLayer(
-          viewer.layerSpecification.getLayer(key, layerObj[key]))
+          viewer.layerSpecification.getLayer(key, combined))
 
         return layerObj[key]
       })
diff --git a/src/viewerModule/nehuba/userLayers/module.ts b/src/viewerModule/nehuba/userLayers/module.ts
index 6de5343d80b664d3c7949eccc231829b644f59f5..ae8068454f9ba777fd59132ae5be62afe2f8f255 100644
--- a/src/viewerModule/nehuba/userLayers/module.ts
+++ b/src/viewerModule/nehuba/userLayers/module.ts
@@ -8,6 +8,8 @@ import { UserLayerService } from "./service"
 import { MatButtonModule } from "@angular/material/button"
 import { MatTooltipModule } from "@angular/material/tooltip"
 import { UserLayerInfoCmp } from "./userlayerInfo/userlayerInfo.component"
+import { UtilModule } from "src/util"
+import { SpinnerModule } from "src/components/spinner"
 
 @NgModule({
   imports: [
@@ -17,6 +19,8 @@ import { UserLayerInfoCmp } from "./userlayerInfo/userlayerInfo.component"
     MatDialogModule,
     MatButtonModule,
     MatTooltipModule,
+    UtilModule,
+    SpinnerModule,
   ],
   declarations: [UserLayerDragDropDirective, UserLayerInfoCmp],
   exports: [UserLayerDragDropDirective],
diff --git a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.component.ts b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.component.ts
index fb6603223551791853fd9825aea84168a4bd48ce..204da49bf5170ca9998ed52f26fc31ad1df05471 100644
--- a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.component.ts
+++ b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.component.ts
@@ -1,6 +1,9 @@
-import { Component, Inject } from "@angular/core";
+import { Component, Inject, ViewChild } from "@angular/core";
 import { MAT_DIALOG_DATA } from "@angular/material/dialog";
 import { ARIA_LABELS, CONST } from 'common/constants'
+import { BehaviorSubject, Subject, combineLatest, concat, of, timer } from "rxjs";
+import { map, switchMap, take } from "rxjs/operators";
+import { MediaQueryDirective } from "src/util/directives/mediaQuery.directive";
 
 export type UserLayerInfoData = {
   layerName: string
@@ -21,10 +24,51 @@ export type UserLayerInfoData = {
 export class UserLayerInfoCmp {
   ARIA_LABELS = ARIA_LABELS
   CONST = CONST
+  public HIDE_NG_TUNE_CTRL = {
+    ONLY_SHOW_OPACITY: 'lower_threshold,higher_threshold,brightness,contrast,colormap,hide-threshold-checkbox,hide-zero-value-checkbox'
+  }
+
+  #mediaQuery = new Subject<MediaQueryDirective>()
+
+  @ViewChild(MediaQueryDirective, { read: MediaQueryDirective })
+  set mediaQuery(val: MediaQueryDirective) {
+    this.#mediaQuery.next(val)
+  }
+
   constructor(
     @Inject(MAT_DIALOG_DATA) public data: UserLayerInfoData
   ){
 
   }
-  public showMoreInfo = false
+
+  #showMore = new BehaviorSubject(false)
+
+  view$ = concat(
+    timer(1000).pipe(
+      take(1),
+      map(() => null as { showMore: boolean, compact: boolean })
+    ),
+    combineLatest([
+      this.#showMore,
+      concat(
+        of(null as MediaQueryDirective),
+        this.#mediaQuery,
+      ).pipe(
+        switchMap(mediaQueryD => mediaQueryD
+          ? mediaQueryD.mediaBreakPoint$.pipe(
+            map(val => val >= 2)
+          )
+          : of(false))
+      )
+    ]).pipe(
+      map(([ showMore, compact ]) => ({
+        showMore,
+        compact,
+      }))
+    )
+  )
+
+  toggleShowMore(){
+    this.#showMore.next(!this.#showMore.value)
+  }
 }
diff --git a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.style.css b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.style.css
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e8ba5734cbfb8ef8fd69eba5bd1cdc98907f848a 100644
--- a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.style.css
+++ b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.style.css
@@ -0,0 +1,11 @@
+.spinner
+{
+    justify-self: center;
+    display: inline-block;
+    margin: 1rem;
+}
+
+:has(> .spinner)
+{
+    display: grid;
+}
diff --git a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.template.html b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.template.html
index 0f878b732221bfd13c24feb573e51d9013fea03a..c999b1c1befd8d650096bf38c6b23a8aadf63192 100644
--- a/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.template.html
+++ b/src/viewerModule/nehuba/userLayers/userlayerInfo/userlayerInfo.template.html
@@ -1,37 +1,62 @@
-<div class="grid grid-col-3">
+<!-- TODO replace with hostdirective after upgrading to angular 15 -->
+<div iav-media-query></div>
 
-  <span class="ml-2 text-truncate v-center-text-span">
-    <i class="fas fa-file"></i>
-    {{ data.filename }}
-  </span>
-  
-  <button
-    [matTooltip]="ARIA_LABELS.VOLUME_TUNING_EXPAND"
-    mat-icon-button
-    [color]="showMoreInfo ? 'primary' : 'basic'"
-    (click)="showMoreInfo = !showMoreInfo">
-    <i class="fas fa-sliders-h"></i>
-  </button>
+<ng-template [ngIf]="view$ | async" [ngIfElse]="spinnerTmpl" let-view>
 
-  <button
-    [matTooltip]="ARIA_LABELS.CLOSE"
-    color="warn"
-    mat-icon-button
-    mat-dialog-close>
-    <i class="fas fa-trash"></i>
-  </button>
+  <div class="grid grid-col-4">
 
-  <div *ngIf="showMoreInfo"
-    class="sxplr-custom-cmp darker-bg overflow-hidden grid-wide-3">
-    <ng-layer-tune
-      advanced-control="true"
-      [ngLayerName]="data.layerName"
-      [thresholdMin]="data.min"
-      [thresholdMax]="data.max">
-    </ng-layer-tune>
-    <ul>
+    <span class="ml-2 text-truncate v-center-text-span">
+      <i class="fas fa-file"></i>
+      {{ data.filename }} {{ data.filename }}
+    </span>
+  
+    <ng-template [ngIf]="!view.showMore && !view.compact">
+      <ng-template [ngTemplateOutlet]="ngLayerController" [ngTemplateOutletContext]="{ onlyOpacity: true }">
+      </ng-template>
+    </ng-template>
+    
+    <button
+      [matTooltip]="ARIA_LABELS.VOLUME_TUNING_EXPAND"
+      mat-icon-button
+      [color]="view.showMore ? 'primary' : 'basic'"
+      (click)="toggleShowMore()">
+      <i class="fas fa-sliders-h"></i>
+    </button>
+  
+    <button
+      [matTooltip]="ARIA_LABELS.CLOSE"
+      color="warn"
+      mat-icon-button
+      mat-dialog-close>
+      <i class="fas fa-trash"></i>
+    </button>
+  
+    <div *ngIf="view.showMore || view.compact"
+      class="sxplr-custom-cmp darker-bg overflow-hidden grid-wide-3">
+      <ng-template [ngTemplateOutlet]="ngLayerController" [ngTemplateOutletContext]="{ onlyOpacity: !view.showMore }">
+      </ng-template>
+    </div>
+    
+    <ul class="grid-wide-3 sxplr-custom-cmp darker-bg" *ngIf="view.showMore">
       <li *ngFor="let warn of data.warning">{{ warn }}</li>
     </ul>
+  
+  </div>
+</ng-template>
+
+<ng-template #spinnerTmpl>
+  <div>
+    <spinner-cmp class="spinner"></spinner-cmp>
   </div>
+</ng-template>
+
 
-</div>
\ No newline at end of file
+<ng-template #ngLayerController let-onlyOpacity="onlyOpacity">
+  <ng-layer-tune
+    [hideCtrl]="onlyOpacity ? HIDE_NG_TUNE_CTRL.ONLY_SHOW_OPACITY : ''"
+    advanced-control="true"
+    [ngLayerName]="data.layerName"
+    [thresholdMin]="data.min"
+    [thresholdMax]="data.max">
+  </ng-layer-tune>
+</ng-template>