Skip to content

Prepare LaserLab v2 release pipeline - #1

Merged
ProhibitedTV merged 1 commit into
mainfrom
codex/release-laserlab-v2
Jul 10, 2026
Merged

Prepare LaserLab v2 release pipeline#1
ProhibitedTV merged 1 commit into
mainfrom
codex/release-laserlab-v2

Conversation

@ProhibitedTV

Copy link
Copy Markdown
Owner

Adds the LaserLab v2 CLI validation pipeline, bundled redistributable optical fixture media, release demo data dumps, release screenshots, Windows executable build scripts, and GitHub Actions for CI plus tagged Windows releases. Validated locally with .venv310 tests, fixture wide-profile run, screenshot generation, PyInstaller bundle build, and LaserLab.exe startup checks.

@ProhibitedTV
ProhibitedTV marked this pull request as ready for review July 10, 2026 01:30
@ProhibitedTV
ProhibitedTV merged commit a82bc9b into main Jul 10, 2026
2 checks passed
@ProhibitedTV
ProhibitedTV deleted the codex/release-laserlab-v2 branch July 10, 2026 01:31

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: beff46ccf9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread laserlab/pipeline.py
Comment on lines +91 to +93
group_key = (sample.get("capture_id") or sample.get("parent_capture_id") or sample["sample_id"], processed.variant_name)
masks_for_persistence.setdefault(group_key, []).append(
(int(sample.get("frame_index") or 0), result_record["sample_id"], processed.image)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep controls out of laser persistence comparisons

When a laser capture is present, _build_samples adds generated controls whose parent_capture_id equals the laser capture. This key puts those controls in the same persistence group as the real laser frames, and for equal frame_index the sort falls back to the random blind order, so a laser frame can be scored against a blank/rotated/block-shuffled control instead of the next laser frame. Because laser_mean_persistence gates the “repeatable candidate” ladder, normal laser runs can be misclassified.

Useful? React with 👍 / 👎.

Comment thread laserlab/detectors.py
import numpy as np

binary = binary_for_structure(image)
num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(255 - binary, connectivity=8)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve bright laser structures as components

For bright-on-dark laser footage or the synthetic positive, Otsu thresholding marks the bright structure as 255; inverting here makes the dark background the foreground passed to connected-components, so the actual bright signal is discarded/filtered and text_like_count (and thus structure_score) is biased down. The foreground polarity needs to match the bright structures or be selected adaptively before scoring.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant