A track item has always carried an object, and an object needs an
asset. Instead of objects without one, a dropped picture or video gets
a sprite the composition owns, the way a song owns its sounds (#355).
To the rest of the code it is a sprite like any other.
- The asset list starts a drag for textures, vector art, pixel art and
videos. Dropped on a track, they make the sprite and the item in one
undo step. A video item is as long as the video and follows it.
- One sprite per picture and composition. A second drop of the same
video shares it. Once no item wears it, it goes in the same step.
- Deleting a composition takes its sprites along. A duplicate gets
sprites of its own.
- Pasting into a scene or container turns the sprite into a project
asset. Pasting into another composition gives that one a copy. The
clipboard carries the sprite, so cut and paste loses nothing.
- Owned sprites stay out of the asset list and the pickers. The
inspector shows them with a dot in front.
- "Make project asset" in the item's menu, on the timeline and in the
hierarchy, turns the sprite into an ordinary one.
- The first track of the Composition tab gets its top line, as the
Song tab's has.
Found on the way: loading kept an owner only for the asset types a
song can hold. A composition's sprite would have lost its owner and
turned up in the list after a reload.
Tests:
- Unit composition-sprites: 11 new. Without the rule 5 of them are
red, without the loading fix the loading test is.
- e2e 69 on melektaus-atx: ALL PASSED, 15 checks, 69k new
- Gate on melektaus-atx: 305 files, 4714 tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Trying the tab turned up six things to fix. Items of a track could
not overlap, so a drag stalled as soon as the pointer reached another
item. An item's ends gave no hint they could be dragged, a trimmed
video showed nowhere, clip names were hard to read and vanished when
picked, and the track menu did not match the song tab.
- Items of a track may overlap and nothing is cut or pushed aside.
The later one lies in front, in the picture and on the timeline.
The overlap is shaded and a line marks the covered end.
- Edges win over bodies when hit, so the covered end of the lower
item can still be dragged. Hovering an edge lights it up and shows
the ew-resize cursor, as in the song tab.
- A clip in the overlap plays on both items. Clips themselves still
do not overlap; a moved clip now runs up to its neighbour instead
of stopping short.
- Fit to media and a new video no longer cap the length at the next
item, which only made sense while overlaps were forbidden.
- The left edge can be trimmed past the start of the video. The
offset goes negative and the sprite shows the first picture until
the video begins.
- Video marks: a corner triangle where the item cuts into its video,
a line with a triangle like the song loop where the video starts or
ends inside the item. Edges snap to the video's ends within 6 px.
- Clip names sit in their own layer above the bars, in text colour.
- The track menu matches the song tab: add above or below, move up or
down, delete. It opens on the head and on an empty spot of the
track. The Remove track button left the inspector.
Tests:
- Unit composition and composition-edit: 67 green, several new or
rewritten. Bending three spots in the rules turned their tests red.
- e2e 69: ALL PASSED, 12 checks. 69b and 69c now drop the second item
over the first and drag the covered end past it. Without edges
winning the hit, 69c fails with hover: null.
- Gate on melektaus-atx: CHECK EXIT 0, 302 files, 4672 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A composition could be placed and played, but not filled. Its tab
puts the picture at the playhead above a timeline of tracks, so a cut
or a cutscene is laid out by dragging assets onto tracks.
- The timeline takes the song tab's geometry with frames for ticks:
ruler in seconds, scrubbing, play and pause, + Track. Zoom and pan
glide through viewTween like the other tabs.
- A placeable asset dropped on a track becomes an item, 3 s long or
as long as its sprite's video. Dropped on an item it lands behind.
- Items move without overlapping. The right edge stops at the next
item. The left edge trims into a video and not before its start.
- An animation dropped on a track becomes a narrower clip bar above
the item it plays on. The asset panel now starts a drag for
animations too.
- The picture is a scene view over compositionHolder. A click picks
an item or its child, a drag moves the real object. It takes no
assets, since an object there would have no item.
- The hierarchy lists the items alive at the playhead. Reparenting is
off there, items stay at the top level.
- The inspector shows a TIMING block on an item (start, length,
offset for a video, Fit to media) and edits tracks and clips.
- Delete, the context menu and Remove item take item and object in
one undo step.
- fitMedia: an override that gives an item another video sets its
length in the same undo step, capped at the next item. Dragging an
edge or typing a length turns it off.
- A composition inside a composition is refused.
Tests:
- Unit composition-edit (new): 19 tests. Four counter-checks each
turned their test red. The "back to 3 s" test got a step in
between after one stayed green.
- e2e 69 (new): 11 checks, 9 own. The hierarchy check reads the rows
shown, after a counter-check on the model's rows stayed green.
- Gate on melektaus-atx: CHECK EXIT 0, 302 files, 4662 tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>