join
Transform and concatenate two Video or Audio timelines in a body.
Call shape
join<T: Video | Audio>(before: T, after: T) { ... } -> T
This is call-shape notation for lookup, not ClipAsm declaration syntax.
Graph inputs
| Name | Type | Cardinality |
|---|---|---|
before | T | exactly one |
after | T | exactly one |
Parameters and defaults
This program has no scalar parameters.
Result and stack behavior
Outputs: T.
All T inputs and outputs use one homogeneous type: Video or Audio. Use an explicit <Video> or <Audio> argument when the accessible stack makes inference ambiguous.
Default stack access is visible. See stack binding for ownership and visibility rules.
Body
The body begins with:
Tfrom the completebeforeinputTfrom the completeafterinput
The body must leave at least 1 homogeneous T value.
Timeline and markers
The program starts the body with before and after. It joins the matching values left by the body.
Example
clipasm 1
config {
video {
fps = 30
}
}
image("assets/before.png", 1s)
image("assets/after.png", 1s)
join {
zoom_in(4%)
}
Expected validation result: Video with exactly 60 project frames at the example’s explicit fps = 30.
The reference checks parse and compile this exact example. Compilation does not inspect the named media files.
Behavior
- The body starts with
beforefollowed byafter. - The body exposes the inputs as the lexical
$beforeand$afterreferences. - ClipAsm concatenates each homogeneous value from the body into one output timeline.
- Named values created by the body remain addressable as placements in the result.
Requirements
- The body must leave at least one value of the selected homogeneous Video or Audio type.
Common diagnostics
These are the diagnostics most specific to this program.
E_EMPTY_JOIN— Empty join result