From 8fb32b5260f9641edd1c02bd0b91638d18734324 Mon Sep 17 00:00:00 2001 From: feitianbubu Date: Sat, 6 Sep 2025 17:20:20 +0800 Subject: [PATCH] feat: support web online --- .env.example | 14 ++++++++++++++ server/common.py | 14 ++++++++++++++ server/main.py | 2 +- server/routers/image_router.py | 4 ++-- server/tools/comfy_dynamic.py | 4 ++-- server/tools/utils/image_generation_core.py | 4 ++-- .../tools/video_generation/video_canvas_utils.py | 4 ++-- 7 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..767235e0f --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +# Server Configuration +# Set the external server URL for proper image/video display in web interface +# If not set or empty, defaults to http://localhost:57988 +# Examples: +# SERVER_URL=http://localhost:57988 # Local development (default) +# SERVER_URL=https://jaaz.app # Production with domain +# SERVER_URL=http://192.168.1.100:57988 # Docker on remote server + +# Leave empty to use default localhost:57988 +SERVER_URL= + +# ComfyUI Configuration (if using ComfyUI) +# For Docker, use host.docker.internal to access host machine +# COMFYUI_URL=http://host.docker.internal:8188 \ No newline at end of file diff --git a/server/common.py b/server/common.py index 478245dbc..0c35a620a 100644 --- a/server/common.py +++ b/server/common.py @@ -1,3 +1,17 @@ import os DEFAULT_PORT = int(os.environ.get('DEFAULT_PORT', 57988)) + +def get_server_url(): + """Get the server URL from environment or use default localhost""" + # Try environment variable first + server_url = os.environ.get('SERVER_URL') + if server_url and server_url.strip(): # Check for non-empty string + print(f"🔗 Using SERVER_URL: {server_url}") + return server_url.rstrip('/') + + # Default to localhost + default_url = f"http://localhost:{DEFAULT_PORT}" + print(f"🔗 Using default server URL: {default_url}") + + return default_url diff --git a/server/main.py b/server/main.py index 5ab5ea449..fe1b57993 100644 --- a/server/main.py +++ b/server/main.py @@ -104,4 +104,4 @@ async def serve_react_app(): import uvicorn print("🌟Starting server, UI_DIST_DIR:", os.environ.get('UI_DIST_DIR')) - uvicorn.run(socket_app, host="127.0.0.1", port=args.port) + uvicorn.run(socket_app, host="0.0.0.0", port=args.port) diff --git a/server/routers/image_router.py b/server/routers/image_router.py index 8e46033bb..64907602d 100644 --- a/server/routers/image_router.py +++ b/server/routers/image_router.py @@ -1,6 +1,6 @@ from fastapi.responses import FileResponse from fastapi.concurrency import run_in_threadpool -from common import DEFAULT_PORT +from common import DEFAULT_PORT, get_server_url from tools.utils.image_canvas_utils import generate_file_id from services.config_service import FILES_DIR @@ -91,7 +91,7 @@ async def upload_image(file: UploadFile = File(...), max_size_mb: float = 3.0): print('🦄upload_image file_path', file_path) return { 'file_id': f'{file_id}.{extension}', - 'url': f'http://localhost:{DEFAULT_PORT}/api/file/{file_id}.{extension}', + 'url': f'{get_server_url()}/api/file/{file_id}.{extension}', 'width': width, 'height': height, } diff --git a/server/tools/comfy_dynamic.py b/server/tools/comfy_dynamic.py index 8f7dee0d9..f4638fab2 100644 --- a/server/tools/comfy_dynamic.py +++ b/server/tools/comfy_dynamic.py @@ -26,7 +26,7 @@ import traceback from io import BytesIO from typing import Annotated, Any, Dict, List, Optional -from common import DEFAULT_PORT +from common import DEFAULT_PORT, get_server_url from .utils.image_canvas_utils import ( generate_file_id, generate_new_image_element, @@ -250,7 +250,7 @@ async def _run( canvas_data["data"]["elements"].append(new_element) canvas_data["data"]["files"][file_id] = file_data - image_url = f"http://localhost:{DEFAULT_PORT}/api/file/{filename}" + image_url = f"{get_server_url()}/api/file/{filename}" generated_files_info.append( { diff --git a/server/tools/utils/image_generation_core.py b/server/tools/utils/image_generation_core.py index f44c0be22..72e3ae1f7 100644 --- a/server/tools/utils/image_generation_core.py +++ b/server/tools/utils/image_generation_core.py @@ -4,7 +4,7 @@ """ from typing import Optional, Dict, Any -from common import DEFAULT_PORT +from common import DEFAULT_PORT, get_server_url from tools.utils.image_utils import process_input_image from ..image_providers.image_base_provider import ImageProviderBase @@ -94,4 +94,4 @@ async def generate_image_with_provider( session_id, canvas_id, filename, mime_type, width, height ) - return f"image generated successfully ![image_id: {filename}](http://localhost:{DEFAULT_PORT}{image_url})" + return f"image generated successfully ![image_id: {filename}]({get_server_url()}{image_url})" diff --git a/server/tools/video_generation/video_canvas_utils.py b/server/tools/video_generation/video_canvas_utils.py index 736abb650..e85c200c2 100644 --- a/server/tools/video_generation/video_canvas_utils.py +++ b/server/tools/video_generation/video_canvas_utils.py @@ -12,7 +12,7 @@ from services.config_service import FILES_DIR from services.db_service import db_service from services.websocket_service import send_to_websocket, broadcast_session_update # type: ignore -from common import DEFAULT_PORT +from common import DEFAULT_PORT, get_server_url from utils.http_client import HttpClient import aiofiles import mimetypes @@ -152,7 +152,7 @@ async def send_video_error_notification(session_id: str, error_message: str) -> def format_video_success_message(filename: str) -> str: """Format success message for video generation""" - return f"video generated successfully ![video_id: {filename}](http://localhost:{DEFAULT_PORT}/api/file/{filename})" + return f"video generated successfully ![video_id: {filename}]({get_server_url()}/api/file/{filename})" async def process_video_result(