diff --git a/copyparty/web/baguettebox.js b/copyparty/web/baguettebox.js
index 3b056700..e6acd2d3 100644
--- a/copyparty/web/baguettebox.js
+++ b/copyparty/web/baguettebox.js
@@ -24,7 +24,7 @@ window.baguetteBox = (function () {
             onChange: null,
             readDirRtl: false,
         },
-        overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnVmode, btnReadDir, btnClose,
+        overlay, slider, btnPrev, btnNext, btnHelp, btnAnim, btnRotL, btnRotR, btnSel, btnFull, btnZoom, btnVmode, btnReadDir, btnClose,
         currentGallery = [],
         currentIndex = 0,
         isOverlayVisible = false,
@@ -301,7 +301,8 @@ window.baguetteBox = (function () {
                 '' +
                 '' +
                 '' +
-                '' +
+                '' +
+                '' +
                 '' +
                 '' +
                 ''
@@ -320,8 +321,12 @@ window.baguetteBox = (function () {
         btnRotR = ebi('bbox-rotr');
         btnSel = ebi('bbox-tsel');
         btnFull = ebi('bbox-full');
+        btnZoom = ebi('bbzoom');
         btnVmode = ebi('bbox-vmode');
         btnClose = ebi('bbox-close');
+
+        bcfg_bind(options, 'bbzoom', 'bbzoom', false, setzoom);
+        setzoom();
     }
 
     function halp() {
@@ -337,6 +342,7 @@ window.baguetteBox = (function () {
             ['end', 'last file'],
             ['R', 'rotate (shift=ccw)'],
             ['F', 'toggle fullscreen'],
+            ['Z', 'toggle zoom/stretch'],
             ['S', 'toggle file selection'],
             ['space, P, K', 'video: play / pause'],
             ['U', 'video: seek 10sec back'],
@@ -419,6 +425,8 @@ window.baguetteBox = (function () {
         }
         else if (kl == "f")
             tglfull();
+        else if (kl == "z")
+            btnZoom.click();
         else if (kl == "s")
             tglsel();
         else if (kl == "r")
@@ -526,6 +534,12 @@ window.baguetteBox = (function () {
         }
     }
 
+    function setzoom() {
+        var sel = clgot(btnZoom, 'on')
+        clmod(ebi('bbox-overlay'), 'fill', sel);
+        btnState(btnZoom, sel);
+    }
+
     function tglsel() {
         var o = findfile()[3];
         clmod(o.closest('tr'), 'sel', 't');
@@ -553,10 +567,14 @@ window.baguetteBox = (function () {
             'rgba(153,34,85,0.7)' : '';
 
         img.style.borderRadius = sel ? '1em' : '';
-        btnSel.style.color = sel ? '#fff' : '';
-        btnSel.style.background = sel ? '#d48' : '';
-        btnSel.style.textShadow = sel ? '1px 1px 0 #b38' : '';
-        btnSel.style.boxShadow = sel ? '.15em .15em 0 #502' : '';
+        btnState(btnSel, sel);
+    }
+
+    function btnState(btn, sel) {
+        btn.style.color = sel ? '#fff' : '';
+        btn.style.background = sel ? '#d48' : '';
+        btn.style.textShadow = sel ? '1px 1px 0 #b38' : '';
+        btn.style.boxShadow = sel ? '.15em .15em 0 #502' : '';
     }
 
     function keyUpHandler(e) {
@@ -733,7 +751,7 @@ window.baguetteBox = (function () {
         overlay.style.display = 'block';
         // Fade in overlay
         setTimeout(function () {
-            overlay.className = 'visible';
+            clmod(overlay, 'visible', 1);
             if (options.bodyClass && document.body.classList)
                 document.body.classList.add(options.bodyClass);
 
@@ -779,7 +797,7 @@ window.baguetteBox = (function () {
         unbindEvents();
 
         // Fade out and hide the overlay
-        overlay.className = '';
+        clmod(overlay, 'visible');
         setTimeout(function () {
             overlay.style.display = 'none';
             if (options.bodyClass && document.body.classList)
diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css
index 25d417d2..67f2b945 100644
--- a/copyparty/web/browser.css
+++ b/copyparty/web/browser.css
@@ -2165,6 +2165,12 @@ html.noscroll .sbar::-webkit-scrollbar {
 	vertical-align: middle;
 	transition: transform .23s, left .23s, top .23s, width .23s, height .23s;
 }
+#bbox-overlay.fill .full-image img,
+#bbox-overlay.fill .full-image video {
+    width: 100%;
+    height: 100%;
+    object-fit: contain;
+}
 html.bb_fsc .full-image img,
 html.bb_fsc .full-image video {
 	max-height: 100%;