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
| Action | What it does |
|---|---|
| Check service status | Check whether trace.moe is answering, how quickly, and how much anime it currently has indexed. |
| Check the search quota | See how many searches are left before spending one. |
| 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. |
| 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. |
| 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. |
| Save a scene preview | Download 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 history
periodtext - 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
- Image
imagetextRequired - 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.
- Anime
animetextRequired - 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 bars
cut_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 results
max_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
- Image
imagetextRequired - 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 bars
cut_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 anime
exclude_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 results
max_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 details
include_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
- Title
titletextRequired - The anime's name, in any of the forms it is known by. Matching is fuzzy, so a close spelling is usually enough.
- Maximum results
max_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 link
preview_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.
- Size
sizetext - How large a preview to fetch.One of:
s(Small (160px)),m(Medium (320px)),l(Large (640px)). Default:l. - Mute the clip
mutetrue/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 name
filenametext - 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"
}