From f9eed7e13ecfdbf1205f91c81e06d5223ebada71 Mon Sep 17 00:00:00 2001 From: sakura1bgx Date: Tue, 11 Feb 2025 03:50:52 +0900 Subject: [PATCH] Update flipstreamviewer.py - Remove unnecessary import - Implement checkbox to enable/disable status refresh - Optimize stream logic for better performance --- flipstreamviewer.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/flipstreamviewer.py b/flipstreamviewer.py index 72a318d..5ab2c3c 100644 --- a/flipstreamviewer.py +++ b/flipstreamviewer.py @@ -9,7 +9,6 @@ import concurrent.futures from pathlib import Path from io import BytesIO -import cv2 import requests import torch import torchvision.transforms.functional as F @@ -63,6 +62,7 @@ param = {"loramode": "", "lora": "", "_capture_offsetX": 0, "_capture_offsetY": state = {"presetTitle": time.strftime("%Y%m%d-%H%M"), "presetFolder": "", "presetFile": "", "loraRate": "1", "loraRank": "0", "loraFolder": "", "loraFile": "", "loraTagOptions": "[]", "loraTag": "", "loraLinkHref": "", "loraPreviewSrc": "", "darker": 0.0, "wd14th": 0.35, "wd14cth": 0.85} frame_updating = False frame_buffer = [] +frame_index = 0 frame_fps = 8 exclude_tags = "" @@ -767,6 +767,11 @@ function hideView() { setTimeout(hideView, 300 * 1000); function refreshStatus() { + const refresh = document.getElementById("refreshCheckbox").checked; + if (!refresh) { + return; + } + fetch("/flipstreamviewer/get_status").then(response => { if (response.ok) { response.json().then(json => { @@ -928,16 +933,19 @@ async def stream(request): response.content_type = "multipart/x-mixed-replace; boundary=frame" await response.prepare(request) + global frame_index + last_time = time.time() while request.transport and not request.transport.is_closing(): if frame_buffer: - if len(frame_buffer) > 1: - frame = frame_buffer.pop(0) - frame_buffer.append(frame) - else: - frame = frame_buffer[0] + if frame_index >= len(frame_buffer): + frame_index = 0 + frame = frame_buffer[frame_index] + frame_index += 1 await response.write(b"--frame\r\nContent-Type: image/webp\r\n\r\n" + frame + b"\r\n") - if frame_fps >= 1: - await asyncio.sleep(1 / frame_fps) + await asyncio.sleep(max(0, (1 / frame_fps) - (time.time() - last_time))) + last_time = time.time() + else: + await asyncio.sleep(0.1) return response @@ -1120,6 +1128,9 @@ async def viewer(request):
Status
+
+ refresh +
:
: