Scala package for controlling Imperx cameras through the Imperx C++ SDK.
The full installation is Linux-only. Imperx does not provide a supported macOS
SDK for this setup, and the native bridge in this repository links against the
Linux Imperx SDK libraries under /opt/IpxCameraSDK-1.5.0.83/lib/Linux64_x64.
On macOS, you can still build the Scala/JVM jar for compile-time and simulated testing in downstream projects. That jar contains the public Scala API and JNR binding layer, but it does not include a working native camera runtime. Real camera discovery, connection, streaming, and capture still require the Linux native bridge and Imperx SDK.
imperx-core: Scala domain model and API over native bridge.imperx-native: C/C++ bridge contract and starter implementation.imperx-tests: integration and hardware-gated tests.
Use this path when you need real Imperx camera access.
- Imperx SDK path:
/opt/IpxCameraSDK-1.5.0.83/ - Linux dynamic loader must find native bridge and Imperx SDK libraries.
Example:
export LD_LIBRARY_PATH=/opt/IpxCameraSDK-1.5.0.83/lib:$LD_LIBRARY_PATHcmake -S imperx-native/src/main/cpp -B imperx-native/build
cmake --build imperx-native/build -jThis produces:
imperx-native/build/libimperx_bridge.sosbt "project imperxCore" test
sbt "project imperxCore" publishLocalThis publishes:
"com.imperx" %% "imperx-camera-core" % "0.1.0-SNAPSHOT"For dependency setup, Linux runtime library configuration, and Scala streaming/capture examples, see:
docs/USAGE_EXAMPLES.md
Use this path when you are developing on macOS and only need the JVM artifact for downstream compilation, unit tests, simulated-camera workflows, or API integration work.
Build the Scala jar:
sbt "project imperxCore" packageThis produces:
imperx-core/target/scala-2.13/imperx-camera-core_2.13-0.1.0-SNAPSHOT.jarOptionally publish it to your local Ivy cache:
sbt "project imperxCore" publishLocalThe local dependency is:
"com.imperx" %% "imperx-camera-core" % "0.1.0-SNAPSHOT"For an unmanaged jar dependency, point the consuming project at the built jar.
For example, from ~/tmtsoftware/lgsf-prototype/bto-prototype/:
sbt -Dimperx.core.jar=/Users/weiss/tmtsoftware/imperx-camera/imperx-core/target/scala-2.13/imperx-camera-core_2.13-0.1.0-SNAPSHOT.jar \
"project lgsf-pac-prototypehcd" compileWhat works on macOS:
- compiling downstream projects against
com.imperx.camera.* - running tests that use fake, stub, or simulated camera implementations
- validating application-level integration around the Imperx API boundary
What does not work on macOS with the current vendor installation:
- loading
imperx_bridgeas a real native camera bridge - discovering or opening Imperx cameras through the vendor SDK
- streaming or capturing real frames through
JnrImperxBinding.load(...)
Those operations require the Linux libimperx_bridge.so and the Linux Imperx
SDK shared libraries.
- Unit and contract tests:
sbt test- Hardware tests (requires connected camera and network setup):
LD_LIBRARY_PATH=/home/jweiss/tmtsoftware/ImperxCamera/imperx-native/build:/opt/IpxCameraSDK-1.5.0.83/lib/Linux64_x64:$LD_LIBRARY_PATH \
IMPERX_HW_TESTS=true \
sbt "project imperx-tests" testHardware test defaults are in:
imperx-tests/src/test/resources/hardware-test.propertiesOverride with env vars as needed:
IMPERX_CAMERA_IPIMPERX_CAPTURE_OUTPUT(.png,.fits,.fit, or raw bytes for other extensions)IMPERX_EXPOSURE_MICROSIMPERX_GAINIMPERX_PIXEL_FORMATIMPERX_GRAB_TIMEOUT_MSIMPERX_SOAK_FRAMES
For CLI usage and examples, see:
docs/USAGE_EXAMPLES.md
CLI defaults are in:
imperx-tests/src/main/resources/imperx-capture.properties
For potential upgrades and roadmap items (including non-blocking stream abstraction), see:
docs/POTENTIAL_UPGRADES.md