# `Laev.Skip`
[🔗](https://github.com/alexdont/laev/blob/main/lib/laev/skip.ex#L1)

Intro/credits skipping with a Netflix-style on-screen prompt.

Detection is two-layered, through one injected mpv Lua script:

  1. AniSkip windows (anime) — community-submitted OP/ED timestamps by
     MyAnimeList id + episode, resolved via the Kitsu mapping we already
     use. Fetched async alongside subtitles; cached 30 days.
  2. Chapter names — releases authored with "Opening"/"Intro"/"Recap"/
     "Credits"/… chapters (only chapters ≤ 4 minutes, so a mislabeled
     real chapter never gets eaten).

What happens on detection is the LAEV_SKIP mode:

  * "ask" (default) — a "Skip opening · hold TAB" button appears briefly while
    the intro plays; Tab jumps past it, ignoring it watches it. Openings
    are part of the show — skipping is the user's call.
  * "auto" — jump immediately, with a brief OSD note.
  * "off" — no script at all.

Outside a detected intro, Tab is a +85s seek — the universal "no data,
just jump the intro" key. No fingerprint detection on purpose: it needs
several episodes' audio downloaded and analyzed before playback, which
fights laev's instant-start, low-resource design.

# `script_args`

mpv `--script` + mode arguments (instant, no network). [] when disabled.

# `stinger_args`

Post-credit stinger handling for movies: prints a terminal alert and, when
the skip script runs, passes the flags so the credits-skip button warns
and an end-of-runtime OSD reminder fires. Networked (one TMDB call) —
call from the async pre-launch task. [] for TV / no stingers / failure.

# `stinger_label`

"during-credits and after-credits scenes" — human label for stinger parts.

# `stinger_parts`

Which stingers a movie has: [] | ["during"] | ["after"] | ["during","after"].
Disk-cached, so the pre-launch task warms it and the Now Playing screen
reads it instantly.

# `window_args`

AniSkip OP/ED windows for an anime episode as a `--script-opts-append`
argument. Networked (Kitsu → MAL id → AniSkip) — call it from the async
pre-launch task, not the launch path. Best-effort: [] on any failure.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
