Fixed
- The reporting tools were still blind to a gap-based storyline. v0.23.0
fixed the parser and the media tools; an audit of the remainingtl.clips
call sites found nine read-only tools that still walked the spine alone.
On the #23 projectexport_edlandexport_csvproduced an empty export,
analyze_pacinganswered "No clips to analyze",list_markersand
list_keywordsfound nothing, andfilter_by_rolereported no matches —
each silently, with no hint the edit was in lanes. Same defect as #23, one
surface out.Timeline.all_clips()is the base view (spine plus every
connected clip, including the ones with no media, because a caption still
carries markers, keywords and a role), andmedia_clips()is now the
subset of it that has media.list_markers,list_keywords,
export_csvandfilter_by_rolereadall_clips();export_edland
analyze_pacingreadmedia_clips(), because an EDL row names a source a
caption does not have and a caption is not a cut to average into pacing.
list_markersalso missed markers on connected clips in spine-based
projects — a marker on a connected title was never listed. - The preview placed connected clips by their raw offset. A clip under a
gap whose clock starts at 3600s was drawn against a 3600s origin and
landed four seconds early on the #23 project. Connected clips now render
at theirtimeline_start, and the origin heuristic ignores elements the
parser has already normalised (so a gap-based storyline, whose spine gaps
establish 0 and are not kept as clips, gets an origin of 0). detect_media_silencereported spans of 0.00s. ffmpeg routinely puts
a silence start tens of microseconds before a clip's out-point; clamping
that to the used window left a span too short to print and impossible to
act on, sincesplit_clipcannot cut inside a frame.
map_silence_to_timelinetakes amin_mappedfloor and the handler
passes one frame duration. The default is 0, so other callers are
unchanged.
Added
Timeline.all_clips()— every clip carrying the edit, positioned on the
timeline, spine or lanes.
Install / upgrade: uvx fcp-mcp-server picks it up on the next run; pip install -U fcp-mcp-server otherwise.
Tests: 1781 pass / 7 skip on the mcp floor, 1782 / 6 on mcp 2.x, 1757 / 31 with FCP_MCP_INDEX=off.