Skip to content

Human: Share and export the demo movie, embed it in the README #40

Description

@leogdion

Human-only; requires Final Cut Pro. This is the Share and Export step: generate
the .fcpxml, import it, confirm it renders, then use Final Cut's Share → Master File
to produce the .mp4. It is manual because Final Cut exposes no scripting verb for
export (see "Why the Final Cut export step is manual" above).

Procedure

  1. swift run fcpxml-dsl export presentation presentation.fcpxml
  2. swift run fcpxml-dsl verify-import presentation.fcpxml
  3. Confirm visually in Final Cut that the slides and dissolves render as intended —
    in particular that anchored titles appear over their generator backgrounds.
  4. Share → Master File, H.264, 1080p24.
  5. Drag the resulting .mp4 into a GitHub issue or PR comment. GitHub returns a
    permanent https://github.com/user-attachments/assets/<uuid> URL.
  6. Paste that URL bare, on its own line into README.md.

Why that hosting mechanism

GitHub's markdown renderer will not play a repo-hosted video.
![](docs/assets/demo.mp4) renders as a broken image or a plain link. A bare
user-attachments URL on its own line renders a real inline player, and it keeps a
multi-MB binary out of a package repository that SwiftPM clones on every resolve.

README changes

Place the video near the top of ### Authoring with FCPKitDSL (README.md:122-155),
with a copy-pasteable PresentationDocument snippet beneath it.

While there: README.md:151 says the CLI "exports two smoke-test cuts". That is stale —
e2a64c3 added rgb for a third, and Issue 5 adds a fourth. Update the count.

Evidence doc

Create docs/manual/presentation-demo.md recording the procedure as performed, with
Final Cut and FCPXML versions, matching the fixture-provenance convention in
AGENTS.md and the precedent of docs/manual/typed-generation-gate.md.

That doc must also record why step 4 is manual, citing the evidence from
"Why the Final Cut export step is manual" above: one get command, every property
access="r", everything behind the com.apple.FinalCut.library.inspection
read-only access group. Include the bundle-identifier-based sdef invocation from
that section so a future reader can re-verify against a newer Final Cut release
rather than taking the claim on trust.

Verify during import — genuinely unknown until Final Cut sees the file

  • Does Final Cut render an anchored title over a <video>-backed generator on
    lane 1?
    The DTD permits it and lane semantics say yes, but this combination has
    not been round-tripped through Final Cut in this repo.
  • Do cross dissolves between two generators behave like dissolves between asset
    clips?
    Transition packing assumes T/2 overlap on both neighbors. Generators have
    no media handles beyond their declared duration, so Final Cut may object to the
    overlap. If it does, the mitigation is extending each generator's duration by T/2
    on each side.

Record the outcome of both in docs/manual/presentation-demo.md either way — a
negative result is evidence worth keeping.

Acceptance criteria

  • The README shows an inline-playing video and a copy-pasteable snippet.
  • No new files at the repo root (per the AGENTS.md docs-layout rule).
  • docs/manual/presentation-demo.md records versions, the sdef rationale, and the
    two verification outcomes.

Conventions

  • MIT header block on every new file (see Scripts/header.sh).
  • Swift Testing (import Testing, @Test) for new tests, per .claude/agent-notes.md. Include "Tests" in either the parent enum or the child struct, never both.
  • Doc comments on every public declaration.
  • Keep files under 225 lines (SwiftLint file_length); prefer Type+Modifiers.swift splits.
  • Run swift test and swift run fcpxml-diff schema-completeness Tests/FCPKitTests/TestData before each PR. Prefer opening a PR over merging.

Full spec with context and rationale: docs/planning/demo-presentation-video.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationready-for-humanRequires human implementationv0.1.0FCPKit v0.1.0 milestone work

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions