{"id":13619718,"url":"https://github.com/msioen/ai-tagger","last_synced_at":"2025-09-19T18:41:04.350Z","repository":{"id":144174393,"uuid":"597675466","full_name":"msioen/ai-tagger","owner":"msioen","description":"A small mac utility to watch folders and automatically classify image documents.","archived":false,"fork":false,"pushed_at":"2023-03-11T18:39:41.000Z","size":1661,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-19T14:00:08.831Z","etag":null,"topics":["azureml","machine-vision","macos"],"latest_commit_sha":null,"homepage":"","language":"C#","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/msioen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-02-05T09:37:27.000Z","updated_at":"2024-11-30T11:22:55.000Z","dependencies_parsed_at":"2024-01-22T00:30:06.269Z","dependency_job_id":null,"html_url":"https://github.com/msioen/ai-tagger","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/msioen/ai-tagger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msioen%2Fai-tagger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msioen%2Fai-tagger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msioen%2Fai-tagger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msioen%2Fai-tagger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msioen","download_url":"https://codeload.github.com/msioen/ai-tagger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msioen%2Fai-tagger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275984030,"owners_count":25564514,"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-09-19T02:00:09.700Z","response_time":108,"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":["azureml","machine-vision","macos"],"created_at":"2024-08-01T21:00:47.440Z","updated_at":"2025-09-19T18:41:04.321Z","avatar_url":"https://github.com/msioen.png","language":"C#","funding_links":[],"categories":["C# #"],"sub_categories":[],"readme":"# AI Tagger\n\n![Icon](./resources/brain-colored-128.png)\n![Icon](./resources/brain-128.png)\n\nAI Tagger is a macOS utility that can automatically tag images based on AI detected content.\n\n![Demo](demo.gif)\n\n## Get started\n\n### Setup source code and resources\n\n- Ensure the necessary mac bits are installed: `dotnet workload install macos`\n- Ensure to pull in the git submodule: `git submodule update --init --recursive`.\n- Pull down the lfs files: `git -C ml-endpoint/asset/model/donut-base-finetuned-rvlcdip lfs pull`\n- In Azure create a 'Computer vision' resource and update the endpoints and credentials in AITagger/AppDelegate.cs.\n- Ensure you have the [Azure Machine Learning CLI installed](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-configure-cli?tabs=public)\n\n### Setup Azure Machine Learning endpoint - local\n\nNote: the docker image needs enough resources to work with. Without enough CPU/RAM the internal process fails with a sigkill and you would get an internal server error back from the scoring endpoint. For my local tests I gave my docker engine 24GB memory and 10 CPU cores.\n\n```bash\n# login to Azure + set subscription (not necessary every time)\n$ az login\n$ az account set --subscription $SUBSCRIPTION\n$ az configure --defaults workspace=\u003cAzure Machine Learning workspace name\u003e group=\u003cresource group\u003e\n\n# ensure you're in the correct folder\n$ cd ml-endpoint\n\n# build the docker image which contains our model execution\n$ docker build -f ./base/minimal-single-model-conda-in-dockerfile.dockerfile -t azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1 ./asset\n$ docker tag azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1 $REGISTRY/azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1\n\n# create/deploy a local endpoint linked to your docker image\n$ az ml online-deployment create --local --endpoint-name donut-rvlcdip -f ./base/minimal-single-model-conda-in-dockerfile-deployment.yml\n\n# get endpoint info to find out on what url/port it is running\n$ az ml online-endpoint show -n donut-rvlcdip --local\n\n# validate endpoint - ensure to use endpoint from previous call\n$ curl http://localhost:55001/score -F \"image=@test.png\" -v\n```\n\n### Setup Azure Machine Learning endpoint - cloud\n\nCreate following Azure resources: an Azure Machine Learning workspace and a container registry.\n\n```bash\n$ cd ml-endpoint\n\n# build the docker image which contains our model execution (same as local)\n$ docker build -f ./base/minimal-single-model-conda-in-dockerfile.dockerfile -t azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1 ./asset\n\n# ensure to login to your docker registery\n$ az acr login --name $REGISTRY\n\n# push the docker image to the registry\n$ docker tag azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1 $REGISTRY/azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1\n$ docker push $REGISTRY/azure-ai-experiments/azure-donut-base-finetuned-rvlcdip:1\n\n# create an online endpoint\n$ az ml online-endpoint create -f ./base/minimal-single-model-endpoint.yml\n\n# deploy the online endpoint\n$ az ml online-deployment create --endpoint-name donut-rvlcdip -f ./base/minimal-single-model-conda-in-dockerfile-deployment.yml --all-traffic\n\n# get endpoint info to find out on what url/port it is running\n$ az ml online-endpoint show -n donut-rvlcdip --local\n\n# get the credentials neccessary to communicate with the endpoint\n$ KEY=$(az ml online-endpoint get-credentials -n donut-rvlcdip --query primaryKey -o tsv)\n\n# get endpoint info to find out on what url/port it is running\n$ az ml online-endpoint show -n donut-rvlcdip\n\n# validate endpoint - ensure to use endpoint from previous call\n$ curl https://$ENDPOINT/score  -H \"Authorization: Bearer $KEY\" -F \"image=@test.png\" -v\n```\n\n## Release notes\n\nv1.0 (Feb 12, 2023)\n\n- mac utility which listens to file changes\n- no UI for settings - to be managed in code\n- on new files: attempt to gain info about the image through AI\n- AI Cognitive Services integration (vision client)\n- AI Machine Learning integration (online endpoint with donut model)\n\n## Attributions\n\n- Icons made by [Freepik - Flaticon](https://www.flaticon.com/authors/freepik).\n- [Donut source code](https://github.com/clovaai/donut) \n- [Hugging Face model](https://huggingface.co/naver-clova-ix/donut-base-finetuned-rvlcdip)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsioen%2Fai-tagger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsioen%2Fai-tagger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsioen%2Fai-tagger/lists"}