JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"computer-vision",
"computer-vision-tools",
"cv",
"labeling",
"data-labeling",
"object-detection",
"object-recognition",
"bboxes",
"deep-learning",
"image-annotation",
"annotations",
"annotation",
"image-labeling",
"image-labeling-tool",
"bounding-boxes",
"bounding-box",
"boundingbox"
],
"is_fork": false,
"size_kb": 25353,
"has_wiki": false,
"homepage": "https://bbox-visualizer.readthedocs.io",
"languages": {
"Python": 51092,
"Makefile": 1833
},
"pushed_at": "2026-07-17T19:55:10Z",
"created_at": "2020-06-22T06:16:10Z",
"owner_type": "User",
"updated_at": "2026-07-21T07:39:42Z",
"description": "Make drawing and labeling bounding boxes a piece of cake",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": "https://shoumikchow.com",
"name": "Shoumik Chowdhury",
"type": "User",
"login": "shoumikchow",
"company": "@andium ",
"location": "NYC",
"followers": 46,
"avatar_url": "https://avatars.githubusercontent.com/u/10058982?v=4",
"created_at": "2014-12-03T09:36:55Z",
"is_verified": null,
"public_repos": 20,
"account_age_days": 4248
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.0.1",
"kind": "patch",
"published_at": "2026-07-17T19:55:10Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-07-17T19:29:39Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-01-29T07:01:13Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2025-06-02T01:55:44Z"
},
{
"tag": "0.2.1",
"kind": "patch",
"published_at": "2025-04-29T05:51:42Z"
},
{
"tag": "0.2.0",
"kind": "minor",
"published_at": "2025-03-03T07:49:47Z"
},
{
"tag": "0.1.0",
"kind": "minor",
"published_at": "2020-09-27T06:27:12Z"
}
],
"recent_commits": [
{
"oid": "180edea0b2851dec985c3aa952809d4f6ecafc63",
"body": "Mark package as Production/Stable for 1.0",
"is_bot": false,
"headline": "Merge pull request #80 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:53:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22ea083372580ab15cca1005e2c954625cbd931f",
"body": "The 4 - Beta classifier predates the stable release.",
"is_bot": false,
"headline": "Mark package as Production/Stable for 1.0",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:51:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "687f161457bf54a5e7f5a02118546f35d042ab85",
"body": "Dev",
"is_bot": false,
"headline": "Merge pull request #79 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:27:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "293b7f47fbe85a1f295ec84e642066f69fe5fc38",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' of github.com:shoumikchow/bbox-visualizer into dev",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:24:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44270d42aedbff5f81151610ff8ecf7a6ce75cd2",
"body": "Addresses Copilot's review comment on #78: descent is negative when all\nink sits above the baseline (e.g. \"-\"). The geometry is unaffected\nsince callers only use ascent + descent, which is always the ink span.",
"is_bot": false,
"headline": "Clarify that _get_ink_metrics descent can be negative",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:22:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ee3e78df1705263eace25f4ab68fcc41877ebd3",
"body": "Dev",
"is_bot": false,
"headline": "Merge pull request #78 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:12:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "812ab88519d1ad9ab980cd32e9dab2180679d4ee",
"body": "The cover was rendered per object (box, label, box, label, ...), so a\nlater box stroke could cross an earlier label. Draw all boxes first,\nthen all labels.",
"is_bot": false,
"headline": "Redraw cover with labels above all boxes",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:08:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "41b6c371d1dc426c925ca372954f7c1bd5aad6ce",
"body": "The gallery images dated from 2020 and showed the old label rendering\n(bottom-heavy backgrounds, stroke spilling outside the box, stubby flag\npoles). Regenerate all of them from the current code: the eight style\nimages come straight from the example scripts' output, and the cover is\nrebuilt from cover_source.json with the original per-class colors\nsampled from the old cover.",
"is_bot": false,
"headline": "Regenerate README gallery images; list label_stress example",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:05:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d00f0648befce7cb83895df6a5dc9d23a6805b7a",
"body": null,
"is_bot": false,
"headline": "style: format and lint code with Ruff",
"author_name": "shoumikchow",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:05:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78ed532826f5256fbfccf6004eee0a07dcb3d434",
"body": "Grid of awkward label strings (caps, descenders, punctuation, long\nwords) rendered through every label style plus a font-size sweep, for\neyeballing label layout changes.",
"is_bot": false,
"headline": "Add label stress-test example",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T19:00:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a0ac09d0cfed0eb2162dad790c3bfb5f90a0d90",
"body": "The pole rose height/4 above the box, which looks stubby on small boxes.\nFloor it at T_LINE_LENGTH (50px, matching the T-label stem) so small\nboxes get a visible pole; large boxes keep the proportional rise.",
"is_bot": false,
"headline": "Give the flag pole a minimum rise above the box",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T18:58:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d9fa33286fed716d0ddea82704c63bdb6532e64b",
"body": "…e flag\n\ncv2.getTextSize reports the font's nominal ascent, which overshoots the\ntallest glyphs by ~5px and lowercase-only text by ~11px, making label\nbackgrounds bottom-heavy. Replace _get_text_size with _get_ink_metrics,\nwhich renders the text once on a scratch canvas (cached) and measures the\nact\n[…]\n ascent/descent, so backgrounds get even padding on all sides.\n\nAlso start the flag pole 2px below the flag top: cv2 caps the 3px stroke\npast its endpoint, which poked a nub above the flag background.",
"is_bot": false,
"headline": "Size label backgrounds from real ink metrics; keep flag pole under th…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-17T17:44:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "353fc58f56a5db2b1f23e98e4cf2c35e0cbcef3f",
"body": "Harden CI security: fix tag injection, pin actions to SHAs, bump open…",
"is_bot": false,
"headline": "Merge pull request #76 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-16T17:41:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b4c67381487a2a7154b3b4717e34d0d4a49c9f34",
"body": "…cv floor\n\n - publish.yml: pass tag name via env instead of shell interpolation\n - Pin all GitHub Actions to commit SHAs (with version comments)\n - ruff.yml: scope write permissions to the autofix job\n - pyproject.toml: raise opencv-python floor to >=4.8.1.78 (CVE-2023-4863, libwebp heap overflow in bundled builds)",
"is_bot": false,
"headline": "Harden CI security: fix tag injection, pin actions to SHAs, bump open…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-16T17:36:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d83222d29df04f30c719dd8ae53c06b5ce0475a",
"body": "Update docs for v1.0.0 changes",
"is_bot": false,
"headline": "Merge pull request #75 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T17:45:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5acb2618b6416011a7c4932adbd92fcf3df6f33b",
"body": "- Document COCO/YOLO bbox_format support in usage.md and update the\n troubleshooting section that claimed VOC was the only format\n- List the runnable example scripts in index.md\n- State the Python 3.10 floor and replace the dead git:// clone URL\n with HTTPS/SSH in installation.md",
"is_bot": false,
"headline": "Update docs for v1.0.0: bbox formats, examples, install fixes",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T17:43:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ec3b14f605ac3044e70edfde894a23c3201bf3d",
"body": "Restore ValueError for None inputs in multi-object functions",
"is_bot": false,
"headline": "Merge pull request #74 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T17:31:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "010fbb6fa468a742133b8c43b33c0f717ff8f806",
"body": "The len()-based empty checks from #73 raised TypeError for None inputs;\nguard None explicitly so the error contract stays consistent with\n_validate_bbox and _convert_bbox_to_voc.\n\nAddresses Copilot review comments on #73.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Restore ValueError for None bboxes/labels in multi-object functions",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T17:28:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6d2023078f032b4de117e71ec208ff64c265235e",
"body": "Fix numpy input handling and label placement from v1.0.0 review",
"is_bot": false,
"headline": "Merge pull request #73 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T06:26:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e979e4f9ca51df643dbe25f9c14159ca325b1036",
"body": "- Use len() checks instead of truthiness so numpy arrays of bboxes don't\n raise \"truth value is ambiguous\"\n- Accept numpy integer color channels and normalize colors to built-in\n ints in _validate_color (cv2 5.0 rejects numpy scalars)\n- Place labels above the box only when the full background fits, so the\n background is never clipped at the image top\n\nAddresses Copilot review comments on #72.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix numpy input handling and label-above placement from PR review",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T06:24:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f9ff59062d72180dfbcede8054a874fb30f53c4a",
"body": "Release v1.0.0",
"is_bot": false,
"headline": "Merge pull request #72 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T06:13:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be9cb1c1524696271af22d3f5141f42e7230072c",
"body": null,
"is_bot": false,
"headline": "style: format and lint code with Ruff",
"author_name": "shoumikchow",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T06:09:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b049eb6763de0b39829a8331b41f1f757dccaeb",
"body": "Drop --locked from the CI uv sync steps. As a library, shipped installs\nare governed by pyproject.toml ranges, so CI should test against freshly\nresolved dependencies rather than pinned ones. This also fixes CI\nerroring on the lockfile, which was never tracked.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Resolve CI deps fresh instead of from a lockfile",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:58:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4eb8a0df2e150384a03145dff43e1ea7506a0ee2",
"body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document logging control and per-box colors in README and usage docs",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:46:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "18dd0d43fde0f781e113254f9313f7a5d6601dc6",
"body": "Set requires-python >=3.10 (3.9 is EOL) with matching ruff/ty targets\nand a refreshed lockfile. The new target enabled B905/UP038: zips over\nlength-validated lists now use strict=True. Remove .DS_Store files and\ngitignore them.",
"is_bot": false,
"headline": "Bump Python floor to 3.10 and clean up housekeeping",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:43:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a6306d7ed61003c959fc0e11348ffd31a13baba8",
"body": "Accept any 3-length sequence as a color (was tuple-only), drop the\npointless lru_cache on _validate_color, remove the np.array round-trip\nin add_multiple_labels, and delete a duplicate T-label fallback test\nthat claimed to cover the right edge but re-tested vertical space.",
"is_bot": false,
"headline": "Simplify validation and label internals",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:40:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c66a522ffdc960cd3c7628fe0dcab89c92240b3",
"body": "Unify CI into one workflow, keep Ruff auto-fix bot\n\ntest.yml: replace hand-rolled uv install with astral-sh/setup-uv and\nuv sync --locked, run make check so CI matches local. Matrix: 3.10,\n3.12, 3.14. Delete ty.yml (covered by make check). Slim ruff.yml down\nto its auto-fix PR job, using the locked ruff version.",
"is_bot": false,
"headline": "Updated commit message:",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:36:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3a03298a90c70019658982058480aa586d6fa12",
"body": "bbox_color now accepts either a single BGR tuple (unchanged behavior,\nstill batched via cv2.polylines) or a sequence of one color per box,\nwhich falls back to per-box cv2.rectangle since polylines can't batch\nmultiple colors. A color list whose length doesn't match bboxes raises\nValueError.",
"is_bot": false,
"headline": "Add per-box colors to draw_multiple_rectangles",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:30:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3ea5f6b97d224a827c482a62869a81068d3bfdcb",
"body": "- add_T_label and draw_flag_with_label fallbacks now forward size,\n thickness, draw_bg, and colors to add_label instead of dropping to\n defaults\n- draw_flag_with_label sizes its label background from real text\n metrics via _get_text_size (moved to _utils.py) instead of a\n hardcoded size-1 measur\n[…]\n output shifts by 1-2 px vs previous releases\n- Collapse add_label's duplicated top/inside branches (Phase 6 item)\n- Tests: bg-contains-text at size=2 incl. descenders; fallback keeps\n caller colors",
"is_bot": false,
"headline": "Fix label layout: real text metrics, descender overflow, box alignment",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:24:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "848b70ee6e01050c696198609b561cd0ab6e5f53",
"body": "Remove suppress_warnings and warnings_suppressed; flags.py now logs\nthrough logging.getLogger(__name__). Silence warnings with:\nlogging.getLogger(\"bbox_visualizer\").setLevel(logging.ERROR)",
"is_bot": false,
"headline": "Replace warning suppression API with a module logger (breaking)",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:06:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6819627fb1c2b04a5c6d3381403ccbba7bd6b826",
"body": "All public functions now return a new image and never modify the input.\nPreviously draw_rectangle copied but add_label, add_T_label, and\ndraw_flag_with_label drew on the caller's array in place.\n\n- Copy the input image in add_label, add_T_label, draw_flag_with_label\n- Drop the redundant copy in add_\n[…]\nEADME\n- Add parametrized purity test covering all public functions\n- Fix test_add_label, which only passed because earlier in-place calls\n left pixels behind (black text on black image draws nothing)",
"is_bot": false,
"headline": "Make all drawing functions pure (breaking)",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T05:02:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e3ca468a806fd46cd51632b3f5f142f23d2555e4",
"body": "Float CI test matrix to floor + latest ('3.9', '3.x') so it auto-follows\nnew Python releases, and remove the Python version classifiers from\npyproject.toml. requires-python still gates installs.",
"is_bot": false,
"headline": "Drop per-release Python version maintenance",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-07-08T04:33:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7568b343120603a3dc4c7dfad035377feb2d4cee",
"body": null,
"is_bot": false,
"headline": "Fix type and add ty to Makefile for type checking",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-06-12T01:41:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f552171f4b8ce4cf54dddb12e00c13fdb27edaa",
"body": null,
"is_bot": false,
"headline": "Add support for python 3.13 and python 3.14",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-06-11T06:13:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3dd1e13a4c5090e14baedb9b48cd5767198ea167",
"body": null,
"is_bot": false,
"headline": "Cleanup README",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-06-11T06:02:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7062ed06e1b224362da581e5cf018ffc1948d587",
"body": null,
"is_bot": false,
"headline": "Fix ruff formatting",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-06-11T05:45:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e5efff70b0631678cc48d98e4ce1bf576bd9a8b",
"body": null,
"is_bot": false,
"headline": "Add COCO and YOLO formats for bounding boxes",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-06-11T05:43:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b0c37596e0400d89ba0629003eaad91e0493e18",
"body": null,
"is_bot": false,
"headline": "Clean up examples, README.md",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-05-06T04:33:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e751d04f75d3c08f8a1514cb1df2c6c23f6d72ef",
"body": "Merge dev into master",
"is_bot": false,
"headline": "Merge pull request #70 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T06:57:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e5b080b640dc6109b0928178511cfd6c0ca699e",
"body": "Add contents: read permission to build, test, and typecheck jobs\nto address CodeQL security warnings about unlimited GITHUB_TOKEN permissions.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ci): add explicit permissions to workflow jobs",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T06:49:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "662d4c02fcfb3bda97b3faae62279ebd531902e8",
"body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ci): trigger workflows on master branch instead of main",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T06:34:38Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0cba70e82d013ed15a86cfa721f99bdf437e0694",
"body": "ty needs opencv-python and numpy installed to resolve imports.\nAlso renamed workflow to \"Type Check\" for consistent Title Case naming.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(ci): install dependencies for ty type checker",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T06:22:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c1adbe508d0e91eb2e6fcd49a60ec7cf69cd813f",
"body": "- Non-opaque: use cv2.polylines() to draw all rectangles in single call\n- Opaque: draw all filled rectangles on one overlay, then single alpha blend\n- Achieves 3-40x speedup depending on image size and box count\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf: optimize draw_multiple_rectangles with batched operations",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T06:08:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "62d690b6ddb48879b2ab7792dfa79ebc0e23776e",
"body": "- Remove unused BROWSER_PYSCRIPT\n- Remove bump-version (handled by hatch-vcs)\n- Remove release command (handled by GitHub Actions)\n- Update docs targets for MkDocs\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: clean up Makefile",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T05:06:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d89c3b1096f3d964f475800ce278eda94aa35bca",
"body": "- Replace Sphinx with mkdocs-material and mkdocstrings\n- Convert RST files to Markdown\n- Update .readthedocs.yaml for MkDocs build\n- Update pyproject.toml docs dependencies\n- Fix docstring format in warnings_suppressed for better rendering\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: migrate from Sphinx to MkDocs Material",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T05:06:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "24ae7bdea0f7d393fdcc003fa83e120557eb9993",
"body": "- Add ty to dev dependencies in pyproject.toml\n- Configure ty for Python 3.9 target version\n- Add GitHub Actions workflow for type checking\n- Fix return type annotation in labels.py to match cv2 stubs\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add ty type checker with CI workflow",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-29T04:05:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "369532e1d80d61ac2604e729673e5218d44bf2ae",
"body": "- Update test functions to use draw_box and draw_multiple_boxes\n- Add test to verify aliases work correctly\n- Update example notebooks to use new preferred function names\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: update tests and examples to use draw_box naming",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-22T19:00:22Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "978bbe55a5eab86feacba97b81e4c6270fa76cdb",
"body": "…ames\n\nIntroduce draw_box and draw_multiple_boxes as the new preferred API\nwhile keeping draw_rectangle and draw_multiple_rectangles as aliases\nfor backward compatibility. Both naming conventions work identically.\n\n- Add function aliases in rectangle.py\n- Export new names in __init__.py files\n- Update README and docs to use new function names\n- Add notes explaining both naming conventions still work\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feature: add draw_box and draw_multiple_boxes as preferred function n…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2026-01-22T18:45:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "96717863dd8130d9f270f136ca23284f448b00c3",
"body": "…x-visualizer",
"is_bot": false,
"headline": "docs: add usage examples for drawing bounding boxes and labels in bbo…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-27T06:06:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f34e9fb3f8e9c60e6b57726cb0a28d9767b41f82",
"body": "…s (main, dev) for push events",
"is_bot": false,
"headline": "chore: update GitHub Actions workflows to trigger on specific branche…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-27T06:03:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ac23b67bff8f95d04803743720d11decd6bcdb85",
"body": "…nd troubleshooting tips",
"is_bot": false,
"headline": "docs: enhance documentation with quick start guide, usage examples, a…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-27T05:51:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72bd5c6c2276eeb966f3830ccf85615f6ae69b77",
"body": "…ump-version targets to Makefile",
"is_bot": false,
"headline": "chore: add lint, format, test, servedocs, install, dev-install, and b…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-27T05:49:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17410957c096e2a272b215fdb1785aae378c3ee7",
"body": "…ve license-files entry",
"is_bot": false,
"headline": "chore: update target Python version to 3.9 in pyproject.toml and remo…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-02T02:25:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dffb38d348fa63998933ab93ddb0d366f10d2978",
"body": "chore: update CONTRIBUTING.md for new git workflow\nchore: add examples section in pyproject.toml and remove outdated example scripts",
"is_bot": false,
"headline": "Merge pull request #64 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T08:01:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe07ac97dc4f160969c6051aec971f31da035a8e",
"body": "…mple scripts",
"is_bot": false,
"headline": "chore: add examples section in pyproject.toml and remove outdated exa…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T07:58:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b22c218552704e50f5cc830780215d5a692aa2a6",
"body": null,
"is_bot": false,
"headline": "chore: update CONTRIBUTING.md for new git workflow",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T07:57:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6764b4f7c32bd35552816f4d00971c26f80e946b",
"body": null,
"is_bot": false,
"headline": "fix: improve bounding box validation to handle None and empty cases",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52963619f99214944ed9aa19b7f25363380bb5b5",
"body": "…d vectorized operations",
"is_bot": false,
"headline": "refactor: optimize color validation and label drawing with caching an…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5c396d6587a071013601c2ee7bf8ccd5b8cb7e8",
"body": null,
"is_bot": false,
"headline": "refactor: update type hints",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ab5e7fb4664abdc0acb316a29ee54596942e6896",
"body": "…linting",
"is_bot": false,
"headline": "chore: update README.md to include additional badges for testing and …",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93ff2b9da5fd613a21aa5bf2c831a77ce53e6ed9",
"body": "…ure by reorganizing imports and docstrings",
"is_bot": false,
"headline": "chore: update linting rules in pyproject.toml and improve code struct…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c666e55fefa37e6785ce4a2e5e5c830f56655b3c",
"body": "…workflow, and add sphinx_copybutton extension",
"is_bot": false,
"headline": "chore: update dependencies in pyproject.toml, enhance GitHub Actions …",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1cd7ada2ff024b2a9693b742aa4703c5de831874",
"body": null,
"is_bot": false,
"headline": "refactor: use pyproject.toml as single source of truth for version",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-06-01T06:26:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "91e8b1f78a48c8a17f08f90d52d5996de31a7ebd",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.2.1",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5707df2da2acee9e5ebf9133ea9cdf69d3ae8713",
"body": "…add trailing comma rule",
"is_bot": false,
"headline": "chore: update .gitignore and pyproject.toml for new dependencies and …",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "89c50fe237415f2e5940a8062c6902fc86ae496a",
"body": null,
"is_bot": false,
"headline": "refactor: replace List and Tuple with built-in list and tuple type hints",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f9bfe95e82d000910a057c9629e58c504c79e51",
"body": null,
"is_bot": false,
"headline": "chore: update minimum Python version to 3.9",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c51812f2e2783f40e3caeb806f07f6c6ac985d4",
"body": null,
"is_bot": false,
"headline": "Add method and context manager to suppress warnings",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dba00a6e808d5d1751ccb7086b2baa95e96abc1f",
"body": null,
"is_bot": false,
"headline": "Add method and context manager to suppress warnings",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-04-29T05:47:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed075b6ad73d5e7b5f3b3250c75abe2743f14b96",
"body": null,
"is_bot": false,
"headline": "Add git workflow instructions",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-16T06:44:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f816cfc3e5b3bd5003da686782c9231b7e41df3",
"body": null,
"is_bot": false,
"headline": "Merge pull request #38 from shoumikchow/dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-16T06:22:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7078bef7c487adf8c18fe12e9a6645744b3da0f2",
"body": null,
"is_bot": false,
"headline": "Merge master into dev, resolve conflicts",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-16T06:19:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8e33b088a9b70a5c4f4822c27237b637261dd5c",
"body": null,
"is_bot": false,
"headline": "Update instructions for formatter",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-16T06:10:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54d3780b6ea7531eac960d4c891b5bced37ad01e",
"body": null,
"is_bot": false,
"headline": "Fix makefile, make docs prettier",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-16T06:06:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19243ae39b60dbcaaf80357d85fccc8571dc0371",
"body": null,
"is_bot": false,
"headline": "Fix documentation",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T06:19:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d0faccfe1faad1d5e34f1a733c451ac3dca09161",
"body": "…e lol",
"is_bot": false,
"headline": "Remove all pytest coverage requirements as I don't care about coverag…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T06:18:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbc94d55ca39e6659f19ef567182479f4d1a5668",
"body": null,
"is_bot": false,
"headline": "Update gh action from black to ruff",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T05:57:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0dfed91ffefb28d704c3ac3607c2d175c7724e48",
"body": null,
"is_bot": false,
"headline": "Fix all ruff linter errors and format with ruff",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T05:47:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d45ffcd25ebd9670199dd57d5b3ca1bfd8b6a764",
"body": "…dependency. Modify pyproject.toml to change changelog link and update ruff configuration for improved linting and formatting options.",
"is_bot": false,
"headline": "Update Makefile to use ruff for formatting and linting; remove black …",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T05:46:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2b5ce2bb7240b0d8436e0167399c91f29f8ce125",
"body": "…e and update references accordingly.",
"is_bot": false,
"headline": "Rename validation functions to private by prefixing with an underscor…",
"author_name": "Shoumik Sharar Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-13T05:27:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef685c33b2f8219cfa63a0cae851dbcd7c7d23ed",
"body": null,
"is_bot": false,
"headline": "Make code more modular, update tests and docs to reflect the change",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T02:01:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3092deae57cf43ae7fe1c467cc2989607554a513",
"body": "…d. Change docs to reflect it",
"is_bot": false,
"headline": "Make `_check_and_modify_bbox` private as it's not a user facing metho…",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T02:01:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "756b676f9fe68cc98b1999b029d81aba51387e0a",
"body": null,
"is_bot": false,
"headline": "Fix PyPI badge",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T02:01:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0da0a9b07af97c21d375354b33de8b36bdadbb1e",
"body": null,
"is_bot": false,
"headline": "Update docs",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T02:01:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0bd35e85e1e70dac6fa6c608570c3938c4b8add6",
"body": null,
"is_bot": false,
"headline": "Merge branch 'master' into dev",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T02:00:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da1799de6e38ced54e06e1492a38719e442e80a7",
"body": null,
"is_bot": false,
"headline": "Make code more modular, update tests and docs to reflect the change",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T01:57:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b37535cc2980b9b745dd5ea9d9a30946356eb651",
"body": "…d. Change docs to reflect it",
"is_bot": false,
"headline": "Make `_check_and_modify_bbox` private as it's not a user facing metho…",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T01:22:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a0d0e7e15a4786564ea13529cccb97ecc2c8e51",
"body": null,
"is_bot": false,
"headline": "Fix PyPI badge",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T01:13:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cc26b97bcf15f64b24b78210ef133671acbca506",
"body": null,
"is_bot": false,
"headline": "Update docs",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-04T01:12:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d45cb7e9160469225230ea53f1aadb4791e15eeb",
"body": null,
"is_bot": false,
"headline": "Fix python publishing gh action",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:48:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4c8b3beb8b9c0b91ec3228cfbc285dd5ee485055",
"body": null,
"is_bot": false,
"headline": "Fix python publishing gh action",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:48:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "189ea46387e2ff4121fffc5959578a7d7ecca68d",
"body": null,
"is_bot": false,
"headline": "Fix name of GH action",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:39:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f82809aff74fb5928e34a076a6b3fcbc3a6c0b07",
"body": null,
"is_bot": false,
"headline": "Fix name of GH action",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:37:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c6d4aedb7c37f86bbb4fdd00b23704209932b93",
"body": null,
"is_bot": false,
"headline": "Merge dev into master: Remove duplicate test job from publish workflow",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:33:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce7c83f37e71f87b81694156a6d70b82369f6116",
"body": null,
"is_bot": false,
"headline": "Add pytest-cov to check for coverage",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:22:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db65ac6bef2f9b7b11222acd8f390c7eb4aa105e",
"body": null,
"is_bot": false,
"headline": "Fix gh action for testing",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:20:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69d8ea4835624f4b743a601d933e77a32d5f745d",
"body": "…tion",
"is_bot": false,
"headline": "Add creating uv venv before testing, remove testing in the publish ac…",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:16:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd1f2cf94f2f3d805ddf2a4bdb242d4327f39e0b",
"body": "…into dev",
"is_bot": false,
"headline": "Merge branch 'dev' of https://github.com/shoumikchow/bbox-visualizer …",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:11:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0e20d48b8ed85a144a2c6837c4b03b2f9ee54149",
"body": null,
"is_bot": false,
"headline": "Add a separate gh action for testing",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:09:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "542ffb12ffcc72f1718049f66fa7e09859c31ebd",
"body": "* Fix label positioning\n\n* Make code more readable, better docstrings, make code \"strongly-typed\"\n\n* Add gh actions\n\n* Modernize build process\n\n* Update gh action for black\n\n* Format files with black, update workflow to create PR with black formatted code if code isn't formatted already\n\n* Fix pytest in gh action\n\n* Update black gh action to only create PR if black finds an issue",
"is_bot": false,
"headline": "Dev (#34)",
"author_name": "Shoumik Chowdhury",
"author_login": "shoumikchow",
"committed_at": "2025-03-03T07:01:52Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 7,
"commits_last_year": 48,
"latest_release_at": "2026-07-17T19:55:10Z",
"latest_release_tag": "v1.0.1",
"releases_from_tags": false,
"days_since_last_push": 4,
"active_weeks_last_year": 6,
"days_since_latest_release": 4,
"mean_days_between_releases": 353.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 85,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "bbox_visualizer",
"exists": true,
"license": "MIT",
"keywords": [
"bbox_visualizer",
"bounding-box",
"computer-vision",
"visualization",
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Topic :: Scientific/Engineering :: Image Processing",
"Topic :: Scientific/Engineering :: Visualization"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/bbox_visualizer/",
"is_deprecated": false,
"latest_version": "1.0.1",
"repository_url": "https://github.com/shoumikchow/bbox-visualizer",
"versions_count": 7,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 39847,
"first_published_at": "2020-09-25T03:12:28.535023Z",
"latest_published_at": "2026-07-17T19:55:49.206099Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 36,
"stars": 412,
"watchers": 5,
"fork_history": {
"days": [
{
"date": "2020-09-25",
"count": 1
},
{
"date": "2020-09-28",
"count": 1
},
{
"date": "2020-09-30",
"count": 1
},
{
"date": "2020-10-01",
"count": 1
},
{
"date": "2020-10-02",
"count": 1
},
{
"date": "2021-03-12",
"count": 1
},
{
"date": "2021-06-08",
"count": 1
},
{
"date": "2021-07-07",
"count": 1
},
{
"date": "2021-07-15",
"count": 1
},
{
"date": "2021-08-17",
"count": 1
},
{
"date": "2021-08-18",
"count": 1
},
{
"date": "2021-08-26",
"count": 2
},
{
"date": "2021-09-06",
"count": 1
},
{
"date": "2022-01-11",
"count": 1
},
{
"date": "2022-02-01",
"count": 1
},
{
"date": "2022-12-29",
"count": 1
},
{
"date": "2023-01-03",
"count": 1
},
{
"date": "2023-01-16",
"count": 1
},
{
"date": "2023-05-11",
"count": 1
},
{
"date": "2023-06-04",
"count": 1
},
{
"date": "2023-07-24",
"count": 1
},
{
"date": "2023-08-04",
"count": 1
},
{
"date": "2023-08-10",
"count": 1
},
{
"date": "2023-12-07",
"count": 1
},
{
"date": "2024-03-26",
"count": 1
},
{
"date": "2024-04-17",
"count": 1
},
{
"date": "2024-05-06",
"count": 1
},
{
"date": "2024-07-09",
"count": 1
},
{
"date": "2025-01-15",
"count": 1
},
{
"date": "2025-07-06",
"count": 1
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-11-07",
"count": 1
},
{
"date": "2025-11-17",
"count": 1
},
{
"date": "2026-05-11",
"count": 1
}
],
"complete": true,
"collected": 35,
"total_forks": 36
},
"star_history": {
"days": [
{
"date": "2020-07-21",
"count": 2
},
{
"date": "2020-08-10",
"count": 1
},
{
"date": "2020-09-14",
"count": 1
},
{
"date": "2020-09-16",
"count": 1
},
{
"date": "2020-09-25",
"count": 9
},
{
"date": "2020-09-26",
"count": 3
},
{
"date": "2020-09-27",
"count": 86
},
{
"date": "2020-09-28",
"count": 60
},
{
"date": "2020-09-29",
"count": 11
},
{
"date": "2020-09-30",
"count": 13
},
{
"date": "2020-10-01",
"count": 1
},
{
"date": "2020-10-05",
"count": 1
},
{
"date": "2020-10-06",
"count": 2
},
{
"date": "2020-10-10",
"count": 1
},
{
"date": "2020-10-11",
"count": 2
},
{
"date": "2020-10-12",
"count": 1
},
{
"date": "2020-10-15",
"count": 1
},
{
"date": "2020-10-16",
"count": 1
},
{
"date": "2020-10-17",
"count": 1
},
{
"date": "2020-10-21",
"count": 1
},
{
"date": "2020-10-22",
"count": 2
},
{
"date": "2020-11-01",
"count": 1
},
{
"date": "2020-11-04",
"count": 1
},
{
"date": "2020-11-06",
"count": 1
},
{
"date": "2020-11-10",
"count": 2
},
{
"date": "2020-11-19",
"count": 1
},
{
"date": "2020-11-26",
"count": 1
},
{
"date": "2020-12-22",
"count": 2
},
{
"date": "2021-01-15",
"count": 1
},
{
"date": "2021-01-24",
"count": 1
},
{
"date": "2021-02-04",
"count": 1
},
{
"date": "2021-02-08",
"count": 1
},
{
"date": "2021-02-25",
"count": 1
},
{
"date": "2021-03-06",
"count": 1
},
{
"date": "2021-03-24",
"count": 1
},
{
"date": "2021-04-10",
"count": 1
},
{
"date": "2021-04-14",
"count": 1
},
{
"date": "2021-04-21",
"count": 2
},
{
"date": "2021-05-03",
"count": 2
},
{
"date": "2021-05-07",
"count": 1
},
{
"date": "2021-05-10",
"count": 1
},
{
"date": "2021-05-17",
"count": 1
},
{
"date": "2021-05-20",
"count": 1
},
{
"date": "2021-05-21",
"count": 1
},
{
"date": "2021-05-22",
"count": 1
},
{
"date": "2021-05-26",
"count": 1
},
{
"date": "2021-07-07",
"count": 1
},
{
"date": "2021-07-13",
"count": 1
},
{
"date": "2021-07-27",
"count": 1
},
{
"date": "2021-08-02",
"count": 1
},
{
"date": "2021-08-03",
"count": 1
},
{
"date": "2021-08-04",
"count": 1
},
{
"date": "2021-08-08",
"count": 1
},
{
"date": "2021-08-11",
"count": 3
},
{
"date": "2021-08-17",
"count": 1
},
{
"date": "2021-09-06",
"count": 1
},
{
"date": "2021-09-20",
"count": 1
},
{
"date": "2021-09-22",
"count": 1
},
{
"date": "2021-09-28",
"count": 1
},
{
"date": "2021-10-01",
"count": 2
},
{
"date": "2021-10-15",
"count": 3
},
{
"date": "2021-10-29",
"count": 1
},
{
"date": "2021-11-01",
"count": 1
},
{
"date": "2021-11-05",
"count": 2
},
{
"date": "2021-11-16",
"count": 2
},
{
"date": "2021-11-17",
"count": 3
},
{
"date": "2021-11-24",
"count": 1
},
{
"date": "2021-12-02",
"count": 1
},
{
"date": "2021-12-03",
"count": 1
},
{
"date": "2021-12-06",
"count": 1
},
{
"date": "2021-12-09",
"count": 1
},
{
"date": "2022-01-12",
"count": 1
},
{
"date": "2022-01-15",
"count": 1
},
{
"date": "2022-01-18",
"count": 1
},
{
"date": "2022-02-08",
"count": 1
},
{
"date": "2022-03-14",
"count": 4
},
{
"date": "2022-03-15",
"count": 2
},
{
"date": "2022-03-16",
"count": 1
},
{
"date": "2022-03-27",
"count": 1
},
{
"date": "2022-03-29",
"count": 1
},
{
"date": "2022-04-07",
"count": 1
},
{
"date": "2022-04-21",
"count": 1
},
{
"date": "2022-04-26",
"count": 2
},
{
"date": "2022-05-10",
"count": 1
},
{
"date": "2022-05-21",
"count": 1
},
{
"date": "2022-05-25",
"count": 1
},
{
"date": "2022-06-15",
"count": 1
},
{
"date": "2022-07-12",
"count": 1
},
{
"date": "2022-07-14",
"count": 1
},
{
"date": "2022-07-20",
"count": 1
},
{
"date": "2022-07-23",
"count": 1
},
{
"date": "2022-08-05",
"count": 1
},
{
"date": "2022-08-12",
"count": 1
},
{
"date": "2022-08-19",
"count": 1
},
{
"date": "2022-08-25",
"count": 1
},
{
"date": "2022-09-20",
"count": 2
},
{
"date": "2022-10-03",
"count": 1
},
{
"date": "2022-10-07",
"count": 1
},
{
"date": "2022-10-11",
"count": 1
},
{
"date": "2022-10-13",
"count": 2
},
{
"date": "2022-10-14",
"count": 1
},
{
"date": "2022-11-26",
"count": 1
},
{
"date": "2023-01-04",
"count": 1
},
{
"date": "2023-01-07",
"count": 1
},
{
"date": "2023-01-16",
"count": 2
},
{
"date": "2023-01-24",
"count": 1
},
{
"date": "2023-01-31",
"count": 1
},
{
"date": "2023-02-02",
"count": 1
},
{
"date": "2023-02-03",
"count": 2
},
{
"date": "2023-02-04",
"count": 1
},
{
"date": "2023-02-12",
"count": 1
},
{
"date": "2023-02-13",
"count": 1
},
{
"date": "2023-02-15",
"count": 1
},
{
"date": "2023-03-16",
"count": 1
},
{
"date": "2023-03-29",
"count": 1
},
{
"date": "2023-04-15",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-25",
"count": 1
},
{
"date": "2023-05-08",
"count": 1
},
{
"date": "2023-05-17",
"count": 1
},
{
"date": "2023-05-19",
"count": 1
},
{
"date": "2023-05-23",
"count": 1
},
{
"date": "2023-06-18",
"count": 1
},
{
"date": "2023-06-19",
"count": 1
},
{
"date": "2023-06-28",
"count": 2
},
{
"date": "2023-07-06",
"count": 1
},
{
"date": "2023-07-13",
"count": 2
},
{
"date": "2023-07-25",
"count": 1
},
{
"date": "2023-07-27",
"count": 1
},
{
"date": "2023-07-28",
"count": 1
},
{
"date": "2023-08-04",
"count": 1
},
{
"date": "2023-08-05",
"count": 1
},
{
"date": "2023-08-26",
"count": 1
},
{
"date": "2023-08-28",
"count": 1
},
{
"date": "2023-09-03",
"count": 1
},
{
"date": "2023-09-17",
"count": 1
},
{
"date": "2023-09-27",
"count": 1
},
{
"date": "2023-09-28",
"count": 1
},
{
"date": "2023-10-11",
"count": 1
},
{
"date": "2023-10-21",
"count": 1
},
{
"date": "2023-10-27",
"count": 1
},
{
"date": "2023-10-31",
"count": 1
},
{
"date": "2023-11-06",
"count": 1
},
{
"date": "2023-11-12",
"count": 1
},
{
"date": "2023-11-17",
"count": 1
},
{
"date": "2023-12-01",
"count": 1
},
{
"date": "2023-12-04",
"count": 1
},
{
"date": "2023-12-05",
"count": 1
},
{
"date": "2023-12-06",
"count": 1
},
{
"date": "2024-01-04",
"count": 1
},
{
"date": "2024-01-21",
"count": 1
},
{
"date": "2024-01-22",
"count": 1
},
{
"date": "2024-01-28",
"count": 1
},
{
"date": "2024-02-04",
"count": 1
},
{
"date": "2024-02-10",
"count": 1
},
{
"date": "2024-03-07",
"count": 2
},
{
"date": "2024-03-21",
"count": 1
},
{
"date": "2024-04-17",
"count": 2
},
{
"date": "2024-05-06",
"count": 1
},
{
"date": "2024-05-07",
"count": 1
},
{
"date": "2024-05-12",
"count": 1
},
{
"date": "2024-05-24",
"count": 1
},
{
"date": "2024-06-30",
"count": 1
},
{
"date": "2024-07-14",
"count": 4
},
{
"date": "2024-07-22",
"count": 1
},
{
"date": "2024-08-03",
"count": 1
},
{
"date": "2024-08-24",
"count": 1
},
{
"date": "2024-08-25",
"count": 1
},
{
"date": "2024-09-09",
"count": 1
},
{
"date": "2024-09-19",
"count": 1
},
{
"date": "2024-09-23",
"count": 1
},
{
"date": "2024-10-12",
"count": 1
},
{
"date": "2025-02-04",
"count": 1
},
{
"date": "2025-02-14",
"count": 1
},
{
"date": "2025-02-25",
"count": 1
},
{
"date": "2025-03-18",
"count": 1
},
{
"date": "2025-03-29",
"count": 1
},
{
"date": "2025-05-07",
"count": 1
},
{
"date": "2025-05-19",
"count": 1
},
{
"date": "2025-05-20",
"count": 1
},
{
"date": "2025-05-27",
"count": 1
},
{
"date": "2025-06-08",
"count": 1
},
{
"date": "2025-06-13",
"count": 1
},
{
"date": "2025-07-22",
"count": 1
},
{
"date": "2025-07-27",
"count": 1
},
{
"date": "2025-08-19",
"count": 1
},
{
"date": "2025-08-24",
"count": 1
},
{
"date": "2025-09-13",
"count": 1
},
{
"date": "2025-09-19",
"count": 2
},
{
"date": "2025-09-22",
"count": 1
},
{
"date": "2025-10-22",
"count": 1
},
{
"date": "2025-10-24",
"count": 1
},
{
"date": "2025-10-30",
"count": 1
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-05",
"count": 1
},
{
"date": "2026-03-19",
"count": 1
},
{
"date": "2026-03-24",
"count": 1
},
{
"date": "2026-04-05",
"count": 1
},
{
"date": "2026-04-14",
"count": 1
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-06-11",
"count": 1
},
{
"date": "2026-06-20",
"count": 1
}
],
"complete": true,
"collected": 412,
"total_stars": 412
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples",
"notebooks"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 21591,
"source_files_sampled": 12,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"pyproject.toml"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"assessed_package": null,
"unassessed_count": 13,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [
{
"name": "opencv-python",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=4.8.1.78"
},
{
"name": "numpy",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=1.19.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "numpy",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "opencv-python",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "build",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "hatch",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "hatch-fancy-pypi-readme",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "hatch-vcs",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "hatchling",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "mkdocs-material",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "mkdocstrings",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ruff",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "twine",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ty",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 13,
"direct_count": 2,
"indirect_count": 11
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 56,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 15,
"closed_unmerged_prs": 6
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "shoumikchow",
"commits": 194,
"avatar_url": "https://avatars.githubusercontent.com/u/10058982?v=4"
},
{
"type": "User",
"login": "nefelipar",
"commits": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/74057971?v=4"
},
{
"type": "User",
"login": "ImgBotApp",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/31427850?v=4"
},
{
"type": "User",
"login": "Ryoo72",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/21365990?v=4"
},
{
"type": "User",
"login": "sc0v0ne",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/56802572?v=4"
},
{
"type": "User",
"login": "shreyasvedpathak",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/68227226?v=4"
}
],
"contributors_sampled": 6,
"top_contributor_share": 0.937
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"publish.yml",
"ruff.yml",
"test.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 3,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 9,
"reason": "9 out of 10 merged PRs checked by a CI test -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/8 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 6,
"reason": "dependency not pinned by hash detected -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 9,
"reason": "SAST tool is not run on all commits -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 9,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "180edea0b2851dec985c3aa952809d4f6ecafc63",
"ran_at": "2026-07-21T21:09:18Z",
"aggregate_score": 6.9,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/shoumikchow/bbox-visualizer",
"host": "github.com",
"name": "bbox-visualizer",
"owner": "shoumikchow"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"security": 69,
"vitality": 73,
"community": 73,
"governance": 61,
"engineering": 76
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 73,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"commits_last_year": 48,
"human_commit_share": 1,
"days_since_last_push": 4,
"active_weeks_last_year": 6
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "6/52 weeks with commits",
"points": 4.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 6
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "48 commits in the last year",
"points": 15.2,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 48
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 84,
"inputs": {
"releases_count": 7,
"latest_release_tag": "v1.0.1",
"releases_from_tags": false,
"days_since_latest_release": 4,
"mean_days_between_releases": 353.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "7 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 7
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~353.3 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 353.3
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 4,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 4 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 4
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 73,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 59,
"inputs": {
"forks": 36,
"stars": 412,
"watchers": 5,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "412 stars",
"points": 42.4,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 412
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "36 forks",
"points": 12.9,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 36
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "5 watchers",
"points": 3.3,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 5
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "good",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 77,
"inputs": {
"packages": [
"bbox_visualizer"
],
"dependents": null,
"ecosystems": "pypi",
"total_downloads": null,
"monthly_downloads": 39847
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "39,847 downloads/month across pypi",
"points": 61.3,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 39847,
"ecosystems": "pypi"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 61,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 24,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 6,
"top_contributor_share": 0.937
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 94% of commits",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 94
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "6 contributors",
"points": 8.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 6
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"merged_prs": 56,
"open_issues": 0,
"closed_issues": 15,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 6
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "56/62 decided PRs merged",
"points": 34.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 56,
"decided": 62
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/8 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 54,
"inputs": {
"followers": 46,
"owner_type": "User",
"is_verified": null,
"owner_login": "shoumikchow",
"public_repos": 20,
"account_age_days": 4248
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "46 followers of shoumikchow",
"points": 12,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 46,
"login": "shoumikchow"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "20 public repos, account ~11 yr old",
"points": 21.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 20
}
},
{
"code": "account_age_years",
"params": {
"years": 11
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"bbox_visualizer"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 4 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 4
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "7 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 7
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 76,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "9 out of 10 merged PRs checked by a CI test -- score normalized to 9",
"points": 18,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"computer-vision",
"computer-vision-tools",
"cv",
"labeling",
"data-labeling",
"object-detection",
"object-recognition",
"bboxes",
"deep-learning",
"image-annotation",
"annotations",
"annotation",
"image-labeling",
"image-labeling-tool",
"bounding-boxes",
"bounding-box",
"boundingbox"
],
"has_wiki": false,
"homepage": "https://bbox-visualizer.readthedocs.io",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://bbox-visualizer.readthedocs.io",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "17 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 17
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 69,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 69,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 6.9
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "9 out of 10 merged PRs checked by a CI test -- score normalized to 9",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/8 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 6",
"points": 3,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 9",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 6
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "at_risk",
"name": "AI Readiness",
"value": 46,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.6,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "60 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 32,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 60,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.13,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "13 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 13,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 21591,
"source_files_sampled": 12,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/12 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 12,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples",
"notebooks"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples, notebooks",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples, notebooks"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"deps.dev does not index pypi:bbox_visualizer@1.0.1; advisories assessed against the repository dependency graph instead",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-07-21T21:09:37.077347Z",
"schema_version": "0.23.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/shoumikchow/bbox-visualizer.svg",
"full_name": "shoumikchow/bbox-visualizer",
"license_state": "standard",
"license_spdx": "MIT"
}