Comment "timestamp" from API different from "Frame" in downloaded CSV

I’m pulling comments for an asset using the API with no issues, and all the data seems correct, except for some of the timestamps.

Here’s an example:

JSON Returned from the API:

[

  {

    "id": "04a80657-0d99-4306-94db-457eb0b4c0aa",

    "timestamp": 0,

    "text": "love this 2 pop!",

    "updated_at": "2026-01-21T17:59:03.974753Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:03.960879Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  },

  {

    "id": "354e8442-dc8c-4ec6-9398-63b32eab27a8",

    "timestamp": 60,

    "text": "is the statue too loud?",

    "updated_at": "2026-01-21T17:59:20.683019Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:20.673710Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  },

  {

    "id": "8e096f0b-d439-4eb1-8634-d04926986cb9",

    "timestamp": 118,

    "text": "let's hear the red eye laser SFX more here please",

    "updated_at": "2026-01-21T17:59:37.369473Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:37.359298Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  },

  {

    "id": "36c7fb56-229e-4e01-b47a-242856dcfcc6",

    "timestamp": 86,

    "text": "can the dialog be a little clearer?",

    "updated_at": "2026-01-21T17:59:57.598731Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:57.588141Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  },

  {

    "id": "66df0ff2-a040-480c-9a66-608e124d468d",

    "timestamp": 144,

    "text": "bigger metal hit here",

    "updated_at": "2026-01-21T18:00:14.339622Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T18:00:14.328541Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  },

  {

    "id": "1c04e4fd-5eba-416b-9062-1384b04a892c",

    "timestamp": 167,

    "text": "drop the explosion sound effects a hair",

    "updated_at": "2026-01-21T18:00:25.696204Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T18:00:25.683260Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "completer_id": null,

    "text_edited_at": null

  }

]

CSV of Comments Downloaded from the Asset Page

Workspace,Project,File,File URL,Version,Commenter,Comment ID,Comment,Reply,Commented At,Complete,Annotation,Suggested Text Edits,Frame,Duration,Timecode,Timecode In,Timecode Out,Timecode Source,Timecode Source In,Timecode Source Out,Time In,Time Out,Attachments
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,04a80657-0d99-4306-94db-457eb0b4c0aa,love this 2 pop!,no,2026-01-21 12:59:03 PM,no,no,no,0,0,00:00:00:00,00:00:00:00,00:00:00:00,00:59:58:00,00:59:58:00,00:59:58:00,00:00:00,00:00:00,
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,354e8442-dc8c-4ec6-9398-63b32eab27a8,is the statue too loud?,no,2026-01-21 12:59:20 PM,no,no,no,60,0,00:00:02:12,00:00:02:12,00:00:02:12,01:00:00:12,01:00:00:12,01:00:00:12,00:00:02,00:00:02,
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,36c7fb56-229e-4e01-b47a-242856dcfcc6,can the dialog be a little clearer?,no,2026-01-21 12:59:57 PM,no,no,no,86,0,00:00:03:14,00:00:03:14,00:00:03:14,01:00:01:14,01:00:01:14,01:00:01:14,00:00:03,00:00:03,
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,8e096f0b-d439-4eb1-8634-d04926986cb9,let’s hear the red eye laser SFX more here please,no,2026-01-21 12:59:37 PM,no,no,no,117,0,00:00:04:21,00:00:04:21,00:00:04:21,01:00:02:21,01:00:02:21,01:00:02:21,00:00:04,00:00:04,
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,66df0ff2-a040-480c-9a66-608e124d468d,bigger metal hit here,no,2026-01-21 01:00:14 PM,no,no,no,144,0,00:00:06:00,00:00:06:00,00:00:06:00,01:00:04:00,01:00:04:00,01:00:04:00,00:00:06,00:00:06,
Heard City,HC-01672_GEICO_GECKO_HOME,FANDUEL_06_012126 Web Mix.mp4, Login - Frame.io Mangiamele,1c04e4fd-5eba-416b-9062-1384b04a892c,drop the explosion sound effects a hair,no,2026-01-21 01:00:25 PM,no,no,no,166,0,00:00:06:22,00:00:06:22,00:00:06:22,01:00:04:22,01:00:04:22,01:00:04:22,00:00:06,00:00:06,

2 of the comments have inconsistent frame numbers. Interestingly, when I return the comments as timecode from the API, the values match the “Timecode Source” values.

Here’s that JSON as well:

[

  {

    "id": "04a80657-0d99-4306-94db-457eb0b4c0aa",

    "timestamp": "00:59:58:00",

    "text": "love this 2 pop!",

    "updated_at": "2026-01-21T17:59:03.974753Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:03.960879Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": null

  },

  {

    "id": "354e8442-dc8c-4ec6-9398-63b32eab27a8",

    "timestamp": "01:00:00:12",

    "text": "is the statue too loud?",

    "updated_at": "2026-01-21T17:59:20.683019Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:20.673710Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": null

  },

  {

    "id": "8e096f0b-d439-4eb1-8634-d04926986cb9",

    "timestamp": "01:00:02:21",

    "text": "let's hear the red eye laser SFX more here please",

    "updated_at": "2026-01-21T22:37:25.932023Z",

    "annotation": null,

    "page": null,

    "completed_at": "2026-01-21T22:37:25.922865Z",

    "created_at": "2026-01-21T17:59:37.359298Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": "53101c87-f76f-4aa2-bc26-aa30c804c1ba"

  },

  {

    "id": "36c7fb56-229e-4e01-b47a-242856dcfcc6",

    "timestamp": "01:00:01:14",

    "text": "can the dialog be a little clearer?",

    "updated_at": "2026-01-21T17:59:57.598731Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T17:59:57.588141Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": null

  },

  {

    "id": "66df0ff2-a040-480c-9a66-608e124d468d",

    "timestamp": "01:00:04:00",

    "text": "bigger metal hit here",

    "updated_at": "2026-01-21T18:00:14.339622Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T18:00:14.328541Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": null

  },

  {

    "id": "1c04e4fd-5eba-416b-9062-1384b04a892c",

    "timestamp": "01:00:04:22",

    "text": "drop the explosion sound effects a hair",

    "updated_at": "2026-01-21T18:00:25.696204Z",

    "annotation": null,

    "page": null,

    "completed_at": null,

    "created_at": "2026-01-21T18:00:25.683260Z",

    "file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",

    "text_edited_at": null,

    "completer_id": null

  }

]

any idea what’s going on there? I could use the timecode values instead but it’s a bit of a head scratcher.

hi @hc-evan which 2 comments have the inconsistent frame numbers?

The last comment has a frame number of 166, and 167 from the API,
1c04e4fd-5eba-416b-9062-1384b04a892c,drop the explosion sound effects a hair,no,2026-01-21 01:00:25 PM,no,no,no,166,0,00:00:06:22,00:00:06:22,00:00:06:22,01:00:04:22,01:00:04:22,01:00:04:22,00:00:06,00:00:06,

{
"id": "1c04e4fd-5eba-416b-9062-1384b04a892c",
"timestamp": 167,
"text": "drop the explosion sound effects a hair",
"updated_at": "2026-01-21T18:00:25.696204Z",
"annotation": null,
"page": null,
"completed_at": null,
"created_at": "2026-01-21T18:00:25.683260Z",
"file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",
"completer_id": null,
"text_edited_at": null
}

And this one: frame 117 and 118 respectively:

8e096f0b-d439-4eb1-8634-d04926986cb9,let’s hear the red eye laser SFX more here please,no,2026-01-21 12:59:37 PM,no,no,no,117,0,00:00:04:21,00:00:04:21,00:00:04:21,01:00:02:21,01:00:02:21,01:00:02:21,00:00:04,00:00:04,

{
"id": "8e096f0b-d439-4eb1-8634-d04926986cb9",
"timestamp": 118,
"text": "let's hear the red eye laser SFX more here please",
"updated_at": "2026-01-21T17:59:37.369473Z",
"annotation": null,
"page": null,
"completed_at": null,
"created_at": "2026-01-21T17:59:37.359298Z",
"file_id": "b4dfcd3c-9f58-4749-9844-19f84619f0af",
"completer_id": null,
"text_edited_at": null
}

Thanks for the info, I’ll pass along to the dev team. Seems to be consistently off by 1 frame correct?

Not all the comments are off, but i haven’t seen one off by more than 1 frame.

Got it. I asked our devs and they responded with:

“yes, ultimately the front end player and backend have to independently calculate the frame position based on the DB timestamp_microseconds value. I did a bunch of testing to minimize these off by 1 errors, but the truth is that the rounding errors from two different systems that handle numbers (as floats or decimals etc) will cause this kind of issue.”

1 Like

Appreciate the clarification. thank you