trace.moe

App · Film, TV & Fandom · 6 actions

Identify anime from a screenshot with trace.moe, the anime scene search engine. Give it a frame and it names the show, the episode and the second it appears, with a still and a clip of the scene. Search everything indexed, or search inside one anime when you know the show but not the episode, and look a title up to get its AniList and MyAnimeList ids. Because the service always answers with its closest frames even when none is right, every search says how confident the match is so a workflow can act on a real one and stop at a coincidence. Previews can be saved as files before their links expire, and the remaining search quota can be checked without spending any of it. Works with no API key; adding one from a sponsor account raises the daily limit.

Actions

ActionWhat it does
Check service statusCheck whether trace.moe is answering, how quickly, and how much anime it currently has indexed.
Check the search quotaSee how many searches are left before spending one.
Find a scene in one animeAnswer 'which episode is this from?' when the show is already known: search only inside one anime, named by title or by AniList id.
Find the anime from an imageIdentify which anime a screenshot came from, which episode, and the exact moment it appears, by searching every frame trace.moe has indexed.
Look up an anime by titleTurn a title, a synonym or a rough spelling into one anime: its AniList and MyAnimeList ids, every title variant, and links to both catalogue pages.
Save a scene previewDownload the still or the clip of a matched scene and keep it as a file.

Check service status

Check whether trace.moe is answering, how quickly, and how much anime it currently has indexed. This is the one action that reports a problem as a value instead of failing the step, so a scheduled workflow can tell an outage from an empty answer. Being asked to slow down is reported separately from being down. No API key required.

Inputs

None.

Outputs

index_rowsnumber
How many vectors the search index holds. Normally tracks the frame count.
index_updatedtext
When the index was last rebuilt.
indexed_duration_hoursnumber
How many hours of anime that comes to.
indexed_filesnumber
How many video files are indexed.
indexed_framesnumber
How many frames are searchable across them.
messagetext
What happened, in a sentence.
onlinetrue/false
Whether trace.moe answered with a usable report of its index.
rate_limitedtrue/false
Whether it asked this workspace to slow down.
reachabletrue/false
Whether it answered at all. Reachable but not online means it is refusing rather than down.
response_time_msnumber
How long the answer took, in milliseconds.
status_codenumber
The HTTP status it answered with, or empty when it could not be reached.
using_api_keytrue/false
Whether this connection sent an api key.
Example output
{
  "index_rows": 52314500,
  "index_updated": "2026-08-21T05:00:00.000Z",
  "indexed_duration_hours": 581.3,
  "indexed_files": 18240,
  "indexed_frames": 52314500,
  "message": "trace.moe is up and answering.",
  "online": true,
  "rate_limited": false,
  "reachable": true,
  "response_time_ms": 118.4,
  "status_code": 200,
  "using_api_key": false
}

Check the search quota

See how many searches are left before spending one. Asking costs nothing against the quota, so put it in front of a batch: a run that would stop halfway through can decide not to start. Also reports how many searches may run at once and, optionally, a breakdown of recent usage. No API key required.

Inputs

Usage historyperiodtext
Also return a breakdown of recent requests by outcome. Leave empty for the quota alone.One of: minute (By minute (last hour)), hour (By hour (last 3 days)), day (By day (last 60 days)).

Outputs

concurrencynumber
How many searches may run at once. Sending more than this at a time fails the extras.
historylist
Requests per period, by outcome. Empty unless a period was asked for.
idtext
Who trace.moe counted this against: an email address for a key, or an IP address for a guest.
is_depletedtrue/false
Whether the quota is spent, so the next search would fail.
periodtext
The history period asked for, if any.
prioritynumber
Where searches sit in the queue when trace.moe is busy. 0 is the lowest.
quotanumber
Searches allowed in a rolling 24 hours.
quota_remainingnumber
How many are left.
quota_usednumber
How many have been used.
quota_used_percentnumber
How much of the quota is gone.
using_api_keytrue/false
Whether this connection sent an api key. Without one the quota belongs to the server's IP address and is shared with anything else using it.
Example output
{
  "concurrency": 1,
  "history": [],
  "id": "127.0.0.1",
  "is_depleted": false,
  "period": null,
  "priority": 0,
  "quota": 1000,
  "quota_remaining": 955,
  "quota_used": 45,
  "quota_used_percent": 4.5,
  "using_api_key": false
}

Find a scene in one anime

Answer 'which episode is this from?' when the show is already known: search only inside one anime, named by title or by AniList id. Restricting the search is what makes the similarity meaningful, because the answer is the closest frame in that show rather than the closest frame in every show. A title is looked up first, and the anime that was settled on comes back with the match. No API key required.

Inputs

ImageimagetextRequired
The frame to identify: upload a screenshot, use a file from an earlier step, or paste a public link to one. A video or a GIF works too - trace.moe reads the first frame. 640x360 is plenty; a larger image does not search any better, and anything over 25MB is refused.
AnimeanimetextRequired
Which anime to search inside: a title, a synonym, or an AniList id if you have one. A title is resolved through trace.moe's own anime lookup, so a near miss usually still finds the right show.
Minimum similarity (%)minimum_similaritynumber
Discard matches below this percentage. trace.moe always returns its closest frames however unlike they are, and calls anything under 90% probably wrong, so set this to 90 when a wrong answer is worse than no answer. Leave it at 0 to see everything and judge with 'is_confident' instead.From 0 to 100. Default: 0.
Black barscut_borderstext
What to do about black bars around the picture, which throw the search off. Screenshots taken on a phone or tablet usually have them; a frame grabbed from the video itself usually does not. Searching both ways can cost two searches out of the quota instead of one.One of: 0 (Search the image as it is), 1 (Crop the black bars off first), 2 (Search both ways). Default: 0.
Maximum resultsmax_resultsnumber
How many matches to return, closest first. The extras are usually neighbouring frames of the same scene, which are useful for checking an answer and noise otherwise.From 1 to 50. Default: 5.

Outputs

anilist_idnumber
The best match's AniList id.
anilist_urltext
Link to the best match's AniList page.
animeobject
The anime the search was restricted to, as it was resolved. Check this when a result looks wrong: it says which show was actually searched.
at_timestamptext
Where in the episode the best match is, written out.
best_matchobject
The closest matching scene in full.
episode_labeltext
The best match's episode, written out.
foundtrue/false
Whether any result survived the filters.
frames_searchednumber
How many frames trace.moe compared the image against.
is_confidenttrue/false
Whether the best match reaches 90% similarity. trace.moe always returns its closest frames, so this - not 'found' - is what says the answer is worth acting on.
preview_expires_attext
When the image_url and video_url links in these results stop working, as an ISO 8601 UTC time. Five minutes after the search.
preview_expires_in_secondsnumber
How long those links last, in seconds.
quotanumber
Searches allowed in a rolling 24 hours.
quota_remainingnumber
How many are left.
quota_usednumber
How many of them have been used.
result_countnumber
How many matches were kept.
resultslist
Every match kept, closest first. Often several frames from the same scene.
results_discardednumber
How many matches the similarity and adult filters removed. A large number here with nothing found means the image was matched against, just not well.
similarity_percentnumber
How close the best match is, as a percentage.
titletext
The best match's title, lifted out for convenience.
Example output
{
  "anilist_id": 1,
  "anilist_url": "https://anilist.co/anime/1",
  "anime": {
    "anilist_id": 1,
    "anilist_url": "https://anilist.co/anime/1",
    "is_adult": false,
    "mal_id": 1,
    "mal_url": "https://myanimelist.net/anime/1",
    "match_similarity": 1.0,
    "match_similarity_percent": 100.0,
    "matched_title": "Cowboy Bebop",
    "synonyms": [],
    "title": "Cowboy Bebop",
    "title_english": "Cowboy Bebop",
    "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
    "title_romaji": "Cowboy Bebop"
  },
  "at_timestamp": "12:43",
  "best_match": {
    "anilist_id": 1,
    "anilist_url": "https://anilist.co/anime/1",
    "at_seconds": 763.3,
    "at_timestamp": "12:43",
    "duration_seconds": 1440.9583,
    "duration_timestamp": "24:00",
    "episode": 5,
    "episode_end": 5,
    "episode_label": "Episode 5",
    "episode_start": 5,
    "filename": "Cowboy Bebop - 05 (BD 1280x720 x264 AAC).mkv",
    "from_seconds": 762.4,
    "from_timestamp": "12:42",
    "image_url": "https://api.trace.moe/image/uAWzRPYDwVC2pxTsPyqvLeh",
    "is_adult": false,
    "is_confident": true,
    "mal_id": 1,
    "mal_url": "https://myanimelist.net/anime/1",
    "similarity": 0.972136,
    "similarity_percent": 97.21,
    "synonyms": [],
    "title": "Cowboy Bebop",
    "title_english": "Cowboy Bebop",
    "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
    "title_romaji": "Cowboy Bebop",
    "to_seconds": 764.2,
    "to_timestamp": "12:44",
    "video_url": "https://api.trace.moe/video/uAWzRPYDwVC2pxTsPyqvLeh"
  },
  "episode_label": "Episode 5",
  "found": true,
  "frames_searched": 745506,
  "is_confident": true,
  "preview_expires_at": "2026-09-16T12:05:00Z",
  "preview_expires_in_seconds": 300,
  "quota": 1000,
  "quota_remaining": 955,
  "quota_used": 45,
  "result_count": 1,
  "results": [
    {
      "anilist_id": 1,
      "anilist_url": "https://anilist.co/anime/1",
      "at_seconds": 763.3,
      "at_timestamp": "12:43",
      "duration_seconds": 1440.9583,
      "duration_timestamp": "24:00",
      "episode": 5,
      "episode_end": 5,
      "episode_label": "Episode 5",
      "episode_start": 5,
      "filename": "Cowboy Bebop - 05 (BD 1280x720 x264 AAC).mkv",
      "from_seconds": 762.4,
      "from_timestamp": "12:42",
      "image_url": "https://api.trace.moe/image/uAWzRPYDwVC2pxTsPyqvLeh",
      "is_adult": false,
      "is_confident": true,
      "mal_id": 1,
      "mal_url": "https://myanimelist.net/anime/1",
      "similarity": 0.972136,
      "similarity_percent": 97.21,
      "synonyms": [],
      "title": "Cowboy Bebop",
      "title_english": "Cowboy Bebop",
      "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
      "title_romaji": "Cowboy Bebop",
      "to_seconds": 764.2,
      "to_timestamp": "12:44",
      "video_url": "https://api.trace.moe/video/uAWzRPYDwVC2pxTsPyqvLeh"
    }
  ],
  "results_discarded": 0,
  "similarity_percent": 97.21,
  "title": "Cowboy Bebop"
}

Find the anime from an image

Identify which anime a screenshot came from, which episode, and the exact moment it appears, by searching every frame trace.moe has indexed. Returns the title, the episode, the timestamp and links to a still and a clip of the scene. trace.moe always answers with its closest frames even when none of them is right, so the answer carries 'is_confident' for the 90% mark the service treats as the line between a match and a coincidence. Works without an API key.

Inputs

ImageimagetextRequired
The frame to identify: upload a screenshot, use a file from an earlier step, or paste a public link to one. A video or a GIF works too - trace.moe reads the first frame. 640x360 is plenty; a larger image does not search any better, and anything over 25MB is refused.
Minimum similarity (%)minimum_similaritynumber
Discard matches below this percentage. trace.moe always returns its closest frames however unlike they are, and calls anything under 90% probably wrong, so set this to 90 when a wrong answer is worse than no answer. Leave it at 0 to see everything and judge with 'is_confident' instead.From 0 to 100. Default: 0.
Black barscut_borderstext
What to do about black bars around the picture, which throw the search off. Screenshots taken on a phone or tablet usually have them; a frame grabbed from the video itself usually does not. Searching both ways can cost two searches out of the quota instead of one.One of: 0 (Search the image as it is), 1 (Crop the black bars off first), 2 (Search both ways). Default: 0.
Exclude adult animeexclude_adulttrue/false
Leave out matches AniList marks as adult. The index includes them, so turn this on before posting a result anywhere public.Default: false.
Maximum resultsmax_resultsnumber
How many matches to return, closest first. The extras are usually neighbouring frames of the same scene, which are useful for checking an answer and noise otherwise.From 1 to 50. Default: 5.
Include anime detailsinclude_anime_detailstrue/false
Fetch titles, synonyms and the adult flag from AniList. Turning this off returns ids only and makes each search quicker, which helps when searches are queueing. Excluding adult anime needs these details, so asking for that turns this back on.Default: true.

Outputs

anilist_idnumber
The best match's AniList id.
anilist_urltext
Link to the best match's AniList page.
at_timestamptext
Where in the episode the best match is, written out.
best_matchobject
The closest matching scene in full.
episode_labeltext
The best match's episode, written out.
foundtrue/false
Whether any result survived the filters.
frames_searchednumber
How many frames trace.moe compared the image against.
is_confidenttrue/false
Whether the best match reaches 90% similarity. trace.moe always returns its closest frames, so this - not 'found' - is what says the answer is worth acting on.
preview_expires_attext
When the image_url and video_url links in these results stop working, as an ISO 8601 UTC time. Five minutes after the search.
preview_expires_in_secondsnumber
How long those links last, in seconds.
quotanumber
Searches allowed in a rolling 24 hours.
quota_remainingnumber
How many are left.
quota_usednumber
How many of them have been used.
result_countnumber
How many matches were kept.
resultslist
Every match kept, closest first. Often several frames from the same scene.
results_discardednumber
How many matches the similarity and adult filters removed. A large number here with nothing found means the image was matched against, just not well.
similarity_percentnumber
How close the best match is, as a percentage.
titletext
The best match's title, lifted out for convenience.
Example output
{
  "anilist_id": 1,
  "anilist_url": "https://anilist.co/anime/1",
  "at_timestamp": "12:43",
  "best_match": {
    "anilist_id": 1,
    "anilist_url": "https://anilist.co/anime/1",
    "at_seconds": 763.3,
    "at_timestamp": "12:43",
    "duration_seconds": 1440.9583,
    "duration_timestamp": "24:00",
    "episode": 5,
    "episode_end": 5,
    "episode_label": "Episode 5",
    "episode_start": 5,
    "filename": "Cowboy Bebop - 05 (BD 1280x720 x264 AAC).mkv",
    "from_seconds": 762.4,
    "from_timestamp": "12:42",
    "image_url": "https://api.trace.moe/image/uAWzRPYDwVC2pxTsPyqvLeh",
    "is_adult": false,
    "is_confident": true,
    "mal_id": 1,
    "mal_url": "https://myanimelist.net/anime/1",
    "similarity": 0.972136,
    "similarity_percent": 97.21,
    "synonyms": [],
    "title": "Cowboy Bebop",
    "title_english": "Cowboy Bebop",
    "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
    "title_romaji": "Cowboy Bebop",
    "to_seconds": 764.2,
    "to_timestamp": "12:44",
    "video_url": "https://api.trace.moe/video/uAWzRPYDwVC2pxTsPyqvLeh"
  },
  "episode_label": "Episode 5",
  "found": true,
  "frames_searched": 745506,
  "is_confident": true,
  "preview_expires_at": "2026-09-16T12:05:00Z",
  "preview_expires_in_seconds": 300,
  "quota": 1000,
  "quota_remaining": 955,
  "quota_used": 45,
  "result_count": 1,
  "results": [
    {
      "anilist_id": 1,
      "anilist_url": "https://anilist.co/anime/1",
      "at_seconds": 763.3,
      "at_timestamp": "12:43",
      "duration_seconds": 1440.9583,
      "duration_timestamp": "24:00",
      "episode": 5,
      "episode_end": 5,
      "episode_label": "Episode 5",
      "episode_start": 5,
      "filename": "Cowboy Bebop - 05 (BD 1280x720 x264 AAC).mkv",
      "from_seconds": 762.4,
      "from_timestamp": "12:42",
      "image_url": "https://api.trace.moe/image/uAWzRPYDwVC2pxTsPyqvLeh",
      "is_adult": false,
      "is_confident": true,
      "mal_id": 1,
      "mal_url": "https://myanimelist.net/anime/1",
      "similarity": 0.972136,
      "similarity_percent": 97.21,
      "synonyms": [],
      "title": "Cowboy Bebop",
      "title_english": "Cowboy Bebop",
      "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
      "title_romaji": "Cowboy Bebop",
      "to_seconds": 764.2,
      "to_timestamp": "12:44",
      "video_url": "https://api.trace.moe/video/uAWzRPYDwVC2pxTsPyqvLeh"
    }
  ],
  "results_discarded": 0,
  "similarity_percent": 97.21,
  "title": "Cowboy Bebop"
}

Look up an anime by title

Turn a title, a synonym or a rough spelling into one anime: its AniList and MyAnimeList ids, every title variant, and links to both catalogue pages. Use it to check a name before searching inside that anime, or to get the ids for another step. No API key required.

Inputs

TitletitletextRequired
The anime's name, in any of the forms it is known by. Matching is fuzzy, so a close spelling is usually enough.
Maximum resultsmax_resultsnumber
How many matches to return, closest first. The extras are usually neighbouring frames of the same scene, which are useful for checking an answer and noise otherwise.From 1 to 50. Default: 5.

Outputs

anilist_idnumber
The closest entry's AniList id, ready to hand to Find a scene in one anime.
anilist_urltext
Link to its AniList page.
best_matchobject
The closest entry in full.
countnumber
How many entries were returned.
foundtrue/false
Whether anything matched.
querytext
The title that was looked up.
resultslist
Every entry returned, closest first.
titletext
The closest entry's title.
Example output
{
  "anilist_id": 1,
  "anilist_url": "https://anilist.co/anime/1",
  "best_match": {
    "anilist_id": 1,
    "anilist_url": "https://anilist.co/anime/1",
    "is_adult": false,
    "mal_id": 1,
    "mal_url": "https://myanimelist.net/anime/1",
    "match_similarity": 1.0,
    "match_similarity_percent": 100.0,
    "matched_title": "Cowboy Bebop",
    "synonyms": [],
    "title": "Cowboy Bebop",
    "title_english": "Cowboy Bebop",
    "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
    "title_romaji": "Cowboy Bebop"
  },
  "count": 1,
  "found": true,
  "query": "Cowboy Bebop",
  "results": [
    {
      "anilist_id": 1,
      "anilist_url": "https://anilist.co/anime/1",
      "is_adult": false,
      "mal_id": 1,
      "mal_url": "https://myanimelist.net/anime/1",
      "match_similarity": 1.0,
      "match_similarity_percent": 100.0,
      "matched_title": "Cowboy Bebop",
      "synonyms": [],
      "title": "Cowboy Bebop",
      "title_english": "Cowboy Bebop",
      "title_native": "\u30ab\u30a6\u30dc\u30fc\u30a4\u30d3\u30d0\u30c3\u30d7",
      "title_romaji": "Cowboy Bebop"
    }
  ],
  "title": "Cowboy Bebop"
}

Save a scene preview

Download the still or the clip of a matched scene and keep it as a file. The links a search returns are signed and stop working after five minutes, so a workflow that searches now and posts later posts dead links; this saves the scene while the link is alive. Run it in the same workflow as the search that produced the link. No API key required.

Inputs

Preview linkpreview_urltextRequired
The image_url or video_url from a search result, passed through unchanged. The links are signed, so one that has been edited is rejected.
Sizesizetext
How large a preview to fetch.One of: s (Small (160px)), m (Medium (320px)), l (Large (640px)). Default: l.
Mute the clipmutetrue/false
Drop the sound from a video preview. Ignored when the link is to a still.Default: false.
Shortest clip (seconds)min_durationnumber
The least video to include around the scene, between 0.5 and 2 seconds. Ignored for a still.From 0.5 to 2.
Longest clip (seconds)max_durationnumber
The most video to include, between 0.5 and 5 seconds. Ignored for a still.From 0.5 to 5.0.
File namefilenametext
What to call the saved file. Left empty, it is named after the scene so two saves never collide.

Outputs

byte_sizenumber
How many bytes were downloaded.
documentslist
The saved preview, as one stored file that later steps can attach or post.
kindtext
Whether a still or a clip was saved.
preview_urltext
The link that was fetched.
scene_duration_secondsnumber
How long the clip is.
scene_end_secondsnumber
Where the clip ends in the episode.
scene_start_secondsnumber
Where the clip starts in the episode. Only for a video preview.
sizetext
The size that was fetched.
Example output
{
  "byte_size": 48213,
  "documents": [
    {
      "content_type": "image/jpeg",
      "document_ref": "document:trace-moe-image-uAWzRPYDwVC2pxTsPyqvLeh",
      "filename": "trace-moe-image-uAWzRPYDwVC2pxTsPyqvLeh.jpg",
      "size_bytes": 48213,
      "url": "/actions/core/serve-document/document:trace-moe-image-uAWzRPYDwVC2pxTsPyqvLeh"
    }
  ],
  "kind": "image",
  "preview_url": "https://api.trace.moe/image/uAWzRPYDwVC2pxTsPyqvLeh",
  "scene_duration_seconds": null,
  "scene_end_seconds": null,
  "scene_start_seconds": null,
  "size": "l"
}

On this page