{"id":30425013,"url":"https://github.com/dhaase-de/dito","last_synced_at":"2025-08-22T11:15:02.619Z","repository":{"id":57418634,"uuid":"346022047","full_name":"dhaase-de/dito","owner":"dhaase-de","description":"Yet another toolbox for the daily work with OpenCV under Python.","archived":false,"fork":false,"pushed_at":"2025-06-13T09:15:36.000Z","size":1062,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-13T09:15:52.591Z","etag":null,"topics":["numpy","opencv","python"],"latest_commit_sha":null,"homepage":"","language":"Python","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/dhaase-de.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-03-09T13:49:53.000Z","updated_at":"2025-06-13T08:43:52.000Z","dependencies_parsed_at":"2024-09-13T23:07:28.162Z","dependency_job_id":"aea4d1d7-1468-4a9d-bc7d-c550e2fed6da","html_url":"https://github.com/dhaase-de/dito","commit_stats":{"total_commits":280,"total_committers":1,"mean_commits":280.0,"dds":0.0,"last_synced_commit":"7312dfb5b482e4b15c9e4a91ee5f1891773eca2c"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/dhaase-de/dito","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhaase-de%2Fdito","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhaase-de%2Fdito/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhaase-de%2Fdito/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhaase-de%2Fdito/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dhaase-de","download_url":"https://codeload.github.com/dhaase-de/dito/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dhaase-de%2Fdito/sbom","scorecard":{"id":339892,"data":{"date":"2025-08-11","repo":{"name":"github.com/dhaase-de/dito","commit":"825b4047a02e30ef7aa68a14a657855baa6e9bb6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"28 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/build-and-publish-docs.yml:17","Warn: no topLevel permission defined: .github/workflows/tests-full.yml:1","Warn: no topLevel permission defined: .github/workflows/tests-subset.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-publish-docs.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/build-and-publish-docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-publish-docs.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/build-and-publish-docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-publish-docs.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/build-and-publish-docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-publish-docs.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/build-and-publish-docs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests-full.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/tests-full.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests-full.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/tests-full.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests-subset.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/tests-subset.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests-subset.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/dhaase-de/dito/tests-subset.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build-and-publish-docs.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/build-and-publish-docs.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/build-and-publish-docs.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/tests-full.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/tests-full.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/tests-full.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/tests-full.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/tests-subset.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/tests-subset.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/tests-subset.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/tests-subset.yml:33","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"41 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: GHSA-267x-w5hx-8hjr","Warn: Project is vulnerable to: GHSA-33h2-69j3-r336","Warn: Project is vulnerable to: GHSA-3448-vrgh-85xr","Warn: Project is vulnerable to: GHSA-5rpc-gwh9-q9fg","Warn: Project is vulnerable to: GHSA-634c-v2xv-ffpg","Warn: Project is vulnerable to: GHSA-6v6p-p97v-g2p7","Warn: Project is vulnerable to: GHSA-83rh-hx5x-q9p5","Warn: Project is vulnerable to: GHSA-8849-5h85-98qw","Warn: Project is vulnerable to: GHSA-89rj-5ggj-3p9p","Warn: Project is vulnerable to: GHSA-8w3x-457r-wg53","Warn: Project is vulnerable to: GHSA-9g8h-pjm4-q92p","Warn: Project is vulnerable to: GHSA-c7gp-2pch-qh2v","Warn: Project is vulnerable to: GHSA-cvhw-2593-5j2q","Warn: Project is vulnerable to: GHSA-fffj-9qwg-qmh5","Warn: Project is vulnerable to: GHSA-fm39-cw8h-3p63","Warn: Project is vulnerable to: GHSA-fr58-2xhv-qp3w","Warn: Project is vulnerable to: GHSA-fvq6-392h-6mjj","Warn: Project is vulnerable to: GHSA-fw99-f933-rgh8","Warn: Project is vulnerable to: GHSA-hxfw-jm98-v4mq","Warn: Project is vulnerable to: GHSA-jcxv-2j3h-mg59","Warn: Project is vulnerable to: GHSA-jggw-2q6g-c3m6","Warn: Project is vulnerable to: GHSA-m43c-649m-pm48","Warn: Project is vulnerable to: GHSA-m6vm-8g8v-xfjh","Warn: Project is vulnerable to: GHSA-pqjj-6f5q-gqph","Warn: Project is vulnerable to: GHSA-q799-q27x-vp7w","Warn: Project is vulnerable to: GHSA-qr4w-53vh-m672","Warn: Project is vulnerable to: GHSA-rqxg-xvcq-3v2f","Warn: Project is vulnerable to: GHSA-vc29-rj92-gc7j","Warn: Project is vulnerable to: GHSA-w96g-3p64-63wr","Warn: Project is vulnerable to: GHSA-wq8f-wvqp-xvvm","Warn: Project is vulnerable to: GHSA-x3rm-644h-67m8","Warn: Project is vulnerable to: PYSEC-2023-183","Warn: Project is vulnerable to: GHSA-5vgj-ggm4-fg62","Warn: Project is vulnerable to: PYSEC-2020-107 / GHSA-jjw5-xxj6-pcv5","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: PYSEC-2020-108"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T05:32:41.878Z","repository_id":57418634,"created_at":"2025-08-18T05:32:41.879Z","updated_at":"2025-08-18T05:32:41.879Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271539817,"owners_count":24777495,"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-08-21T02:00:08.990Z","response_time":74,"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":["numpy","opencv","python"],"created_at":"2025-08-22T11:14:57.071Z","updated_at":"2025-08-22T11:14:57.684Z","avatar_url":"https://github.com/dhaase-de.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Python Package `dito`\n=====================\n\n`dito` is yet another toolbox for the daily work with [OpenCV](https://opencv.org/) under Python.\n\nIt provides convenience wrappers for frequently used image-related functionalities in OpenCV and NumPy, as well as additional functionality built on top of them.\n\n\nStatus\n------\n\n[![PyPI Version](https://img.shields.io/pypi/v/dito.svg)](https://pypi.python.org/pypi/dito/#files)\n[![GitHub last commit](https://img.shields.io/github/last-commit/dhaase-de/dito)](https://github.com/dhaase-de/dito/commits/main)\n[![Tests (subset)](https://github.com/dhaase-de/dito/actions/workflows/tests-subset.yml/badge.svg)](https://github.com/dhaase-de/dito/actions/workflows/tests-subset.yml)\n[![Tests (full)](https://github.com/dhaase-de/dito/actions/workflows/tests-full.yml/badge.svg)](https://github.com/dhaase-de/dito/actions/workflows/tests-full.yml)\n[![PyPI Python Versions](https://img.shields.io/pypi/pyversions/dito.svg)](https://pypi.python.org/pypi/dito/)\n[![License](https://img.shields.io/github/license/dhaase-de/dito.svg)](LICENSE.txt)\n\n\nDocumentation\n-------------\n\nAPI documentation is available online at [https://dhaase-de.github.io/dito/](https://dhaase-de.github.io/dito/).\n\nTo build the documentation locally (into the subdir `docs/`), run\n\n    pip install -r requirements_build.txt\n    ./scripts/build_docs.sh\n\n\nRequirements\n------------\n\n* [Python 3](https://www.python.org/)\n* [NumPy](https://numpy.org/)\n* [OpenCV](https://opencv.org/)\n\nSee `requirements.txt` for version details.\n\n\nInstallation\n------------\n\nFor production:\n* either install via `pip install --upgrade dito`, **or**\n* [download wheel from PyPI](https://pypi.org/project/dito/#files) and install it via `pip install dito-x.y.z-py3-none-any.whl`\n\nFor development:\n1. clone this repository via `git clone https://github.com/dhaase-de/dito.git`, **and**\n2. run `scripts/build_install_dev.sh` (which is equivalent to `python3 setup.py develop --user`)\n\n\nTests\n-----\n\nUse `scripts/run_tests.sh` to run all unit tests.\nThis is equivalent to `python3 -m dito.tests --verbose`.\n\n\nChangelog\n---------\n\n### v2.13.0 (2025-06-13) - QoL Update III ###\n* added shape-related functions `parse_shape` and `check_shape`\n* added processing functions for non-maximum suppression (`nms` and `nms_iter`)\n* added convenience functions `warp_affine`, `argmin`, `argmax`, `draw_rectangle`, and `showr`\n* added more flexibility for `save` and `load` via optional argument `np_kwargs` (and also `imwrite_params` for `save`)\n* extended `PaddedImageIndexer` to allow an ellipsis (`...`) and step sizes \u003e 1 and fixed the all-out-of-bounds case\n* add function `fig_to_image` to turn a Matplotlib figure into a NumPy image\n\n### v2.12.0 (2024-04-09) - CZI support ###\n* added support to read and write CZI image files (as a wrapper for the library `pylibCZIrw`)\n\n### v2.11.1 (2023-11-28) - Bugfixes ###\n* fixed (in the wrapper functions `save` and `load`) OpenCV silently failing when reading/writing images with non-ASCII filenames under Windows  \n* fixed `gamma` removing the third image axis if it was of size one\n\n### v2.11.0 (2023-06-08) - Hash Update ###\n* added hash functions `hash_image`, `hash_image_any_row_order`, `hash_file`, etc.\n* minor improvements and fixes\n\n### v2.10.0 (2023-05-12) - Documentation Update ###\n* added documentation framework based on [pdoc](https://pdoc.dev/)\n* added/revised docstrings for all objects\n* minor improvements and fixes\n\n### v2.9.0 (2023-04-19) - QoL Update II ###\n* added convenience image difference functions `clipped_diff`, `abs_diff`, `shifted_diff`\n* added convenience constant color overlay function `overlay_constant`\n* added support for `pathlib` filenames\n* added Qt6 image conversion\n* improved `pinfo` (minimal mode, wrapper script change, bugfix)\n* fixed NumPy-related issues\n\n### v2.8.0 (2022-04-05) - PCA Update ###\n* added PCA and NMF-based texture models\n* added load/save support for the `.npz` format\n* added `split_channels`\n\n### v2.7.0 (2022-02-16) - Misc Update ###\n* added clahe wrapper\n* added argument `keep_color_dimension` to `as_gray`\n* fixed `stack` not working for float64 images\n* started refactoring some old tests\n\n### v2.6.0 (2021-12-19) - Data Update ###\n* added test image generator\n* added USC-SIPI test image 4.1.07 (jelly beans)\n* minor improvements and fixes\n\n### v2.5.0 (2021-10-21) - QoL Update ###\n* added funtion `draw_symbol` with support for various symbols\n* added ColorBrewer colormaps\n* added `mp_starmap` as an easy-to-use wrapper for parallel processing tasks\n* added `Slider` class for easy-to-use OpenCV trackbar abstractions (namely `ChoiceSlider`, `BoolSlider`, `IntegerSlider`, and `FloatSlider`)\n* added aliases for morphological operations and helper functions (`dilate`, `erode`, `tophat`, `morpho_op_kernel`, ...)\n* added commonly needed padding and cropping wrappers (`center_pad_to`, `center_crop_to`, `center_pad_crop_to`)\n* added `PaddedImageIndexer` which provides padded images when indexed beyond the image bounds\n* added `astack` to automatically stack images into an image of a given aspect ratio\n* improved `pinfo` (support for multiple possibly named images, filenames, short/extended infos, wrapper script `dito_pinfo.py`, ...)\n* added `dog` for getting the Difference-of-Gaussian of an image and its interactive version `dog_interactive`\n* added several more helper functions and improvements (e.g., `load_multiple`, `create_colormap`, raise of `dito.QkeyException`, ...)\n\n### v2.4.0 (2021-07-13) - Contour Update ###\n* added support for contour finding and handling (`Contour`, `ContourList`, `ContourFinder`, `VoronoiPartition`)\n* added aliases for color conversion (`convert_color`, `bgr_to_hsv`, `hsv_to_bgr`)\n* added efficient gamma function (`gamma`)\n* added several more helper functions and improvements (`grid`, `gaussian_blur`, `is_(integer|float|bool)_(dtype|image)`, `save_tmp`, ...)\n\n### v2.3.0 (2021-05-26) - Text Update II ###\n* improved text drawing (e.g. margin, padding, border, rotation, alignment, support for ANSI escape sequences, greek alphabet, outline background mode, width shrinking)\n* added some helper functions (which were needed for improved text drawing), e.g. `insert`, `constant_image`, `rotate*`, `dilate`, `pad`\n\n### v2.2.0 (2021-04-09) - Text Update ###\n* added/improved support for other (optional) image showing engines (`IPython`, `matplotlib.pyplot`, `pygame`)\n* added support for bitmap font handling (class `MonospaceBitmapFont`)\n* added bitmap fonts \"Scientifica\", \"Source Code Pro\", \"Tamzen\", and \"Terminus\"\n* changed `text` to use bitmap fonts instead of OpenCV's font handling and improved text drawing functionality (e.g., support for opacity, color, absolute positioning)\n* added many smaller improvements and fixes (e.g., `colorize` working with custom colormaps for OpenCV\u003c3.3.0)\n* added several helper functions (e.g., `as_channels`)\n\n### v2.1.0 (2021-03-14) - IO Update ###\n* added `MultiShow` as extension of `show` which can also interactively re-show or save images\n* added `VideoSaver`and script `dito_images_to_video.py`\n* extended other IO functionality (`CachedImageLoader`, `.npy` support for `save` and `load`, and `encode`)\n* added synthetic image generators (`checkerboard`, `background_checkerboard`, `random_image`)\n* added several helper functions (e.g., `now_str`, `human_bytes`)\n* fixed some minor issues (e.g., handling of empty dirs in `mkdir`)\n\n### v2.0.0 (2021-03-09) - Initial Version ###\n* initial release, based in large parts on [`dh.image`](https://github.com/dhaase-de/dh-python-dh)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhaase-de%2Fdito","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdhaase-de%2Fdito","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdhaase-de%2Fdito/lists"}