{"id":33233439,"url":"https://github.com/13hannes11/focus_annotator","last_synced_at":"2025-11-21T12:01:16.436Z","repository":{"id":115047328,"uuid":"452244611","full_name":"13hannes11/focus_annotator","owner":"13hannes11","description":"This is a tool to annotate the focus plane of z-stacked images.","archived":false,"fork":false,"pushed_at":"2023-06-13T11:45:09.000Z","size":77,"stargazers_count":25,"open_issues_count":5,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-04-27T14:34:01.601Z","etag":null,"topics":["adwaita","data-annotation","focus-stacking","gtk4","gtk4-rs","libadwaita","microscopy","rust","wholeslide-imaging","z-stack"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/13hannes11.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-01-26T11:11:38.000Z","updated_at":"2024-03-22T16:17:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"1d05b939-43e2-49cb-9a74-4f37a5b44dbb","html_url":"https://github.com/13hannes11/focus_annotator","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/13hannes11/focus_annotator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/13hannes11%2Ffocus_annotator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/13hannes11%2Ffocus_annotator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/13hannes11%2Ffocus_annotator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/13hannes11%2Ffocus_annotator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/13hannes11","download_url":"https://codeload.github.com/13hannes11/focus_annotator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/13hannes11%2Ffocus_annotator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285611835,"owners_count":27201484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-21T02:00:06.175Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adwaita","data-annotation","focus-stacking","gtk4","gtk4-rs","libadwaita","microscopy","rust","wholeslide-imaging","z-stack"],"created_at":"2025-11-16T18:00:26.292Z","updated_at":"2025-11-21T12:01:16.418Z","avatar_url":"https://github.com/13hannes11.png","language":"Rust","readme":"# Focus Annotator\n\nFocus Annotator is a tool for annotation the focal plane of a part of an image. It is a tool I built in rust as part of my master's thesis to make image focus annotations for z-stack images quicker.\n\n![image](https://user-images.githubusercontent.com/9381167/152766149-18ac6194-5586-4434-8a63-70b46496bb37.png)\n\n\n\n## Installation\n\nYou can either download the latest release [here](https://github.com/13hannes11/focus_annotator/releases) or compile from source.\n\n## Compilation Instructions\n\n### Docker\n\nThe tool can be compiled with docker-compose:\n\n* Linux Version `docker-compose up` (compiles to AppImage)\n* Windows Version: `docker-compose -f docker-compose.windows.yml up` (the resulting file is packaged as *package.zip*, dependencies included)\n\n\n### Native\n\nThe prerequisits can be installed as described in the gtk4-rs book:\n\n* [Linux](https://gtk-rs.org/gtk4-rs/stable/latest/book/installation_linux.html)\n* [Windows](https://gtk-rs.org/gtk4-rs/stable/latest/book/installation_windows.html) (untested)\n* [Mac OS](https://gtk-rs.org/gtk4-rs/stable/latest/book/installation_macos.html) (untested)\n\nAfter the prerequisits are installed you can run/build the tool as is usual for rust:\n\n```\ncargo run\n```\n\n## Usage\n\nWhen opening the program open a .json file that describes where to find the images. The file should look as follows.\n\n```json\n[\n    {\n        \"images\": [\n            {\n                \"image_path\": \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                \"neighbours\": [\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\",\n                    \"img/30_753da05d-cd1e-45c5-8593-003323e0bb69_I00243_X013_Y003_Z4648.jpg\"\n                ]\n            }\n        ],\n        \"best_index\": 0\n    }\n    {\n        \"images\": [\n            {\n                \"image_path\": \"img/31/I03987/I03987_X008_Y026_Z5498_0_1200.jpg\",\n                \"neighbours\": [\n                    null,\n                    null,\n                    null,\n                    \"img/31/I03987/I03987_X008_Y026_Z5498_0_1125.jpg\",\n                    null,\n                    \"img/31/I03987/I03987_X008_Y026_Z5498_75_1125.jpg\",\n                    \"img/31/I03987/I03987_X008_Y026_Z5498_75_1200.jpg\",\n                    null\n                ]\n            },\n            {\n                \"image_path\": \"img/31/I03988/I03988_X008_Y026_Z5566_0_1200.jpg\",\n                \"neighbours\": [\n                    null,\n                    null,\n                    null,\n                    \"img/31/I03988/I03988_X008_Y026_Z5566_0_1125.jpg\",\n                    null,\n                    \"img/31/I03988/I03988_X008_Y026_Z5566_75_1125.jpg\",\n                    \"img/31/I03988/I03988_X008_Y026_Z5566_75_1200.jpg\",\n                    null\n                ]\n            },\n            {\n                \"image_path\": \"img/31/I03989/I03989_X008_Y026_Z5703_0_1200.jpg\",\n                \"neighbours\": [\n                    null,\n                    null,\n                    null,\n                    \"img/31/I03989/I03989_X008_Y026_Z5703_0_1125.jpg\",\n                    null,\n                    \"img/31/I03989/I03989_X008_Y026_Z5703_75_1125.jpg\",\n                    \"img/31/I03989/I03989_X008_Y026_Z5703_75_1200.jpg\",\n                    null\n                ],\n            }\n        ],\n        \"best_index\": null\n    }\n]\n```\n\nThe json file contains a list of unamed objets. Each object corresponds to one focus stack. Best index is set to null for non annotated images and is a number corresponding to the image in focus once annotated. The array `image` present in each focus stack contains objects tat represents the individual images.\n\nEach individual image has an `image_path` (mandatory) which is *relative* to the *position* of the *json file*, and **8** (!) `neighbours` (which are allowed to be set to `null`). Neighbours are represented indexed the following way:\n\n```\n0 1 2\n3 - 4\n5 6 7\n```\n\n\nYou are allowed to store additional data in focus stack objects (and image objects) and this should be preserved when using the tool, however, make sure to back up the metadata file before using the tool.\n\n## Keyboard shortcuts\n\nThe tool supports keyboard shortcuts:\n\n- `w` - move up in the focus stack\n- `s` - move down in the focus stack\n- `b` - *back* - go back one image\n- `n` - *next* - skip image\n- `m` - *mark* - mark current image in the z-stack as in focus and go to next image\n\n## Contributing\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n","funding_links":[],"categories":["Graphics"],"sub_categories":["Technical Graphics"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F13hannes11%2Ffocus_annotator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F13hannes11%2Ffocus_annotator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F13hannes11%2Ffocus_annotator/lists"}