Spaces:
Running
Running
use default repo url
Browse files
app.py
CHANGED
|
@@ -10,7 +10,6 @@ from typing import Optional
|
|
| 10 |
|
| 11 |
import gradio as gr
|
| 12 |
from fastrtc import WebRTC
|
| 13 |
-
from fastapi.staticfiles import StaticFiles
|
| 14 |
|
| 15 |
from engine import SceneState, POSITION_OFFSETS, Choice, InputRequest
|
| 16 |
from story import build_sample_story
|
|
@@ -1432,61 +1431,13 @@ def build_app() -> gr.Blocks:
|
|
| 1432 |
|
| 1433 |
def main() -> None:
|
| 1434 |
"""Launch the Visual Novel Gradio app."""
|
| 1435 |
-
|
| 1436 |
-
|
| 1437 |
-
|
| 1438 |
-
logger.info(f"=== Visual Novel App Startup ===")
|
| 1439 |
-
|
| 1440 |
-
# Get absolute paths for static directories
|
| 1441 |
-
script_dir = os.path.dirname(os.path.abspath(__file__))
|
| 1442 |
-
assets_dir = os.path.join(script_dir, "assets")
|
| 1443 |
-
logger.info(f"Assets directory: {assets_dir}")
|
| 1444 |
|
| 1445 |
# Build Gradio app
|
| 1446 |
-
logger.info("Building Gradio app...")
|
| 1447 |
demo = build_app()
|
| 1448 |
|
| 1449 |
-
# Enable queue to access the FastAPI app
|
| 1450 |
-
logger.info("Enabling queue...")
|
| 1451 |
-
demo.queue()
|
| 1452 |
-
|
| 1453 |
-
# Add custom route for serving assets
|
| 1454 |
-
logger.info("Adding custom asset route handler...")
|
| 1455 |
-
|
| 1456 |
-
# First, add a test route to verify routing works at all
|
| 1457 |
-
@demo.app.get("/test-route")
|
| 1458 |
-
async def test_route():
|
| 1459 |
-
"""Test route to verify custom routes work."""
|
| 1460 |
-
logger.info("TEST ROUTE HIT!")
|
| 1461 |
-
return {"status": "success", "message": "Custom routes are working!"}
|
| 1462 |
-
|
| 1463 |
-
@demo.app.get("/assets/{category}/{filename:path}")
|
| 1464 |
-
async def serve_asset(category: str, filename: str):
|
| 1465 |
-
"""Serve asset files with proper MIME types."""
|
| 1466 |
-
import mimetypes
|
| 1467 |
-
|
| 1468 |
-
filepath = os.path.join(assets_dir, category, filename)
|
| 1469 |
-
logger.info(f"Asset request: /assets/{category}/{filename} -> {filepath}")
|
| 1470 |
-
|
| 1471 |
-
if not os.path.exists(filepath):
|
| 1472 |
-
logger.error(f"File not found: {filepath}")
|
| 1473 |
-
raise HTTPException(status_code=404, detail="File not found")
|
| 1474 |
-
|
| 1475 |
-
# Get MIME type
|
| 1476 |
-
mime_type, _ = mimetypes.guess_type(filepath)
|
| 1477 |
-
logger.info(f"Serving {filepath} as {mime_type}")
|
| 1478 |
-
|
| 1479 |
-
return FileResponse(filepath, media_type=mime_type)
|
| 1480 |
-
|
| 1481 |
-
# List all registered routes for debugging
|
| 1482 |
-
logger.info("Registered routes:")
|
| 1483 |
-
for route in demo.app.routes:
|
| 1484 |
-
logger.info(f" {route.methods if hasattr(route, 'methods') else 'N/A'} {route.path}")
|
| 1485 |
-
|
| 1486 |
-
logger.info("Custom asset route registered!")
|
| 1487 |
-
|
| 1488 |
# Launch with SSR disabled
|
| 1489 |
-
logger.info("Launching app...")
|
| 1490 |
demo.launch(
|
| 1491 |
server_name="0.0.0.0",
|
| 1492 |
server_port=7860,
|
|
|
|
| 10 |
|
| 11 |
import gradio as gr
|
| 12 |
from fastrtc import WebRTC
|
|
|
|
| 13 |
|
| 14 |
from engine import SceneState, POSITION_OFFSETS, Choice, InputRequest
|
| 15 |
from story import build_sample_story
|
|
|
|
| 1431 |
|
| 1432 |
def main() -> None:
|
| 1433 |
"""Launch the Visual Novel Gradio app."""
|
| 1434 |
+
logger.info("=== Visual Novel App Startup ===")
|
| 1435 |
+
logger.info("Using HuggingFace repo URLs for assets")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1436 |
|
| 1437 |
# Build Gradio app
|
|
|
|
| 1438 |
demo = build_app()
|
| 1439 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1440 |
# Launch with SSR disabled
|
|
|
|
| 1441 |
demo.launch(
|
| 1442 |
server_name="0.0.0.0",
|
| 1443 |
server_port=7860,
|
engine.py
CHANGED
|
@@ -21,25 +21,29 @@ POSITION_OFFSETS = {
|
|
| 21 |
}
|
| 22 |
|
| 23 |
|
| 24 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
def background_asset(filename: str) -> str:
|
| 26 |
-
"""Get the URL for a background image."""
|
| 27 |
-
url = f"/assets/backgrounds/{filename}"
|
| 28 |
-
logger.info(f"
|
| 29 |
return url
|
| 30 |
|
| 31 |
|
| 32 |
def sprite_asset(filename: str) -> str:
|
| 33 |
-
"""Get the URL for a sprite image."""
|
| 34 |
-
url = f"/assets/sprites/{filename}"
|
| 35 |
-
logger.info(f"
|
| 36 |
return url
|
| 37 |
|
| 38 |
|
| 39 |
def audio_asset(filename: str) -> str:
|
| 40 |
-
"""Get the URL for an audio file."""
|
| 41 |
-
url = f"/assets/audio/{filename}"
|
| 42 |
-
logger.info(f"
|
| 43 |
return url
|
| 44 |
|
| 45 |
|
|
|
|
| 21 |
}
|
| 22 |
|
| 23 |
|
| 24 |
+
# HuggingFace Space configuration
|
| 25 |
+
HF_SPACE_REPO = "cduss/reachymini_vn_example"
|
| 26 |
+
HF_BASE_URL = f"https://huggingface.co/spaces/{HF_SPACE_REPO}/resolve/main"
|
| 27 |
+
|
| 28 |
+
# Asset helper functions - HuggingFace repo URLs
|
| 29 |
def background_asset(filename: str) -> str:
|
| 30 |
+
"""Get the URL for a background image from HF repo."""
|
| 31 |
+
url = f"{HF_BASE_URL}/assets/backgrounds/{filename}"
|
| 32 |
+
logger.info(f"Background asset: {url}")
|
| 33 |
return url
|
| 34 |
|
| 35 |
|
| 36 |
def sprite_asset(filename: str) -> str:
|
| 37 |
+
"""Get the URL for a sprite image from HF repo."""
|
| 38 |
+
url = f"{HF_BASE_URL}/assets/sprites/{filename}"
|
| 39 |
+
logger.info(f"Sprite asset: {url}")
|
| 40 |
return url
|
| 41 |
|
| 42 |
|
| 43 |
def audio_asset(filename: str) -> str:
|
| 44 |
+
"""Get the URL for an audio file from HF repo."""
|
| 45 |
+
url = f"{HF_BASE_URL}/assets/audio/{filename}"
|
| 46 |
+
logger.info(f"Audio asset: {url}")
|
| 47 |
return url
|
| 48 |
|
| 49 |
|