Hi everyone,
I’m evaluating Temporal for a backend workflow in a video editor-style application where users upload clips, apply simple edits, and then request an export. The product is not meant to be a full free capcut clone, but the workflow is similar in the sense that a user may start a video export, leave the app, and come back later to see whether the export completed, failed, or needs to be retried.
My current idea is to model the export process as a Workflow with multiple Activities:
-
Validate the uploaded media files
-
Generate preview metadata/thumbnails
-
Send the render job to a processing service
-
Poll or wait for the render result
-
Upload the final exported video to storage
-
Update the project/export status in the database
The part I’m unsure about is how to handle long-running render jobs and retries correctly. Some exports may take a few minutes, while larger files could take much longer. If the external rendering service fails or times out, I want Temporal to retry safely without accidentally creating duplicate export jobs or overwriting the wrong project status.
For this kind of video editor/export workflow, would you recommend keeping the render job as one long Activity with heartbeat/timeouts, or splitting it into smaller Activities with signals/callbacks from the rendering service?
Also, what is the recommended pattern for making the external render request idempotent so that Temporal retries don’t create duplicate video exports?
Any guidance on Workflow design, Activity retries, heartbeat timeout settings, or idempotency patterns would be really helpful.