```
When the workflow runs, Cyberdesk automatically resolves these URLs to display the image
to the AI agent.
Supported formats: PNG, JPEG, GIF, WebP. Maximum size: 10MB.
# Async Extraction Patterns
Source: https://docs.cyberdesk.io/concepts/async-extraction-patterns
Understanding synchronous, batch-scoped, and run-scoped async extraction modes
## Overview
Cyberdesk provides flexible async extraction modes that let you optimize workflow performance based on when and how you need extracted data. Understanding these patterns is key to building fast, efficient workflows.
success, task\_failed, error, or cancelled.
* Outputs, history, and output attachments are always cleared.
* Prior input attachments are kept unless you provide file\_inputs (then they are replaced).
* If you provide sensitive\_input\_values, new secrets are created; otherwise sensitive aliases are cleared.
* When a session\_id is present and the session is busy, immediate assignment is skipped and the retried run queues.
* Avoid sending both machine\_id and pool\_ids on retry; if both are present, pool\_ids take precedence.
# Upload from raw bytes
with open('./image.png', 'rb') as f:
image_bytes = f.read()
response = await client.workflows.upload_prompt_image(
file_content=image_bytes,
filename='my-image.png',
content_type='image/png'
)
# List all prompt images
response = await client.workflows.list_prompt_images()
for img in response.data:
print(f"{img.filename}: {img.supabase_url}")
# Get a fresh signed URL for an existing image
response = await client.workflows.get_prompt_image_signed_url(
path='org_xxx/prompt-assets/my-image.png'
)
print(f"Signed URL: {response.data.signed_url}")
print(f"Expires in: {response.data.expires_in} seconds")
# Delete an image
response = await client.workflows.delete_prompt_image(
path='org_xxx/prompt-assets/my-image.png'
)
```
Click on the button shown in this screenshot:
Then proceed to fill out the form.
``` Cyberdesk automatically resolves these URLs when running workflows, displaying the images to the AI agent.success, task\_failed, error, or cancelled.
* Outputs, history, and output attachments are always cleared.
* Prior input attachments are kept unless you provide file\_inputs (then they are replaced).
* If you provide sensitive\_input\_values, new secrets are created; otherwise sensitive aliases are cleared.
* When a session\_id is present and the session is busy, immediate assignment is skipped and the retried run queues.
* When machine\_id is provided, pool\_ids are ignored.
}
}
// List all prompt images
const { data: images } = await listWorkflowPromptImagesV1WorkflowsPromptImagesGet({
client: client._client
});
for (const img of images || []) {
console.log(`${img.filename}: ${img.supabase_url}`);
}
// Get a fresh signed URL for an existing image
const { data: signedData } = await getWorkflowPromptImageSignedUrlV1WorkflowsPromptImageSignedUrlGet({
client: client._client,
query: { path: 'org_xxx/prompt-assets/my-image.png' }
});
if (signedData) {
console.log(`Signed URL: ${signedData.signed_url}`);
console.log(`Expires in: ${signedData.expires_in} seconds`);
}
// Delete an image
await deleteWorkflowPromptImageV1WorkflowsPromptImageDelete({
client: client._client,
query: { path: 'org_xxx/prompt-assets/my-image.png' }
});
```
Click on the button shown in this screenshot:
Then proceed to fill out the form.
``` Cyberdesk automatically resolves these URLs when running workflows, displaying the images to the AI agent.