find-scene

Search movie and TV show scenes by dialog, time, or visual description. Download video clips, extract frames, find quotes, identify movies from quotes, and query IMDB data. Use when the user wants to find a specific scene, download a clip, search for a quote in a movie/show, extract a frame, or get movie information via the find-scene API.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "find-scene" with this command: npx skills add uriva/find-scene-skill/uriva-find-scene-skill-find-scene

find-scene API Skill

Search and download movie/TV show scenes by dialog, time, or visual description.

Authentication

Every API request requires a _token field in the JSON body.

{ "_token": "user-api-token", ...other fields }

How to get a token

  1. Go to https://find-scene.com and sign in
  2. In the chat, ask the bot to "generate an API token"
  3. The bot will return a token string — keep it secret
  4. Include it as _token in every API request body

To revoke a token, ask the bot to "revoke my API token".

Base URL

https://api.find-scene.com

All endpoints are POST with Content-Type: application/json, except GET /api/operation/{id}.

Response Format

All successful responses are wrapped in { "result": <structured object> }. Each endpoint returns a typed JSON object (not a plain string). Error responses use { "error": "message" } at the top level (HTTP 4xx/5xx) or { "result": { "error": "message" } } for domain-level errors within a 200 response.

Video Source Hash

An internal find-scene ID for a video file. Obtained from get_best_video_source. This is NOT an IMDB ID or filename. Required for downloads, frame extraction, and high-accuracy text source lookups.

Text Source Hash

An internal find-scene ID for a subtitle/text file. Obtained from get_text_source or get_high_accuracy_text_source. Required for phrase search and subtitle retrieval. NOT a filename or IMDB ID.

Async Operations

download_by_time and extract_frame return an operation ID (not a download URL). You must poll GET /api/operation/{id} until status is completed, then use the url field from the response.

Statuses: in_progress, completed, failed, cancelled

Video Query Object

Many endpoints accept a video query object with these optional fields:

FieldTypeDescription
movieOrTVShowNamestring/nullMovie or TV show name
dubbedstring/nullDubbing language code, e.g. "en", "de", "pt-br"
animatedboolean/nullIs the video animated
blackAndWhiteboolean/nullIs the video black and white
yearnumber/nullYear (for distinguishing remakes)
isSeriesboolean/nullUser explicitly said it's a series
seasonnumber/nullSeason number (series only)
episodenumber/nullEpisode number (series only)

Time Format

All time parameters use HH:MM:SS format, e.g. "00:01:30".

Display Params Object

Used by download_by_time and extract_frame:

FieldTypeDefaultDescription
removeWatermarkbooleanfalsePro users only
gifbooleanfalseOnly if user explicitly asked for GIF
mobilebooleanfalseCrop to mobile format. Only if user asked

Typical Workflows

Workflow 1: Find and download a scene by quote

1. quote_to_movie        -> identify which movie contains the quote
2. get_best_video_source -> get videoHash for that movie
3. get_text_source       -> get textSource hash
4. search_phrase         -> find exact timestamp of the quote
5. download_by_time      -> schedule clip download (returns operation ID)
6. GET /api/operation/id -> poll until completed, get download URL

Workflow 2: Download a scene by time

1. get_best_video_source -> get videoHash
2. download_by_time      -> schedule download with start/end times
3. GET /api/operation/id -> poll until completed

Workflow 3: Search by visual scene description

1. find_by_scene_description -> search by what happens visually
2. get_best_video_source     -> get videoHash for the match
3. download_by_time          -> download the scene
4. GET /api/operation/id     -> poll until completed

Workflow 4: Find which episode contains a quote (TV series)

1. find_episode_by_phrase -> find season/episode for a phrase
2. get_best_video_source  -> get videoHash with season/episode
3. get_text_source        -> get textSource
4. search_phrase          -> get exact timestamp
5. download_by_time       -> download clip
6. GET /api/operation/id  -> poll until completed

Workflow 5: Extract a frame / screenshot

1. get_best_video_source -> get videoHash
2. extract_frame         -> schedule frame extraction (returns operation ID)
3. GET /api/operation/id -> poll until completed, get image URL

API Endpoints Reference

Video Source Tools

POST /api/get_best_video_source

Get the best video source for a movie or TV show.

{
  "_token": "...",
  "query": {
    "movieOrTVShowName": "The Matrix",
    "year": 1999
  },
  "timeoutSeconds": 60
}
  • query (required): Video query object (see above)
  • timeoutSeconds (optional): Max wait time. Default 60. Do not manually convert minutes to seconds.
  • Returns: { "result": { "sources": ["videoHash1", ...], "error": "..." } }sources is always present; error is optional

Text Source Tools

POST /api/get_text_source

Get a text/subtitle source hash by movie details. Less accurate timing than get_high_accuracy_text_source.

{
  "_token": "...",
  "query": { "movieOrTVShowName": "The Matrix" },
  "language": "en",
  "minDuration": 3600
}
  • query (required): Video query object
  • language (optional): Subtitle language, e.g. "en", "pt-br", "de"
  • minDuration (optional): Minimum subtitle file duration in seconds
  • Returns: { "result": { "textSources": ["hash1", ...] } } or { "result": { "error": "..." } }

POST /api/get_high_accuracy_text_source

Get a text source with accurate timing. Requires a videoHash from get_best_video_source.

{
  "_token": "...",
  "query": { "movieOrTVShowName": "The Matrix" },
  "videoHash": "abc123...",
  "language": "en"
}
  • query (required): Video query object
  • videoHash (required): From get_best_video_source
  • language (optional): Subtitle language
  • Returns: { "result": { "textSources": ["hash1", ...] } } or { "result": { "error": "..." } }

Text Search Tools

POST /api/search_phrase

Search for a phrase/quote in a text source's subtitles.

{
  "_token": "...",
  "textSource": "textSourceHash",
  "phraseSearchParams": {
    "phraseStart": "I know kung fu",
    "phraseEnd": "",
    "nSkip": 0,
    "maxOccurrences": 1
  }
}
  • textSource (required): Text source hash
  • phraseSearchParams.phraseStart (required): The phrase to search. Do not include speaker names. For long text, split using phraseEnd.
  • phraseSearchParams.phraseEnd (optional): End of phrase if split
  • phraseSearchParams.nSkip (required): Results to skip (default 0)
  • phraseSearchParams.maxOccurrences (required): Max results (default 1)
  • Returns: { "result": { "occurrences": [{ "time": "HH:MM:SS", "rangeStart": "HH:MM:SS", "rangeEnd": "HH:MM:SS", "srt": "subtitle text" }, ...] } } or { "result": { "error": "..." } }

POST /api/get_srt_entries_around_phrase

Get subtitle entries in a time window around a phrase occurrence.

{
  "_token": "...",
  "textSource": "textSourceHash",
  "phrase": "I know kung fu",
  "limit": 1,
  "skip": 0,
  "secondsBefore": 5,
  "secondsAfter": 5
}

All fields are required.

  • Returns: same as search_phrase{ "result": { "occurrences": [...] } } or { "result": { "error": "..." } }

POST /api/get_srt_entries_by_time_range

Get subtitle entries for a video within a time range.

{
  "_token": "...",
  "videoQuery": { "movieOrTVShowName": "The Matrix" },
  "startTime": "00:30:00",
  "endTime": "00:31:00",
  "subsLanguage": "en"
}
  • videoQuery (required): Video query object
  • startTime, endTime (required): Time range in HH:MM:SS
  • subsLanguage (optional): Subtitle language
  • Returns: { "result": { "srt": "subtitle text" } } or { "result": { "error": "..." } }

Video Download Tools

POST /api/download_by_time

Schedule a video clip download. Returns an operation ID, NOT a URL.

{
  "_token": "...",
  "videoHash": "abc123...",
  "startTime": "00:30:00",
  "endTime": "00:30:15",
  "textSource": "textSourceHash",
  "srtOffset": 0,
  "displayParams": {
    "removeWatermark": false,
    "gif": false,
    "mobile": false
  }
}
  • videoHash (required): From get_best_video_source
  • startTime, endTime (required): Clip bounds in HH:MM:SS
  • displayParams (required): See display params object above
  • textSource (optional): To burn subtitles into the clip
  • srtOffset (optional): Subtitle time correction offset
  • Returns: { "result": { "operationId": "..." } } or { "result": { "error": "..." } } — you MUST poll the operationId

POST /api/extract_frame

Extract a single frame/screenshot from a video. Returns an operation ID.

{
  "_token": "...",
  "videoHash": "abc123...",
  "time": "00:30:05",
  "textSource": "textSourceHash",
  "overrideTextTop": "TOP TEXT",
  "overrideTextBottom": "BOTTOM TEXT",
  "displayParams": {
    "removeWatermark": false,
    "gif": false,
    "mobile": false
  }
}
  • videoHash (required): From get_best_video_source
  • time (required): Frame time in HH:MM:SS
  • textSource (optional): Overlay subtitles on frame
  • overrideTextTop, overrideTextBottom (optional): Custom text overlay (meme mode)
  • displayParams (optional): See display params object
  • Returns: { "result": { "operationId": "..." } } or { "result": { "error": "..." } } — you MUST poll the operationId

POST /api/cancel_operation

Cancel a stuck async operation.

{ "_token": "...", "id": "operation-id" }
  • Returns: { "result": { "cancelled": true, "operationId": "..." } } or { "result": { "cancelled": false, "reason": "..." } }

Async Operation Polling

GET /api/operation/{id}

Poll the status of an async operation. No request body. No auth token needed in query (it was provided when creating the operation).

Response:

{
  "status": "completed",
  "progress": 100,
  "result": "...",
  "url": "https://signed-download-url..."
}

Polling strategy: Wait 2-3 seconds between polls. Typical downloads complete in 10-30 seconds. Give up after ~2 minutes.

Movie Information Tools

POST /api/query_imdb

Get movie/show information from IMDB.

{
  "_token": "...",
  "title": "The Matrix",
  "year": 1999,
  "imdbId": "tt0133093",
  "season": 1,
  "episode": 1
}
  • title (required): Movie/show title
  • All other fields optional
  • Returns: { "result": { "name": "...", "imdb": "tt...", "year": 1999, "season": 1, "episode": 1, ... } } — movie metadata object with available IMDB fields

POST /api/is_string_a_movie_name

Check if a string is a movie/show name.

{ "_token": "...", "string": "The Matrix" }
  • Returns: { "result": { "isMovieName": true } } or { "result": { "isMovieName": false } }

POST /api/quote_to_movie

Identify which movie a quote is from.

{ "_token": "...", "quote": "I know kung fu" }
  • Returns: { "result": { "candidates": ["Movie Name 1", "Movie Name 2", ...] } }

POST /api/popular_quotes_from_title

Get popular quotes from a movie or TV show.

{
  "_token": "...",
  "name": "The Matrix",
  "limit": 10,
  "imdb": "tt0133093"
}
  • name (required): Movie/show name
  • limit (required): Max number of quotes
  • imdb (optional): IMDB ID
  • Returns: { "result": { "quotes": ["quote 1", "quote 2", ...] } }

POST /api/compute_running_time

Get running time of a movie/show.

{ "_token": "...", "imdbId": "tt0133093" }
  • Returns: { "result": { "runtimeSeconds": 8160 } } or { "result": { "runtimeSeconds": null } } if not found

TV Series Tools

POST /api/find_episode_by_phrase

Find which episode of a TV series contains a phrase.

{
  "_token": "...",
  "phrase": "We were on a break",
  "videoQuery": {
    "name": "Friends",
    "season": 3
  },
  "season": 3,
  "limit": 5
}
  • phrase (required): The phrase to search
  • videoQuery (required): Must include name. Can include imdb, season, episode, year, seasonEnd, episodeEnd, dubbed, animated, blackAndWhite
  • season (optional): Limit search to specific season
  • limit (optional): Max results
  • Returns: { "result": { "episodes": [{ "season": 3, "episode": 15, "context": ["surrounding subtitle lines", ...] }, ...] } }

Scene Description Search

POST /api/find_by_scene_description

Search for a scene by visual description (not dialog).

{
  "_token": "...",
  "description": "Neo dodges bullets on a rooftop",
  "video": { "movieOrTVShowName": "The Matrix" },
  "nResults": 3,
  "nSkip": 0,
  "scoreThreshold": 0.4
}
  • description (required): What happens in the scene visually. Do NOT include the movie name here.
  • video (optional): Video query object to narrow search to a specific title
  • nResults (required): Number of results to return
  • nSkip (optional): Skip results (for pagination / "show me another")
  • scoreThreshold (optional): Minimum similarity score 0-1. Use ~0.6 for specific scenes, ~0.3 for vague descriptions.
  • Returns: { "result": { "results": [{ "query": { "movieOrTVShowName": "...", ... }, "time": "HH:MM:SS", "score": 0.85 }, ...], "warning": "..." } } or { "result": { "error": "..." } }

POST /api/request_indexing_for_scene_description

Request that a movie/show be indexed for scene description search. Use when find_by_scene_description returns no results for a known title.

{
  "_token": "...",
  "video": {
    "name": "The Matrix",
    "season": 1,
    "episode": 1
  }
}
  • video.name (required): Movie/show name
  • Other fields optional: imdb, season, episode, year, seasonEnd, episodeEnd, dubbed, animated, blackAndWhite
  • Returns: { "result": { "requested": true } }

Transcription

Account

POST /api/check_quota

Check remaining search credits for the current month.

{ "_token": "..." }
  • Returns: { "result": { "creditsRemaining": 42 } }

Error Handling

  • 400: Invalid parameters (check required fields)
  • 401: Invalid or missing _token
  • 500: Internal server error (retry or report)

Tips

  • Always get the video source hash first before attempting downloads or text source lookups.
  • Use get_high_accuracy_text_source (with videoHash) over get_text_source when you have a video source, for better subtitle timing alignment.
  • The download_by_time and extract_frame results are operation IDs. Never return these to the user as download links. Always poll until you get the actual URL.
  • Keep clip durations reasonable (under 60 seconds) to avoid long processing times.
  • For TV series, use find_episode_by_phrase first to identify the episode before searching within it.
  • The find_by_scene_description endpoint requires the video to have been indexed. If it returns no results, use request_indexing_for_scene_description and try again later.
  • OpenAPI spec is available at https://api.find-scene.com/api/openapi.json for machine-readable schema details.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

openclaw-version-monitor

监控 OpenClaw GitHub 版本更新,获取最新版本发布说明,翻译成中文, 并推送到 Telegram 和 Feishu。用于:(1) 定时检查版本更新 (2) 推送版本更新通知 (3) 生成中文版发布说明

Archived SourceRecently Updated
Coding

ask-claude

Delegate a task to Claude Code CLI and immediately report the result back in chat. Supports persistent sessions with full context memory. Safe execution: no data exfiltration, no external calls, file operations confined to workspace. Use when the user asks to run Claude, delegate a coding task, continue a previous Claude session, or any task benefiting from Claude Code's tools (file editing, code analysis, bash, etc.).

Archived SourceRecently Updated
Coding

ai-dating

This skill enables dating and matchmaking workflows. Use it when a user asks to make friends, find a partner, run matchmaking, or provide dating preferences/profile updates. The skill should execute `dating-cli` commands to complete profile setup, task creation/update, match checking, contact reveal, and review.

Archived SourceRecently Updated
Coding

clawhub-rate-limited-publisher

Queue and publish local skills to ClawHub with a strict 5-per-hour cap using the local clawhub CLI and host scheduler.

Archived SourceRecently Updated