Repository navigation
Conversation
--device now also accepts the address of a network camera, so an Android phone
running DroidCam can be used without a PC client:
marimapper_check_camera --device 192.168.1.20:4747
A bare host or host:port is treated as DroidCam (default port 4747, stream path
/video); a path can be added, and full http:// or rtsp:// URLs are passed through.
Plain camera indexes work exactly as before.
Network streams are opened with the FFmpeg backend with a 5 second open/read
timeout (an unreachable address used to block for far longer) and a one frame
buffer. Exposure and focus can't be set over a network stream; the existing
"failed to set exposure" warning covers that.
Tests parse the address forms and read frames from a local MJPEG server that
behaves like the DroidCam app.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
--device takes a comma separated list of cameras, e.g. --device 1,2 or --device 1,192.168.1.20:4747, and every led is then switched on once and looked for in all of them at the same time. Each camera is its own view of the scan, numbered in the order they are listed, so a scan with two cameras gives two views and the reconstruction (which already treats every view as a separate camera position sharing one camera model) uses them all. - find_leds and enable_and_find_leds look in every camera for one led. The single camera functions are now thin wrappers around them. A camera that always sees light is skipped for that led, and a camera that never sees the led doesn't make the timeout grow. - Each camera finishes its own view: done, or deleted if it moved or saw nothing. The scanner waits for all of them, and moves on by one view per camera. - Webcams are numbered differently by each capture method (DirectShow and Media Foundation on Windows), so open_cameras opens all of them with the same method, checks that each gets a picture, and says what went wrong if none works, rather than mixing methods. - The 2D files were named by the second, so cameras finishing together overwrote each other's file. They now get a suffix when the name is taken. - marimapper_check_camera opens one window per camera. Needs the address parsing from the DroidCam pull request. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This was referenced Oct 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
--devicenow takes a comma separated list of cameras, and every LED is lit once and looked for in all of them at the same time:Each camera is its own view of the scan, numbered in the order they are listed. The reconstruction already treats every view as a separate camera position sharing one camera model, so with identical cameras a scan gives you one view per camera for the price of one.
This builds on #90 (it uses its address parsing), so the first commit here is that pull request's. The change for this PR is the second commit.
What changes
find_ledsandenable_and_find_ledslook for one LED in every camera. The single camera functions are now thin wrappers around them, so there is one code path.open_camerasopens every webcam with the same capture method and checks that each delivers a picture. Methods number the cameras differently (on Windows, DirectShow and Media Foundation list them in a different order), and the old per camera fallback could mix the two, so a list like2,3opened the wrong camera for the second entry. If no method works the error says why.marimapper_check_cameraopens a window per camera, and the README has a short section on it.Testing
open_camerasis tested with a fake OpenCV, including the case where one method can open only some of the cameras. The scanner side is tested with a scripted queue of events. All pass,flake8is clean, and the existing tests pass.Notes
--exposure, there is no per camera setting.scanner.pyand the README as two other pull requests, Show per-camera progress with detection rates and gaps while scanning #92 (progress display) and Add --capture_only and a marimapper_reconstruct command #93 (--capture_only). They're independent, but whichever lands second needs a small rebase. I tried all three merged together: they combine and all 74 tests pass.🤖 Generated with Claude Code