import shortuuid
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
-from fastapi import BackgroundTasks, FastAPI
+from fastapi import BackgroundTasks, FastAPI, HTTPException
from pydantic import BaseModel
from hls import TranscodeJob
-from transcode import TranscodeItem, TranscodeStatus, background_tasks_results, execute_transcode_task
+from transcode import TranscodeItem, TranscodeStatus, background_tasks_results, execute_hls_transcode_task
# https://docs.pydantic.dev/2.4/concepts/models/
@app.post("/submit")
async def submit(item: TranscodeItem, background_tasks: BackgroundTasks):
- task_id = shortuuid.uuid()
- background_tasks.add_task(execute_transcode_task, task_id, item.source, item.target, item.frames)
- job = TranscodeJob()
- job.status = TranscodeStatus.RUNNING
- background_tasks_results[task_id] = job
+ if item.profile == 'hls':
+ task_id = shortuuid.uuid()
+ background_tasks.add_task(execute_hls_transcode_task, task_id, item.source, item.target, item.frames)
+ job = TranscodeJob()
+ job.status = TranscodeStatus.RUNNING
+ background_tasks_results[task_id] = job
+ else:
+ raise HTTPException(status_code=400, detail="Profile not defined!")
return {"task_id": task_id}
--- /dev/null
+import os
+import subprocess
+from pathlib import Path
+import nicegui
+
+cmd = [
+ 'pyinstaller',
+ 'main.py', # your main file with ui.run()
+ '--name', 'media-samurai', # name of your app
+ '--onefile',
+ #'--windowed', # prevent console appearing, only use with ui.run(native=True, ...)
+ '--add-data', f'{Path(nicegui.__file__).parent}{os.pathsep}nicegui'
+]
+subprocess.call(cmd)
\ No newline at end of file
ui.link('Check documentation', '/docs')
ui.run_with(app, favicon=site_icon_lizzard)
if __name__ == "__main__":
- uvicorn.run(app, port=8181, log_level='critical')
+ uvicorn.run(app, port=8181)
+ # , log_level='critical'
class TranscodeItem(BaseModel):
source: str
target: str
+ profile: str
frames: int
job.status = TranscodeStatus.COMPLETED
-def execute_transcode_task(task_id, remote_source_file, remote_target_directory, frames):
+def execute_hls_transcode_task(task_id, remote_source_file, remote_target_directory, frames):
job = background_tasks_results[task_id]
job.started = datetime.now()
job.status = TranscodeStatus.RUNNING