Changelog
SAM3 Detector filter release notes
v0.1.21 - 2026-07-09Direct link to v0.1.21 - 2026-07-09
FixedDirect link to Fixed
- Guard the SAM3 weight-bake step in
Dockerfileagainst a missing/emptyHF_TOKEN. Dependabot and fork PR builds run without repo secrets, so the mountedhf_tokensecret is empty; the build now skipssnapshot_downloadin that case instead of sending an illegalBearerheader and failing thedry-run-publishcheck. The real publish path is unaffected and still bakes weights.
v0.1.20 - 2026-06-19Direct link to v0.1.20 - 2026-06-19
AddedDirect link to Added
- opt-in torch.compile for SAM3 vision backbone (FILTER-373)
- Multiplex grounding (FILTER-374): Multi-prompt detection now batches all prompts into a single decoder pass. Peak VRAM logic limits memory via fallback.
v0.1.19 - 2026-06-03Direct link to v0.1.19 - 2026-06-03
AddedDirect link to Added
- Register
FilterSAM3DetectorOutputoutput schema underopenfilter.filter_runtime.shapes.DetectionSetwith$id: https://schemas.plainsight.ai/filters/sam3-detector/v1and data key"detections". - Add schema-compliance unit tests to cover coordinate validation and extra field pruning in
tests/test_filter_sam3_detector.py.
ChangedDirect link to Changed
- BREAKING:
TemporalIntervalFilterdefault configuration forlabel_fieldhas been changed fromNone(track all as one) to"label"(track per-class). Existing standalone deployments that relied onNonefor single-signal tracking must be updated to explicitly setlabel_field: null. - BREAKING:
output_boxes=Falseandoutput_scores=Falseare no longer supported. The filter raisesValueErrorat startup if either is set; the canonicalFilterSAM3DetectorOutputschema requires both fields. - BREAKING: Multi-output mode now publishes detections to
frame.data["detections"]as a canonical DetectionSet dictionary ({"items": [...]}) rather than a flat list. Downstream aggregators that previously iteratedframe.data["detections"]directly must be updated to expect the new schema. - Upgrade openfilter SDK package dependency to version 1.1.0.
- Upgrade openfilter SDK package dependency to version 1.1.1.
- Migrate
_extract_detections_from_stateto output canonicalbbox,label, andmaskstructures. - Transition frame processing to write the canonical detections to the top-level
frame.data["detections"]path (legacy meta dual-writes retained for unmigrated consumers). - Standardize
.jsonloutput records to follow the canonical detections schema format. - Update downstream internal consumers (
confusion_detector.py,temporal_intervals.py, andcoco_export.py) to support the new schema structure.
RemovedDirect link to Removed
- (No removals - legacy protege-compatible dual-writes were restored to ensure backward compatibility for unmigrated consumers.)
v0.1.18 - 2026-04-29Direct link to v0.1.18 - 2026-04-29
Enhances text_prompts parsing in FilterSAM3Detector with configurable delimiters and prompt→label mapping.
ChangedDirect link to Changed
- Added prompt_delimiter and class_delimiter
- Support class|||prompt format (e.g. "vehicle|||car###animal|||cat")
- Normalize prompts into list + prompt_label_map
- Validate delimiters and reject duplicate mappings
- Include both label and prompt in output
v0.1.17 - 2026-04-29Direct link to v0.1.17 - 2026-04-29
FixedDirect link to Fixed
- Fix Docker build secret format (use
secret-envsformat fordocker/build-push-action)
v0.1.16 - 2026-04-28Direct link to v0.1.16 - 2026-04-28
ChangedDirect link to Changed
- Distribution channel pivoted to Docker Hub. Image is now published to
plainsightai/openfilter-sam3-detector(publicly pullable, no auth) instead of the GARpremium-filters/path. PM confirmed the filter is classified public — source has been Apache-2.0 + LicenseRef-SAM since v0.1.7, and the prebuilt artifact distribution now matches. - Release workflow flipped to the public reusable workflow (
PlainsightAI/gh-actions-public/.github/workflows/filter-release.yaml) instead ofgh-actions/filter-release-premium.yaml. The public workflow publishes the wheel to PyPI in addition to the Docker image — first PyPI publish forfilter-sam3-detector. cloudbuild.yamlremoved. Cloud Build was silently double-publishing every release to Docker Hub alongside the GAR pipeline (with version-label drift on:0.1.13and a digest mismatch on:0.1.15); GitHub Actions is now the single source of truth.docker-compose.yaml,examples/pipelines/raw-detections.yaml, README Method 2, and QUICKSTART all reference the new Docker Hub path. The GAR auth prerequisites have been dropped from QUICKSTART and README.MakefileIMAGEdefault switched from the GAR premium path toplainsightai/openfilter-sam3-detector. Localmake build-image/make publish-imagenow target Docker Hub.
CIDirect link to CI
create-release.yamlpassesplatforms: linux/amd64to the public reusable workflow. The defaultlinux/amd64,linux/arm64matrix would fail at the base-image pull becausepytorch/pytorch:*-cuda*ships amd64-only across every CUDA tag.- HF_TOKEN is forwarded into the publish-docker job via
forward_secrets_as_envand mounted as theid=hf_tokenBuildKit secret viabuild_secrets, so the gated SAM3 weights are still pulled and baked at build time.
v0.1.15 - 2026-04-23Direct link to v0.1.15 - 2026-04-23
CIDirect link to CI
- Consolidate
make testonto a single pytest path; coverage flags pass throughPYTEST_ARGS=(e.g.make test PYTEST_ARGS=--cov=filter_sam3_detector). Drops the stdlibunittest discoverinvocation. - Drop duplicate
test.yamlworkflow —release / run-testsalready gates every PR via the reusable filter-release workflow. - Apply main-branch merge gate via
.github/rulesets/main.json+apply-rulesets.yaml(rulesets-as-code). Branch protection now lives in-tree and self-applies on pushes to main. - Add
build-wheel,build-image,publish-imageMakefile targets so the reusable premium-release workflow's wheel + image publish jobs complete end-to-end (no moremake: *** No rule to make target 'build-wheel').build-imagehonors a pre-setHF_TOKENenv and otherwise fetchessam3-hf-tokenfrom GCP Secret Manager, matchingcloudbuild.yaml's approach. NewDOCKER_TAGvariable strips thevprefix fromVERSIONso image tags matchcloudbuild.yaml's convention. Drop redundantinstall-devtarget (identical toinstall). AddMakefileto the release workflow'ssource-pathsso future Makefile-only changes trigger the release-log check.
ChangedDirect link to Changed
- Loosen
[dev]pins (setuptools,wheel,pytest,pytest-cov) from==to~=so patch-level fixes are picked up while keeping the current minor cap. Protectsrelease / run-tests(which installs viamake install→pip install -e ".[dev]") from future pytest 9 / setuptools 80 surprises.
v0.1.14 - 2026-04-21Direct link to v0.1.14 - 2026-04-21
ChangedDirect link to Changed
- Bump openfilter SDK to >=0.1.30
- Add source-paths release gate to CI workflow
- Add test-coverage Makefile target for Testmo composite action
FixedDirect link to Fixed
- Fix test_config_defaults: update expected model_id from
facebook/sam2-hiera-largetofacebook/sam3 - Fix test_output_json_file: auto-enable streaming_mode when output_json_path + emit_on_complete are set
- Add
debug: Falseto SAM3 filter defaults
v0.1.13 - 2026-04-20Direct link to v0.1.13 - 2026-04-20
ChangedDirect link to Changed
- Add create-release.yaml for GAR premium publishing
- Add shared security-scan workflow
- Remove old version-check.yaml
- Add Makefile IMAGE for premium-filters/
- Bump openfilter to >=0.1.27
- Update docker-compose.yaml to openfilter 0.1.27
v0.1.12 - 2026-04-19Direct link to v0.1.12 - 2026-04-19
FixedDirect link to Fixed
- Air-gapped deploys (FILTER-422): set
HF_HUB_OFFLINE=1andTRANSFORMERS_OFFLINE=1in the Dockerfile sohuggingface_hubskips HEAD revalidation againsthuggingface.coand serves the baked-in SAM3 cache directly. Unblocksdocker run --network=noneand offline deployments.
v0.1.11 - 2026-04-19Direct link to v0.1.11 - 2026-04-19
ChangedDirect link to Changed
- SPDX license expression in
pyproject.tomlnormalized toApache-2.0 AND LicenseRef-SAM; redundantLicense ::classifiers dropped. .dockerignorenow allow-listsLICENSING.mdso redistribution compliance files ship with built images.- Pinned
numpy>=1.26.4,<3via[tool.uv] override-dependenciesto keep transitive resolution stable across SAM3 / torch wheels.
CIDirect link to CI
version-check.yamlgatescheck-release-logbehind adorny/paths-filterstep; pure docs/CI-only PRs (e.g..github/**,*.md,.dockerignore-only edits) no longer require a VERSION/RELEASE.md bump. Mirrors the pattern inPlainsightAI/protege-ml.
v0.1.10 - 2026-04-08Direct link to v0.1.10 - 2026-04-08
AddedDirect link to Added
- Bfloat16 mixed-precision inference for image path via persistent
torch.autocastcontext, matching SAM3 video path pattern (FILTER-394) FILTER_MIXED_PRECISIONconfig flag (default: true on CUDA, no-op on CPU/MPS)
v0.1.9 - 2026-04-06Direct link to v0.1.9 - 2026-04-06
AddedDirect link to Added
- Batched backbone inference (FILTER-369):
process_batch()runs the SAM3 vision backbone on accumulated frames in a singleset_image_batch()call, then fans out per-frame grounding. Configurable viaFILTER_BATCH_SIZEandFILTER_ACCUMULATE_TIMEOUT_MS(requires openfilter >= 0.1.16).
RemovedDirect link to Removed
- Vestigial
multiprocessing.set_start_method("spawn")workaround (vidgear removed from openfilter).
v0.1.8 - 2026-03-31Direct link to v0.1.8 - 2026-03-31
AddedDirect link to Added
- Cross-class overlap detection (
ConfusionDetector): newfilter_sam3_detector/confusion_detector.pymodule that computes pairwise IoU between detections from different text prompts and flags near-identical regions (default threshold: IoU ≥ 0.95). FILTER_REMOVE_OVERLAP(defaultfalse): opt-in shutdown pass that keeps the highest-confidence detection per cross-class overlapping cluster and writesdetections_cleaned.jsonl. Same-class boxes are unchanged (still handled by per-prompt NMS).FILTER_CONFUSION_IOU_THRESHOLD(default0.95): configurable IoU gate for overlap detection and removal.- Shutdown summary: at end-of-run, logs cross-class overlap pair counts (before / after / removed) and detection totals (before / after / removed), plus cleaned JSONL path when
FILTER_REMOVE_OVERLAP=true. scripts/analyze_confusions.py: standalone post-processing script that readsdetections.jsonl, aggregates per-pair confusion statistics (rate, avg/max IoU, example frames), and emits tiered resolution guidance (textorjsonoutput).docs/filter-remove-overlap.md: operator walkthrough forFILTER_TEXT_PROMPTS=car,truck+FILTER_REMOVE_OVERLAP=truewith expected JSONL and shutdown log.- Visualization (
FILTER_VISUALIZE): annotated frames and viz topic now draw the detection class label (label/class/class_name) on each box in addition to the score, with a stable color per class so multi-prompt runs (e.g.carvstruck) are easy to read in Webvis and saved annotated frames.
ChangedDirect link to Changed
QUICKSTART.mdExample 2 now referencesFILTER_REMOVE_OVERLAPand links todocs/filter-remove-overlap.md.- Confusion detection is auto-enabled (stats only, no removal) when
FILTER_TEXT_PROMPTScontains more than one class; single-prompt runs see zero overhead. - Shutdown order: cross-prompt overlap finalize runs before automatic COCO export. When
FILTER_REMOVE_OVERLAP=trueanddetections_cleaned.jsonlis written,labels_coco.jsonis generated from the cleaned JSONL (otherwise from the primarydetections.jsonl).
v0.1.7 - 2026-03-25Direct link to v0.1.7 - 2026-03-25
AddedDirect link to Added
- Dual licensing documentation (
LICENSING.md) and updated README badge - License files (
LICENSE,LICENSING.md) now copied into Docker images for redistribution compliance - PyPI metadata updated with dual license expression and license file bundling
v0.1.6 - 2026-03-17Direct link to v0.1.6 - 2026-03-17
AddedDirect link to Added
- Quick start guide focused on compose-first onboarding with detached commands and runnable examples:
FILTER_TEXT_PROMPT,FILTER_TEXT_PROMPTS,FILTER_POSITIVE_BOXES, andFILTER_REF_IMAGES. - Optional utility script
scripts/convert_detections_jsonl_to_coco.pyto exportdetections.jsonlinto COCO-style JSON (images,annotations,categorieswithscore). - Automatic COCO export on filter shutdown when
FILTER_OUTPUT_PATHis configured (FILTER_AUTO_EXPORT_COCOopt-in).
ChangedDirect link to Changed
- Docker compose examples now surface get-started usage and output locations more clearly.
- Main compose example now accepts
VIDEO_PATHand prompt variants, writesFILTER_OUTPUT_PATH, and defaults to non-temporal get-started flow.
v0.1.5 - 2026-03-11Direct link to v0.1.5 - 2026-03-11
AddedDirect link to Added
- Add filename to output filter subject data
FixedDirect link to Fixed
- prompt_sets frame saving (FILTER-349):
_process_multi_outputnow saves original frames (once per frame) and annotated frames (per prompt set) whenFILTER_FRAMES_OUTPUT_DIR/FILTER_ANNOTATED_FRAMES_OUTPUT_DIRare configured
v0.1.4 - 2026-02-24Direct link to v0.1.4 - 2026-02-24
AddedDirect link to Added
- Reference box prompts: detection using positive and/or negative bounding boxes on the original image (SAM3-style geometric prompts). Set
FILTER_POSITIVE_BOXESand/orFILTER_NEGATIVE_BOXESto a JSON array of[x, y, w, h]boxes in pixels; text prompt is optional. Visualization: green = positive ref, red = negative ref, blue = detections.
FixedDirect link to Fixed
- Detection confidence: use scores from kept detections only (fix alignment when state scores include sub-threshold)
- Ref-images without SAM3: explicit branch with warning and frame forwarded unchanged (avoid AttributeError on processor)
ChangedDirect link to Changed
- Ref images: load and resize once in setup(); use cached PIL images per frame (no disk read per frame)
- Ref boxes: cache normalized boxes per resolution; recompute only when frame size changes
v0.1.2 - 2026-01-23Direct link to v0.1.2 - 2026-01-23
AddedDirect link to Added
- Streaming video processor with detection throttling
- Text embedding caching and backbone sharing optimization
- Frame ID extraction and protege-compatible output
- SAM3 multi-output mode with
prompt_setsconfiguration
ChangedDirect link to Changed
- Dev builds now push to prod registry
v0.1.1 - 2026-01-16Direct link to v0.1.1 - 2026-01-16
FixedDirect link to Fixed
- Cloud Build: Fix GAR authentication for dev tag builds by using separate cloud-sdk step
- Cloud Build: Fix shell variable escaping for Cloud Build substitution variables
- Cloud Build: Strip 'v' prefix from VERSION file to ensure consistent Docker tags
- VERSION: Add 'v' prefix to match RELEASE.md format for GitHub Actions version check
AddedDirect link to Added
- GitHub Actions: Add PR check for RELEASE.md and VERSION file consistency
v0.1.0 - 2024-12-29Direct link to v0.1.0 - 2024-12-29
AddedDirect link to Added
- Initial Release: new SAM3 detector filter
- Open-set object detection with text prompts
- Exemplar-based detection (few-shot learning)
- Support for bounding boxes, masks, and confidence scores
- GPU and CPU support (CUDA, CPU, MPS)
- Integration with OpenFilter framework
- Example scripts for common use cases
- Comprehensive documentation