In this step you’ll deploy the workflow service to Render and trigger it from your laptop. You’ll keep the batch task for step 7. This step proves the remote loop end to end with the simpler single-prompt task you already trust.
Push the workflow
You only need the workflow folder on Render, but pushing the whole repo is the simpler path. Create a new repo on GitHub from your fork and push to it.
$cd blog-thumbnails-workflows$git remote add origin git@github.com:<you>/blog-thumbnails-workflows.git$git push -u origin main...
Create the Workflow service on Render
- In the Render Dashboard, click New → Workflow.
- Connect your
blog-thumbnails-workflowsrepo. - Set Root Directory to
typescript/workflow-tsorpython/workflow-python. - For TypeScript, set Build Command to
npm installand Start Command tonpx tsx src/index.ts. - For Python, set Build Command to
pip install -r requirements.txtand Start Command topython main.py. - Add the environment variables from the table below, then click Deploy Workflow.
Required environment variables
Set these on the Workflow service. The image API keys are the same ones from your local .env. The storage credentials should point at whatever object store the workflow will use in production. If you deploy the reference repo’s MinIO service from render.yaml, copy its internal endpoint and credentials into the Workflow service env vars.
| Variable | Value |
|---|---|
OPENAI_API_KEY | Your OpenAI key (if using DALL-E 3 or GPT-Image-1) |
GOOGLE_API_KEY | Your Google AI key (if using Gemini) |
MINIO_ENDPOINT | The MinIO service URL (use the private hostname) |
MINIO_ACCESS_KEY | MinIO access key |
MINIO_SECRET_KEY | MinIO secret key |
MINIO_BUCKET | thumbnails |
Trigger a remote run
Once the deploy finishes and the Workflow service shows “Available” in the Render Dashboard, call it from your laptop. The single-prompt task is the right one to test first.
$export RENDER_API_KEY=rnd_...$render workflows start <your-workflow-slug>/generateThumbnails --input '["Remote run, first try", ["gemini-3-pro-image-preview"], "photorealistic", "bottom-bar", "inter", "", ""]'Run started: <run-id> Dashboard: https://dashboard.render.com/workflows/<id>/runs/<run-id> Result: https://<minio-host>/thumbnails/<uuid>.jpg
$export RENDER_API_KEY=rnd_...$render workflows start <your-workflow-slug>/generateThumbnails --input '["Remote run, first try", ["gemini-3-pro-image-preview"], "photorealistic", "bottom-bar", "inter", "", ""]'Run started: <run-id> Dashboard: https://dashboard.render.com/workflows/<id>/runs/<run-id> Result: https://<minio-host>/thumbnails/<uuid>.jpg
Open the Render Dashboard URL from the output. You should see a single parent run with one subtask, both green.
Show hint
If the build fails, check that the root directory matches the language folder and that the build command runs from that folder. If no tasks register, the start command is not executing the workflow entry file. If image upload fails on Render, check MINIO_ENDPOINT: it should use the deployed MinIO service URL or private hostname, not localhost.
What you learned
- Workflow services live outside the Blueprint today. Create them via the Render Dashboard
- The image API keys and MinIO credentials live on the Workflow service
- `render workflows start <workflow-slug>/<task-name> --input` triggers a remote run from your laptop
- Test with the single-prompt task first, then move on to the batch in step 7