Part of the HoloScript Traits reference. Browse: Web3 · Advanced · All Traits
The @render_network trait connects an object to the Render Network — a decentralized GPU rendering grid powered by RNDR tokens. Use it to offload photorealistic rendering, volumetric captures, and Gaussian Splat baking to thousands of distributed nodes.
composition "Studio Shot" {
object "Camera" @render_network(api_key: env.RENDER_API_KEY) {
position: [0, 1.6, 0]
}
}
When a render_submit event fires, the trait authenticates with the Render Network, submits the job, and streams progress events back. On completion, signed output URLs are emitted via render_job_complete.
object "RenderCam" @render_network(
api_key: "rndr_...",
wallet_address: "0x...",
default_quality: "production",
default_engine: "cycles",
default_priority: "normal",
max_concurrent_jobs: 3
) { }
| Config | Type | Default | Description |
|---|---|---|---|
api_key |
string | "" |
Required. Render Network API key. |
wallet_address |
string | "" |
Ethereum wallet for RNDR credit balance. |
default_quality |
string | "preview" |
"preview", "standard", "production", "cinematic" |
default_engine |
string | "auto" |
"auto", "cycles", "eevee", "vray", "arnold" |
default_priority |
string | "normal" |
"draft", "normal", "high", "urgent" |
max_concurrent_jobs |
number | 5 |
Max simultaneously active jobs. |
auto_download |
bool | true |
Automatically download outputs when complete. |
output_path |
string | "./renders/" |
Local path for downloaded outputs. |
| Event | Payload | Description |
|---|---|---|
render_submit |
{ scene, quality?, engine?, priority?, frames? } |
Submit a render job. |
cancel_job |
{ job_id } |
Cancel an active job. |
refresh_credits |
{} |
Refresh RNDR credit balance. |
| Event | Payload | Description |
|---|---|---|
render_job_submitted |
{ job, estimatedWait } |
Job accepted by the network. |
render_job_progress |
{ job, progress, framesCompleted } |
Fired every 5 s while active. |
render_job_complete |
{ job } — job.outputs[] contains signed download URLs |
Job finished successfully. |
render_job_failed |
{ job, error } |
Job failed on the network. |
render_job_cancelled |
{ job } |
Job cancelled by user. |
credits_refreshed |
{ credits } |
Balance update received. |
logic {
on_start() {
emit "render_submit" {
scene: "MainScene",
quality: "production",
engine: "cycles",
frames: { start: 0, end: 0 }
}
}
on_event("render_job_complete", event) {
log("Render done:", event.job.outputs[0].url)
}
}
object "ProgressPanel" @ui_panel {
width: 400
height: 80
text: "Idle"
}
logic {
on_event("render_job_progress", event) {
ProgressPanel.text = `Rendering… ${event.progress}% (${event.framesCompleted} frames done)`
}
on_event("render_job_complete", event) {
ProgressPanel.text = "Complete! Output ready."
}
}
object "CancelButton" @clickable {
on_click: {
emit "cancel_job" { job_id: state.currentJobId }
}
}
RNDR credits are deducted per GPU-hour. The trait tracks:
credits.balance— spendable RNDR balancecredits.pending— credits reserved for active jobscredits.spent— total spent this sessioncredits.earned— total earned (if running a render node)
Emit refresh_credits to force a balance update from the API.
When no api_key is provided, the trait automatically falls back to simulation mode — a local progress ticker that completes jobs in ~5 seconds. Useful for UI development without burning RNDR credits.