IntroStamp is a macOS app for creating and uploading segment markers for Intro, Recap, Credits / Outro, and Preview.
It provides timeline-based annotation with synchronized video, frame strip, and audio timeline.
- Local video loading with timeline-based segment editing
- Filename-based auto-detection plus TMDB search fallback
- Audio density track with music-likelihood color cues
- Scene-cut detection with thumbnail-assisted boundary work
- Recap detection via local SRT/ASS subtitles or OpenSubtitles
- Non-overlapping multi-segment draft workflow with no-segment flags per type
- Single-segment or bulk upload to TheIntroDB and IntroDB
- API keys and service credentials stored in macOS Keychain
- Review mode for batch validation and correction across multiple items
- JSON review import from submission backups or compatible segment payloads
- Export submission backup JSON for all submitted items via the toolbar
- Logging of segment submissions
- Download the latest asset from Releases:
IntroStamp-local-arm64.zipfor Apple SiliconIntroStamp-local-x86_64.zipfor IntelIntroStamp-local-universal.zipfor either architecture (larger file size)
- Unzip and move
IntroStamp.appto/Applications. - Start the app.
Note:
Current release asset is ad-hoc signed and not notarized.
On first launch, macOS Gatekeeper may show a warning.
Open System Settings:Privacy & Security-> under blocked apps clickOpen Anyway.
- Open a local video file.
- Confirm media identification (auto-detected or manual TMDB search).
- Automatic load of existing segments (TheIntroDB / IntroDB, depending on compatibility and configured keys).
- Create and adjust drafts on the timeline, including no-segment flags if needed.
- Optionally run audio likelihood, scene-cut, or recap detection to accelerate drafting.
- Upload one segment type or all drafts.
- Import a submission backup JSON (or compatible JSON lines/object payload). Or search for a TMDB ID to fetch existing segments from TheIntroDB or IntroDB.
- Review each item for segments.
- Select list item, inspect with jump controls, and refine boundaries.
- Submit the row (or a full group).
- Select
Backup ... Submissionsfrom the toolbar underToolsto export a JSON file with all submitted items. - Copy and paste the clerk token request/response from the browser's network log as a cURL command into the text input field.
- Click
Backupto load and save the submission history as a JSON file.
- Synchronized video player, frame strip, and audio timeline
- Non-overlapping segment logic across types
- Drag to resize or move segments between rows
- Undo and redo support for segment changes
- Vertical scroll zoom with playhead-focused editing
- Scope icon in draft rows to jump playhead to a segment boundary
- Click on frame strip to jump to selected frame or scene-cut
- Audio bars visualize density over time.
- Color indicates music likelihood:
- Mint: low music probability (speech/dialogue-like)
- Orange: high music probability (theme songs and music-heavy parts)
- Detects scene transitions and displays them in the frame strip to the left and right of the playhead position.
- Jump to previous/next scene-cut with ⇧ + ← / ⇧ + →.
- Detects recap segments based on local SRT/ASS subtitle files or OpenSubtitles.
- Displays detected recap segments in the timeline for review and adjustment.
- Matches are based on subtitle timing and content analysis.
- Subtitles are compared from the current episode to the previous one.
| Action | Shortcut |
|---|---|
| Intro start / end / no-intro | I / ⇧ + I / ⌥ + I |
| Recap start / end / no-recap | R / ⇧ + R / ⌥ + R |
| Credits start / end / no-credits | C / ⇧ + C / ⌥ + C |
| Preview start / end / no-preview | P / ⇧ + P / ⌥ + P |
| Move nearest boundary to playhead | , |
| Action | Shortcut |
|---|---|
| Next Intro start / end | ⌘ + I / ⌘ + ⇧ + I |
| Next Recap start / end | ⌘ + R / ⌘ + ⇧ + R |
| Next Credits start / end | ⌘ + C / ⌘ + ⇧ + C |
| Next Preview start / end | ⌘ + P / ⌘ + ⇧ + P |
| Previous / next scene transition | ⇧ + ← / ⇧ + → |
| Open next episode/file | ⌘ + ⇧ + N |
| Action | Shortcut |
|---|---|
| Nudge nearest boundary by 1 frame | ⌘ + ← / ⌘ + → |
| Nudge nearest boundary by 1 second | ⌥ + ← / ⌥ + → |
| Action | Shortcut |
|---|---|
| Undo | ⌘ + Z |
| Redo | ⌘ + ⇧ + Z |
- macOS 15.0+
- Xcode 16.0+
- Swift 6.0+
- Clone the repository and open the project.
git clone https://github.com/fetchbot/introstamp.git
cd IntroStamp
open IntroStamp.xcodeproj- Select the
IntroStampscheme. - Run with
⌘R.
The app uses four APIs/keys:
- TheIntroDB API key (Bearer): optional authenticated fetch behavior, upload support for movie+tv and all segment types.
- IntroDB API key (
X-API-Key): optional fetch/upload support for TV episodes (imdb_id+ season + episode), segments intro/recap/outro. - TMDB API key: used for filename-based auto lookup and manual search.
- OpenSubtitles API key: used for online subtitle-based recap detection (optional when working only with local subtitle files).
Set any available keys in the sidebar API section and save them to Keychain.
Backend selection:
- Fetch: queries TheIntroDB and IntroDB in parallel when compatible. Timeline display is segment-wise: TheIntroDB is primary, IntroDB is fallback when a segment is missing.
- Upload: sends requests in parallel to all compatible services. If both services are configured, both are used.
- IntroDB mapping: app segment
creditsmaps to IntroDBoutro(nopreview).
xcodebuild -project IntroStamp.xcodeproj -scheme IntroStamp -destination 'platform=macOS' buildxcodebuild -project IntroStamp.xcodeproj -scheme IntroStamp -destination 'platform=macOS' testRegenerate scenario tests from the CSV source:
swift scripts/generate_segment_tests.swift./scripts/release_local_no_dev_program.shArtifacts are written to build/local-release. This build is ad-hoc signed and not notarized.
Local release script outputs:
- IntroStamp-local-arm64.zip (+ .sha256)
- IntroStamp-local-x86_64.zip (+ .sha256)
- IntroStamp-local-universal.zip (+ .sha256)
MIT License. See LICENSE.
- TheIntroDB and IntroDB for segment data APIs.
- TMDB for metadata and posters.
- OpenSubtitles for subtitle-based recap detection.

