Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - hummingbirdography

Pages: [1] 2 3
1
Personally I haven't had any luck with saving to a subdirectory through Chronos API 0.7.0. You might have to settle for something like a file naming convention which resembles the directory structure you'd like.

As for the trigger delay, I think the 'recTrigDelay' parameter is what you're looking for:
https://support.krontech.ca/en/articles/9903772-chronos-0-7-0-api-documentation#h_25f662a04e

You could inspect the network traffic of the "Settings" tab of the on-board web interface for some tips on how that works.

2
Software Dev / Re: API bugs
« on: April 03, 2025, 01:04:32 PM »
1. My biggest issue is when saving the file to the SD card. I'm hitting the "startFilesave" endpoint, and then trying to use the "playbackLength" and "playbackPosition" parameters to track progress.
  a. First I need to get "playbackLength" in order to setup progress monitoring (progress will be currentPlaybackPosition / playbackLength). This value is not correct. When I try to save the file from the buffer into the SD card, "playbackLength" is stale, and appears to be the value from the previous video I saved. If I try to save the video again, it appears to be correct.
  b. For the "playbackPosition", I tried hooking into to the Server Sent Events to monitor this, but it doesn't seem to throw notifications when this value changes. I at least do get an event when the state changes away from "filesave", so I know when the save process has finished. But according to the docs, it seems like I should be getting these events when anything changes.

playbackPosition does not notify, therefor polling is indeed required for tracking the save progress. I believe playbackLength pertains more to playback mode in the later software versions. Make sure to specify the start and length in your request to startFilesave, and try tracking your playbackPosition relative to your requested values instead.



  c. So, because that didn't work for me, I resorted to manually polling "playbackPosition" in order to try to track progress. During the filesave operation, the playback position starts at a seemingly random value (I've seen it at 100, up around 1200, etc), jumps back to 0, then goes all the way to the end like it should, but then goes back to a different random value before I receive the SSE that the camera state has switched off of "filesave". I'm not sure what's happening here, but all these pieces together make it impossible to consistently and correctly track the progress of the save operation.

Although this seems a bit buggy, it's normal behavior with the Chronos 1.4 & 2.1 cameras. I believe internally these cameras require a lot of effort to switch into a saving state, which is also related to why the video signal shuts off while saving.



2. I can't connect to the rtsp stream. I'm using VLC to try to connect to it and it's just not working.

Make sure you're running the latest Chronos software version 0.7.2 and latest version of VLC. See section 2.2 of this guide for instructions:
https://www.krontech.ca/wp-content/uploads/2020/03/Network-Control-v0.6.5.pdf

However, I prefer to use MPV with the "low-latency" profile enabled. It tends to maintain the video stream much better compared to the default VLC setup.
https://mpv.io/manual/stable/#low-latency-playback



3. More minor, but some of the endpoints don't like if I specify an encoding in Content-Type in the headers. I'm using .NET HttpClient and the default Content-Type for json is "application/json; charset=utf-8". This seems to work for some endpoints but not others, so I'm just clearing out that "charset" piece and everything works. Still this seems buggy.

For requests which would respond with JSON, make sure your request header has Content-Type with a value of application/json. Many HTTP clients will inject other values, such as charset=utf-8, but the Chronos API will not respond correctly to that request. Furthermore, case sensitivity matters, so for example, a value of Application/JSON would also result in the request being ignored.



I may have found a workaround for my purposes for bug 1a, by using "totalFrames" instead of "playbackLength".

totalFrames refers to the quantity currently in the buffer. It is a reliable value to key off of, because in many cases the playbackLength is not automatically updated. Another parameter you may want to consider referencing instead, is videoSegments, regardless if you're recording in segmented mode. The advantage is that you may retrieve the frame rate and exposure period originally used.



Another bug: Adjusting resolution - I can set the resolution to any supported value (incremented by 32 in the width, 2 in the height on the 2.1 camera I'm testing) via the camera interface. On the web interface and API, unless I set it to "standard" values - like 1920 x 1080, 1280 x 1024, etc. - I get blue lines or blue tint in the video. Even some of the common resolutions listed in the camera's datasheet exhibit these issues. Something is happening when I set it on the camera that is not happening when I set it via the API.

When you press the OK button in the Record Settings dialog, a "zero time" black calibration is automatically performed. You may achieve the same results by sending a startCalibration request after receiving the Event indicating the sensor configuration has changed.



Seems funny that Krontech doesn't care about this.

I'm guessing this thread was accidentally overlooked. I'm very experienced with the Chronos API and would be happy to help! Some minor revisions have been made to the documentation, and it now has a new home at the following URL in addition to being a downloadable PDF on the Software Resources tab of the main Kron site
https://support.krontech.ca/en/articles/9903772-chronos-0-7-0-api-documentation
Please let me know if you have any other questions!

3
Chronos User Discussion / Re: Has anyone tried it yet?
« on: April 03, 2025, 11:18:10 AM »
I've tested this before and didn't see much, if any of a difference compared to the microSD card included with the camera. You might see a teeny tiny shorter boot-up time, but after that all the camera operations will still perform at the same pace. In other words, a faster microSD certainly won't speed up offloading footage or anything like that.

A healthy boot time with a Chronos 1.4 is about 50 seconds from pressing the power button to being able to start recording.

If you're observing 3 to 7 minute startup durations, it sounds like you are experiencing a different issue. Occasionally the camera can get stuck in a loop of restarting itself. It should self correct, however may very well take up to 7 minutes. I recommend checking the Util > About > Last Shutdown Reason for clues when you observe that long of a startup.

A healthy shut down would be indicated by "97: PwrBtn, Software, PMIC Ack", and should only take about 10 to 15 seconds.

If you're seeing anything else, such as "5: Watchdog, PMIC Ack", then I suspect this is a bug in the software. Try rebooting the camera after one of those lengthy startups, and see if it hasn't self corrected to under 1 minute.

4
Chronos User Discussion / Re: Speeding up the saving process
« on: March 27, 2025, 11:39:52 AM »
Ah, selenium, neat! I'll have to give that a try sometime.

I'm still working on the automation aspect, however I do at least have something for automatically marking the start/end positions for individual segments. So, with that, you can tell the camera to loop playback within an individual segment, or proceed to saving that individual segment.

The challenge I ran into with automating saves, is related to the delay between video state transitions. You can observe this both- when a save starts, and when it finishes. There's usually a few extra seconds of delay while the camera switches pipelines between a black video state, and displaying your recording. With that said, technically, the fastest way to automate multiple saves, would be to save all of the segments at once, and then split the recordings in post. DNG or TIFF formats can make that a bit easier as well, since you can separate the frames for each segment via filesystem operations, rather than having to use video software for splitting a MP4 into multiple files. You could even do that via SSH operations without interrupting recording.

Unfortunately the camera software doesn't provide any visual feedback while recording in segmented mode. You could check the box for Text Overlays (underneath the Settings menu during playback), and track previously captured segments with the "sg=" portion of the overlaid text.

Another trick, since you're using the web interface, is you could switch to over to the "Documentation" tab, and monitor the array of 'videoSegments' live from there. At least that way you could keep an eye on what's going on without turning on the Text Overlay, or switching to playback mode.

An important note with Segmented recording mode, is that all of the record buttons- the pyhsical red button, the button displayed on the LCD, and the button in the web interface, will NOT trigger recording another segment. If you press one of those buttons after recording a segment, it will flush the previous segment(s), so be careful with that!! Segments are triggered via I/O, and it might take a bit of practice to get the hang of using it.

5
Chronos User Discussion / Re: Speeding up the saving process
« on: March 26, 2025, 12:16:36 PM »
If you're only recording 1 second, I recommend switching your camera to the segmented recording mode. At least that way you could capture multiple 1 second duration segments without interruption, and then save all of those segments as a batch before your buffer is completely filled. Sure, the downtime for saving would be longer, but at least you could acquire more shots before taking a break to save.

I'm curious how you're automating the web interface! Mind sharing some more info on that?

However yes, you might want to look into the REST API, especially if you try my segmented mode suggestion. The API won't make the camera operate any faster, but it can help automate a workflow such as yours to be much faster.

I've been working on a script which tries to automate saving each segment as a separate MP4 file, because currently none of the camera software versions support this.

https://support.krontech.ca/en/articles/9903772-chronos-0-7-0-api-documentation

I'm very familiar with the API, so would be happy to help

6
Chronos User Discussion / Re: Hello
« on: February 28, 2025, 03:27:02 PM »
Hello.

I have Chronos 1.4 camera for a long time - I made my order when it was still kickstarter project so I have probably the oldest possible software. Do I need to make some "extra steps" while updating to newest version since my software is so old? Or I just go with normal procedure like it is any other update? Also, from the newest updates which version of the software is the "stable" one?

Currently the most reliable way to update your Chronos 1.4 to the latest software version 0.7.2 is to download the image file from the Software Resources section of the Kron Tech website, and write it to your camera's microSD card:

https://www.krontech.ca/software-resources/

You will find instructions for the update process there as well, which I have copied here for your convenience:


Note that although the video is demonstrating the process with a 4k12 model, it is the same with your 1.4. The only difference is your microSD card is located on the bottom of the camera instead.

7
General high-speed discussion / Re: Anyone manning the forum?
« on: February 16, 2025, 05:30:48 AM »
Nothing but AI bot posts in the past month, possibly some new user filtering is in order?

Those AI bots are getting a bit annoying. I think the forum could benefit from a lot of upgrades! Besides improving new user filtering, do you have any other suggestions?

8
General high-speed discussion / Re: Carrying Case Recommendations
« on: February 16, 2025, 05:24:09 AM »
Pelican Air cases are nice for travel. I recommend keeping an eye on the daily deals B&H Photo offers. As I'm typing this, they have Nanuk 21L cases on sale for $99. If you use their "payboo" credit card, you don't have to pay sales tax either.

https://www.bhphotovideo.com/deals-promotions-coupons/Pokerogue
Besides Pelican Air and Nanuk, do you have any other recommendations for camera cases that are lightweight yet durable?

For a Chronos 1.4 or 2.1, I have found a plastic food storage container and some bubble wrap works surprisingly well. Lightweight, durable, waterproof, and fits in just about any backpack. Dishwasher safe, too! ;D

The one I found in the attached photo has just enough extra space on the side to help remind me to remove the battery before sealing it. That's an important detail with any storage option you choose, unless your travel destination has AC power which you could bypass "shipping mode" with. You certainly wouldn't want your Chronos to accidentally turn on during transport.

One of my favorite things about the 1.4 and 2.1 cameras is how similar the form factor is to other cameras. With that said, just about any camera bag should be able to protect your Chronos and its accessories well.

9
General high-speed discussion / Re: Carrying Case Recommendations
« on: February 11, 2025, 03:15:36 PM »
Pelican Air cases are nice for travel. I recommend keeping an eye on the daily deals B&H Photo offers. As I'm typing this, they have Nanuk 21L cases on sale for $99. If you use their "payboo" credit card, you don't have to pay sales tax either.

https://www.bhphotovideo.com/deals-promotions-coupons

10
From the product descriptions, there's a rear piece which is adjustable, so in theory you could add a spacer and reduce the length of the adapter. However, some PL lenses can adjust focus a bit further back from the infinity marker

11
Does anybody know which out of the two PL to CS mount adapters will work on the 1.4 and 2.1?

https://rafcamera.com/adapter-arri-pl-to-c-mount-4mm?fbclid=IwY2xjawHb2HNleHRuA2FlbQIxMAABHS57xMGsI89m9HEqF6foafHqxhdEiUJ35FH3lhDWrskNuQjq7lAnuz-AsA_aem_mDqOrKE1tCPoKM2vD_0YzQ

https://rafcamera.com/adapter-arri-pl-to-c-mount-deep?fbclid=IwY2xjawHb2FFleHRuA2FlbQIxMAABHQdOvjYdrq6SbCRaJSC2nrRXtOF2SG2CtMdtYAtMQ1taSYpfNsonJ0qxQg_aem_bp-AKLcEx0uE8aNVG9PstQ

I took some measurements, and I think you might actually be able to get away with their "deep" model. Although the 58mm rear diameter would collide with the Chronos battery compartment, both adapters are designed for a C mount, which the Chronos needs a spacer ring in order to achieve. This spacer might be just enough to allow the "deep" adapter to fit. Alternatively you could stack another spacer on top of it. Anyway, the 4mm spacer model should definitely fit, but as the manufacturer describes, its compatible with less lenses.

Do you have the Chronos MFT mounting plate? You might want to consider a PL to MFT adapter. This one has been working well for me, however you'll need to rig some sort of lens support for it:

https://www.amazon.com/gp/product/B08XQPTVXT/

12
I did some testing and tried to reproduce this issue. I suspect what you're encountering may be related to your trigger configuration. I wrote a python script which follows. It uses the API to create 50 segments, each exactly 400 frames. I tested this with a Chronos 1.4 and two different firmware versions: 0.5.1, and also the latest release, 0.7.2

Code: [Select]
#!/usr/bin/python3
import time
import requests

ipAddress = '192.168.12.1'
totalFrames = 20000
totalSegments = 50
segmentInterval = 5

print(f'Flushing any previously recorded data for Chronos at {ipAddress}')
requests.post(f'http://{ipAddress}/control/flushRecording', json = {})

print(f'Setting recording frames quantity to {totalFrames}')
requests.post(f'http://{ipAddress}/control/set', json = {'recMaxFrames': totalFrames})

print('Setting recording mode to segmented')
requests.post(f'http://{ipAddress}/control/set', json = {'recMode': 'segmented'})

print(f'Setting recording segments quantity to {totalSegments}, each with a duration of {totalFrames // totalSegments} frames')
requests.post(f'http://{ipAddress}/control/set', json = {'recSegments': totalSegments})

print('Starting first segment recording')
requests.post(f'http://{ipAddress}/control/startRecording', json = {})

for i in range(totalSegments):
    # Wait segment interval
    time.sleep(segmentInterval)

    # Trigger next recording segment
    requests.post(f'http://{ipAddress}/control/set', json = {"ioMappingTrigger": {"source": "alwaysHigh", "invert": True }})
    requests.post(f'http://{ipAddress}/control/set', json = {"ioMappingTrigger": {"source": "alwaysHigh", "invert": False }})
   
    print(f'Recorded segment {i + 1} of {totalSegments}')

# Wait segment interval
time.sleep(segmentInterval)

print('Stopping recording')
requests.post(f'http://{ipAddress}/control/stopRecording', json = {})

Both firmware versions reported the same results through the 'videoSegments' property, so I am guessing this isn't related to the firmware version you're using.

Code: [Select]
[
  {
    "interval": 0.0010051,
    "offset": 0,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 1200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 1600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 2000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 2400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 2800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 3200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 3600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 4000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 4400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 4800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 5200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 5600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 6000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 6400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 6800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 7200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 7600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 8000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 8400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 8800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 9200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 9600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 10000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 10400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 10800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 11200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 11600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 12000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 12400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 12800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 13200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 13600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 14000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 14400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 14800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 15200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 15600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 16000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 16400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 16800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 17200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 17600,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 18000,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 18400,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 18800,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 19200,
    "exposure": 0.000999511,
    "length": 400
  },
  {
    "interval": 0.0010051,
    "offset": 19600,
    "exposure": 0.000999511,
    "length": 400
  }
]

The segmented recording mode can be a bit challenging to understand while relying on the back of the camera's interface. The API exposes some really useful information which I think might help you troubleshoot this. I'd be delighted to help with this, and am curious how this turns out!

13
Generally speaking you'll want to shoot with your fastest lenses and as much light as you can get. A speedbooster is an excellent companion to a Chronos. What sort of scene are you talking about shooting?

14
I'm not David Kronstein but I can at least try to answer two of your questions~

For lighting, Kron Technologies offers Helios lights which are specially designed to integrate with Chronos cameras

With the Chronos 1.4 and 2.1 models, the REST API may be accessed from 192.168.12.1 over USB as an alternative to ethernet. The API documentation is available at the following URL, and there's a PDF version on the main Kron Tech site as well

https://support.krontech.ca/en/articles/9903772-chronos-0-7-0-api-documentation

15
Chronos User Discussion / Re: Stop recording and auto save with remote?
« on: August 27, 2024, 02:47:30 PM »
You could probably just find a wireless remote with a receiver that connects to the Chronos, assign it as the "Record End Trigger", and enable both the "Auto Save" and "Auto Record" settings

Pages: [1] 2 3