|
| 1 | +# 🧾 Annotation |
| 2 | +When exporting your dataset—or just annotations, a structured JSON file is generated. |
| 3 | + |
| 4 | +It contains metadata for all files matching the current filters and their annotations—without media. |
| 5 | + |
| 6 | +## 🧬 Example Structure |
| 7 | + |
| 8 | +```json |
| 9 | +[ |
| 10 | + { |
| 11 | + "id": "6848a6709aeaf5eb62cf01a8", |
| 12 | + "related_duplicates": 0, |
| 13 | + "attributes": [ |
| 14 | + { |
| 15 | + "uid": "f35846ca-0c7e-4120-8225-9204b054bb1a", |
| 16 | + "attributes": [ |
| 17 | + [16, 0, "type_1", ""], |
| 18 | + [18, 0, "subtype_2", ""], |
| 19 | + [20, 1, "r", ""] |
| 20 | + ] |
| 21 | + } |
| 22 | + ], |
| 23 | + "author_name": "Curator", |
| 24 | + "validator_name": "Curator", |
| 25 | + "file_name": "6788191feac1f1a81ab2fadd.webp", |
| 26 | + "file_type": "image", |
| 27 | + "status": "a", |
| 28 | + "upload_date": "2025-06-10 21:41", |
| 29 | + "update_date": "2025-06-10 21:41", |
| 30 | + "rebound_project": null, |
| 31 | + "rebound": null |
| 32 | + } |
| 33 | +] |
| 34 | +``` |
| 35 | + |
| 36 | +Where: |
| 37 | +- **id** - is generated file id by which the file could be found in the system |
| 38 | +- **related_duplicates** - number of duplicates associated to this file |
| 39 | +- **attributes** - list of attribute (label) groups with annotated data |
| 40 | +- **author_name** - the username of user who uploaded this file |
| 41 | +- **validator_name** - the username of user who validated this file |
| 42 | +- **file_name** - original file name |
| 43 | +- **file_type** - media type (image/video) |
| 44 | +- **status** - validation status, `a - accepted`, `d - declined`, `v - waits for validation` |
| 45 | +- **upload_date** - file upload date |
| 46 | +- **update_date** - file update date |
| 47 | +- **rebound_project** - project / bucket where the file is located in case of file transfer |
| 48 | +- **rebound** - file project / bucket (in terms of storage system) |
| 49 | + |
| 50 | +## Accessing a file |
| 51 | + |
| 52 | +Since the project in **wip** state there are some temprorary solutions. |
| 53 | +We have a situation when we want to move some files to other project. |
| 54 | +Since proper object movement is not implemented yet we could use a trick to just associate |
| 55 | +file project to the new one but since file is stored in original bucket we have to specify it. |
| 56 | + |
| 57 | +Using orm / db model you might encounter **rebound** field as well. |
| 58 | +This one is proper and intentional and used for rebounding file lookup in cases when uploaded file marked as duplicated one. |
| 59 | +Since we use best quality for all the duplicates this best one has related_duplicates count and all the duplicats have this rebound field set with id of "original" file. |
| 60 | + |
| 61 | +So in order to access a file you must follow this: `project_<rebound_project_id | project_id>/<rebound_id | file_id>` object lookup. |
| 62 | + |
| 63 | +When exporting datasets, rebound is resolved internally. Each exported entry is final, and you can access it directly via its id and extension (from file_name). |
0 commit comments