elliotttate / elliotttate/SpliceKit

FCP 11.0 crashes frequently when MCP server triggers generate_captions (silent termination)

Open
#80 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Objective-C
Stars
144
Forks
26
PR merge metrics
No merged PRs in 30d

Description

## Bug Description

Final Cut Pro 11.0 (build 430149) silently terminates (no crash dialog, no .crash file in DiagnosticReports) when the MCP server calls `generate_captions()` after `set_caption_words()` with ~110+ Chinese word-timed entries. The process appears to be SIGKILLed by the system (jetsam / memory pressure), as no exception handler fires.

The **first** call to `generate_captions()` in a session succeeds. The crash typically occurs after FCP is restarted and `generate_captions()` is called in a **second session** where persisted caption data gets restored, suggesting state accumulation across sessions.

## Environment

- **macOS:** 26.5.1 (arm64)
- **Hardware:** Mac mini M4, 16GB RAM
- **FCP Version:** 11.0 (build 430149) — lifetime/perpetual license
- **SpliceKit Version:** 3.3.8
- **Installation:** DMG → patched copy at ~/Applications/SpliceKit/Final Cut Pro.app
- **MCP Server:** Python venv running `/Applications/SpliceKit.app/Contents/Resources/mcp/server.py`

## Steps to Reproduce

1. Launch SpliceKit-patched FCP 11.0
2. Import a ~57s MP4 with Chinese voice-over
3. Delete leading silence (~12s), leaving ~43s of content on timeline
4. Call `set_caption_words()` with 113 Chinese words with precise word-level timestamps (from Whisper turbo model)
5. Call `generate_captions(style="clean_minimal", animation="fade", max_words=3, word_highlight=True)`
6. FCP silently terminates — no crash dialog, just disappears

Also reproduced with `style="bold_pop"`, so it does not appear style-specific.

## Logs

From `~/Library/Logs/SpliceKit/splicekit.log` (~7500 lines in affected session):

**1. FCP 11.0 compatibility issue at startup:**
```
[00:06:57.545] [SpliceKit] [Favorites] Exception injecting favorites folder:
-[FFBKEffectLibraryFolder isSubcategoryAll]: unrecognized selector sent to instance 0xbbbbcde90
```
This repeats 4× — `isSubcategoryAll` selector is missing from `FFBKEffectLibraryFolder` on FCP 11.0.

**2. Caption generation writes back 113 titles word-by-word:**
```
[00:07:12.599] [Captions][RuntimeTitle] Live effect template summary: runs=2 [0]{看看 下 } ...
[00:07:12.599] [Captions][RuntimeTitle] Applying attributed text summary: runs=2 ...
[00:07:12.599] [Captions][RuntimeTitle] FFMotionEffect setText:forField: text="看看 下 午" ...
```
These attributed-string operations repeat for every word in all 113 titles, totalling ~6800 log lines. Each title gets 3 write cycles (full → word-level → word-highlight pivot).

**3. No crash handler report** — Sentry crash handler is enabled at startup but termination is too abrupt to capture a report.

## Suspected Cause

I suspect this is one of:

1. **Jetsam / memory pressure** — FCP 11.0 on 16GB M4 gets SIGKILLed by macOS when 113 Motion title clips with attributed strings and word-highlight channels consume too much memory.
2. **FFBKEffectLibraryFolder compatibility** — the startup exception (`isSubcategoryAll` unrecognized selector) may indicate broader FCP 11.0 API differences that manifest later during caption rendering.
3. **Caption persistence state leak** — the crash happens on the second launch after captions are persisted and restored, not the first.

## Expected Behavior

- Caption generation should complete without crashing FCP 11.0, especially for 100+ word Chinese content
- If FCP 11.0 lacks the API surface needed, `generate_captions()` should at minimum return a clear error instead of crashing

## Suggestion

Would it be possible to offer a **lightweight caption mode** for FCP 11.0 users that uses native FCP captions (FFAnchoredCaption / caption lane) instead of Motion title clips? The `generate_native_captions()` approach would likely avoid the Motion title rendering overhead entirely.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the MCP entry points set_caption_words() and generate_captions() in /Applications/SpliceKit.app/Contents/Resources/mcp/server.py, then review ~/Library/Logs/SpliceKit/splicekit.log. Reproduce the first and second sessions with the supplied 113-word Chinese input and compare persistence, memory, and FCP 11.0 compatibility evidence. Done means the cause is isolated and caption generation completes safely or reports a clear failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
objective-c, python
Domain
api, desktop
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.