@startuml Création de vidéo actor Client participant "videoRoutes" as Routes participant "VideoController" as Controller participant "Video" as Model participant "Measurement" as MeasurementModel participant "VideoService" as Service participant "FFmpeg" as FFmpeg database Database Client -> Routes: POST /videos Routes -> Controller: createVideo(req, res) Controller -> Model: createVideo(project_id, measurement_ids, name, resolution, duration) Model -> Database: INSERT INTO videos Database --> Model: video data Model --> Controller: video object Controller -> Controller: getMeasurementPathList(measurement_ids, project_id) Controller -> MeasurementModel: getMeasurementByProjectAndOrderId(projectId, orderId) MeasurementModel -> Database: SELECT * FROM measurements Database --> MeasurementModel: measurement data MeasurementModel --> Controller: measurement object with path Controller -> Service: createVideoFromImages(project_id, pathList, duration, video_id, resWidth, resHeight) Service -> FFmpeg: spawn('ffmpeg', ffmpegArgs) Service -> Model: updateVideo(videoId, {status: rendering, progress: 0}) Model -> Database: UPDATE videos SET status = rendering, progress = 0 FFmpeg --> Service: stderr progress events Service -> Model: updateVideoProgress(videoId, progress, eta) Model -> Database: UPDATE videos SET progress = X, eta = Y FFmpeg --> Service: process complete Service -> Model: updateVideo(videoId, {status: completed, progress: 100}) Model -> Database: UPDATE videos SET status = completed, progress = 100 Service --> Controller: videoFile path Controller --> Routes: { message: success, id: video.id } Routes --> Client: 200 OK - JSON Response @enduml