Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions ogscope/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,30 @@ class Settings(BaseSettings):
default=2 / 3,
description="星空分析目标帧率(约 1.5 秒 1 帧),仅用于前端节流 / Target star-analysis FPS for UI throttle (~1.5s per frame)",
)
star_analysis_min_interval_ms: int = Field(
default=2000,
ge=500,
le=30000,
description="实时解算最小间隔(毫秒)/ Minimum interval for realtime solving in ms",
)
star_analysis_max_interval_ms: int = Field(
default=12000,
ge=1000,
le=60000,
description="实时解算最大间隔(毫秒)/ Maximum interval for realtime solving in ms",
)
star_analysis_request_timeout_ms: int = Field(
default=4500,
ge=500,
le=120000,
description="实时解算请求外层硬超时(毫秒)/ Outer hard timeout for realtime solve request in ms",
)
star_analysis_slow_threshold_ms: int = Field(
default=3000,
ge=200,
le=120000,
description="实时解算慢请求阈值(毫秒)/ Slow realtime solve threshold in ms",
)

model_config = SettingsConfigDict(
env_file=".env",
Expand Down
17 changes: 17 additions & 0 deletions ogscope/web/api/analysis/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
AnalysisExtractPreviewRequest,
AnalysisJobCreateRequest,
AnalysisPresetCreate,
AnalysisReplaceVideoRequest,
AnalysisSolveImageRequest,
AnalysisSolveVideoFrameRequest,
ImportFromDebugRequest,
Expand Down Expand Up @@ -128,6 +129,19 @@ async def import_upload_from_debug(body: ImportFromDebugRequest):
raise HTTPException(status_code=400, detail=str(exc)) from exc


@router.post("/analysis/uploads/replace_video")
async def replace_transcoded_video(body: AnalysisReplaceVideoRequest):
"""客户端转码后替换视频并清理原文件 / Replace uploaded video after client transcode."""
try:
return analysis_service.replace_transcoded_video(body)
except FileNotFoundError as exc:
raise HTTPException(status_code=404, detail=str(exc)) from exc
except ValueError as exc:
raise HTTPException(status_code=400, detail=str(exc)) from exc
except Exception as exc: # noqa: BLE001
raise HTTPException(status_code=400, detail=str(exc)) from exc


@router.post("/analysis/jobs")
async def create_analysis_job(payload: AnalysisJobCreateRequest):
"""创建任务 / Create analysis job"""
Expand Down Expand Up @@ -287,8 +301,10 @@ async def solve_uploaded_frame(
raise ValueError("payload 必须为 JSON 对象 / payload must be a JSON object")
topn = obj.get("overlay_topn_count")
enable_polar = obj.get("enable_polar_guide")
solve_interval_ms = obj.get("solve_interval_ms")
obj.pop("overlay_topn_count", None)
obj.pop("enable_polar_guide", None)
obj.pop("solve_interval_ms", None)
# 前端调试元数据,不参与 Pydantic 模型 / Client metadata not in schema
obj.pop("time_sec", None)
obj.pop("frame_width", None)
Expand All @@ -300,6 +316,7 @@ async def solve_uploaded_frame(
solve_params=data,
overlay_topn_count=topn,
enable_polar_guide=enable_polar,
solve_interval_ms=solve_interval_ms,
)
except HTTPException:
raise
Expand Down
Loading
Loading