From 14c468f2a2e63a80e1b7788bdf54f21d12da5be4 Mon Sep 17 00:00:00 2001 From: Will Miao <13051207myq@gmail.com> Date: Wed, 24 Sep 2025 21:11:36 +0800 Subject: [PATCH] feat(video): enhance video handling in model cards with lazy loading and autoplay settings, see #446 --- static/js/components/shared/ModelCard.js | 175 +++++++++++++++++++++-- static/js/managers/SettingsManager.js | 25 +--- 2 files changed, 162 insertions(+), 38 deletions(-) diff --git a/static/js/components/shared/ModelCard.js b/static/js/components/shared/ModelCard.js index 2a3c0d2f..17226bc0 100644 --- a/static/js/components/shared/ModelCard.js +++ b/static/js/components/shared/ModelCard.js @@ -435,7 +435,18 @@ export function createModelCard(model, modelType) { // Check if autoplayOnHover is enabled for video previews const autoplayOnHover = state.global?.settings?.autoplay_on_hover || false; const isVideo = previewUrl.endsWith('.mp4'); - const videoAttrs = autoplayOnHover ? 'controls muted loop' : 'controls autoplay muted loop'; + const videoAttrs = [ + 'controls', + 'muted', + 'loop', + 'playsinline', + 'preload="none"', + `data-src="${versionedPreviewUrl}"` + ]; + + if (!autoplayOnHover) { + videoAttrs.push('data-autoplay="true"'); + } // Get favorite status from model data const isFavorite = model.favorite === true; @@ -473,9 +484,7 @@ export function createModelCard(model, modelType) { card.innerHTML = `