Skip to content

Releases: blakeblackshear/frigate

Release 0.12.1

11 Jun 13:36
367d724
Compare
Choose a tag to compare

What's Changed

  • Reduce CPU usage for RPi users using hwaccel by @NickM-27 in #6385
  • Prevent recordings from being turned on if disabled in config by @NickM-27 in #6444
  • Fix filter dropdowns when list is too long by @sinamics in #6000

Documentation Updates

New Contributors

Full Changelog: v0.12.0...v0.12.1

0.12.0 Release

08 Apr 15:29
da3e197
Compare
Choose a tag to compare

Major Changes for 0.12.0

❗❗Notice❗❗
I want to recognize @NickM-27 for all the contributions he made on this release and all the support he helps provide in the issues. If you have been considering sponsoring this project with either a one time contribution or a recurring contribution, I would request that you do so at his sponsors page.

Announcement: 0.12.0 will be the last release with support for 32bit ARM. The overhead of maintaining the dependencies is significant, and we are seeing <1% of docker pulls for that architecture.

BREAKING CHANGES

  • We are no longer pushing images to Dockerhub. All docker builds will be published to github container registry instead. The new image location for stable is ghcr.io/blakeblackshear/frigate:stable
  • If using the Frigate-HomeAssistant Integration it will need to be updated to 4.0.0 to avoid breaking changes with Frigate 0.12
  • Changes have been made to the database, a backup of the database will need to be made before updating if you want to roll-back.
  • Some deployment approaches are overwriting the PATH environment value to an old value. If you see errors like ./run: line 7: exec: nginx: not found, then you need to stop overriding your PATH. This happens with both Proxmox LXC and Portainer (#3223 the database will need to be deleted to roll-back successfully.
  • Some deployment approaches are overwriting the command docker value giving errors like [Errno 98] Address already in us which need to be set back to default to work #5444
  • The shm storage requirements have changed for 0.12, they will likely need to be recalculated and adjusted in the config, see the docs for how to calculate this new value. NOTE: This does not apply to addon users which are unable to configure this value.
  • More config validation checks have been added, it is possible that Frigate will fail to start due to an error that has been caught, the error will need to be fixed before frigate can start.
  • RTMP is now disabled by default and the role is not automatically added. It is highly recommend to move to the new RTSP streams via the bundled go2rtc.
  • Changes have been made to the way recordings segments are stored, external scripts which access the recordings file structure directly may be broken.

Retention limited by available storage

Frigate now limits its recordings to available storage, if the storage for recordings gets below 1 hour left then Frigate will delete the oldest recording segments to make room for newer ones. Frigate will also not fail if there is no space to save recordings.

go2rtc

go2rtc 1.2.0 has been bundled inside Frigate. The configuration can be set directly inside Frigate's config file nested under the go2rtc section. You can follow the guide to setup go2rtc.

Due to many issues with RTMP, it is now deprecated in favor of using the bundled go2rtc to provide an RTSP stream. Streams configured in go2rtc can also be used by Frigate to reduce connections to the camera, see the restream docs for more info.

Birdseye restreaming is also now supported at rtsp://frigate_ip:8554/birdseye

NOTE: Port 8554 will need to be mapped in the docker run or docker compose file for the restream to be accessed outside the container.

New live stream options

The bundled go2rtc also enables new MSE and WebRTC live view options in the frontend which enable low-latency full-framerate live views that support audio.

NOTES:

The live view options are set in the Frigate WebUI for each camera individually.

New detector types

Frigate now supports new detector types along with the Google Coral TPU.

OpenVINO

The OpenVINO detector type runs an OpenVINO IR model on Intel CPU, GPU and VPU hardware. OpenVINO is supported on 6th Gen Intel platforms (Skylake) and newer. A supported Intel platform is required to use the GPU device with OpenVINO. The MYRIAD device may be run on any platform, including Arm devices. For detailed system requirements, see OpenVINO System Requirements

TensorRT

NVidia GPUs may be used for object detection using the TensorRT libraries. Due to the size of the additional libraries, this detector is only provided in images with the -tensorrt tag suffix. The TensortRT detector is able to run on x86 hosts that have an Nvidia GPU which supports the 11.x series of CUDA libraries. The minimum driver version on the host system must be >=450.80.02. Also the GPU must support a Compute Capability of 5.0 or greater. This generally correlates to a Maxwell-era GPU or newer, check the TensorRT docs for more info.

NOTE: The link in the docs is for the final release location, for the beta the script is located at https://raw.githubusercontent.com/blakeblackshear/frigate/dev/docker/tensorrt_models.sh

New system page

The Debug page has been renamed to System. It now includes much more information and links to easily get vainfo and ffprobe data.

Screen Shot 2023-01-16 at 15 12 37 PM

The GPUs section will show each GPU based on the hwaccel args, depending on the type of GPU different information is supported. For example Nvidia GPUs will have the name while others will be generic, also intel does not support memory usage. There is also a VAINFO button which will make it easier to diagnose hwaccel issues and verify that the hwaccel driver is being used correctly. Note that this button does not work on all setups, and it doesn't necessarily indicate a problem.

Each camera will have their own process CPU & memory usage so it will be easier to see which process is using those resources. There is also an FFPROBE button which will be helpful to understand what each stream is presenting and make it easier to include that in support issues.

The debug config has also been removed, the config can be copied using the config page in the WebUI.

New storage page

Frigate WebUI now has a built in storage page which shows the general usage for both storage and memory. It also shows a per-camera storage usage and stream bandwidth. This should make it a lot easier to have a general idea how much storage is being used by each camera.

Screen Shot 2023-01-16 at 15 16 48 PM

New logs page

Frigate WebUI now has built in logs, this will make copying and viewing logs much easier. Currently the logs are static meaning the page must be refreshed to view new logs.

Screen Shot 2023-01-02 at 09 50 54 AM

New config editor

Frigate WebUI now has a built in config editor with syntax highlighting and schema validation. This means that the config will be validated before it can be saved which will make yaml config much easier to manage.

NOTE: The previous docker-compose or docker CLI may have had the /config.yml set to :ro or read-only. That will need to be removed for the config editor to be able to save the new file.

Screen Shot 2023-01-02 at 09 48 49 AM

MQTT is now optional

Frigate no longer requires MQTT to function, MQTT is also setup asynchronously so errors will be more clear and frigate won't stop when mqtt is enabled but not setup correctly.

NOTE: MQTT is still required for the Frigate-HomeAssistant Integration

No changes are needed for existing users.

FFMpeg presets

FFMPEG presets for common configurations are now added, making the config cleaner and allowing the underlying args to be changed between releases without being a breaking change. It is highly recommended to update the configuration to use these presets.

See https://deploy-preview-4055--frigate-docs.netlify.app/configuration/ffmpeg_presets for more info on how these should be used.

Example: Enabling Audio In Recordings

before:

output_args:
    record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v copy -c:a aac

after:

output_args:
  record: preset-record-generic-audio-aac

This also enables presets for hardware acceleration which will be used to further reduce CPU usage by using the GPU to optimize scaling and other workloads.

Improved events filters

Screen Shot 2023-01-02 at 09 21 31 AM

  • **Multi Select Filters:...
Read more

0.11.1 Release

08 Oct 21:53
2eada21
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.11.0...v0.11.1

Image: blakeblackshear/frigate:0.11.1

0.11.0 Release

22 Sep 23:58
3846a13
Compare
Choose a tag to compare

Major Changes for 0.11.0

🚨 🚨 BREAKING CHANGES 🚨 🚨

  • Several addon users have reported that a full uninstall and reinstall is necessary. In place upgrades are failing with a "Invalid build environment, can't build this add-on!" message in the supervisor logs.
  • If you are using the Home Assistant integration and/or custom lovelace card, be sure to update those to their latest releases as well.
  • Update to ffmpeg5 will break any custom input arguments using the stimeout parameter. This needs to be renamed to timeout in your config.
  • Some amd64 users may need to set the environment variable LIBVA_DRIVER_NAME=i965 to get similar hardware acceleration performance to previous versions.
  • Upgrading will run migrations on the database file that are not backwards compatible. In order to rollback to 0.10.0, you will either need to restore an old database file or delete the database files so they can be recreated.
  • This version includes a significant rework of the docker build. This may have broken ffmpeg hardware acceleration for some hardware that was working previously. Please open an issue if this happens so we can try and track down what's missing.
  • Some deployment approaches are overwriting the PATH environment value to an old value. If you see errors like No such file or directory: 'ffmpeg', then you need to stop overriding your PATH. This happens with both Proxmox LXC and Portainer (#3223)
  • The max_seconds config setting under events has been removed as it no longer has any effect

Frigate+ Integration

With this release, users can easily send snapshots to Frigate+ for labeling directly from the Events view. Note that Frigate+ is still in development, and custom models are not yet available. There is no cost to create an account and submit labeled images. Making it simpler to submit images should accelerate the build out of a robust training set.

To enable the Frigate+ functionality, you need to obtain an API Key from your Frigate+ account on the settings page and set it via the PLUS_API_KEY environment variable or in the addon configuration page. Note that this cannot be set in the yml configuration file. It must be set in your compose file or docker command.

image

Here is the roadmap for Frigate+:

  • Launch web version allowing manual upload of training examples and labeling
  • Integrate submission in Frigate
  • Launch Frigate optimized models
  • Launch individually optimized models
  • Integrate labeling and suggestions in Frigate

Updated Events View

  • Speed. The events view has been completely revamped and should be much faster than it was before.
  • Slightly larger thumbnails.
  • You no longer have to refresh the page to see the latest events.
  • You can "star" or "favorite" events to tell Frigate to keep associated recordings and the snapshot indefinitely.
  • Sub labels have been added to allow setting arbitrary labels on events. For example, you can use deepstack to run facial recognition and update the event with the name of the person detected. (#2949)

Updated Recordings View

  • Speed. The recordings view doesn't look different, but it has been completely overhauled. It should be much faster, and event data and thumbnails are lazy loaded to reduce the amount of data that is loaded when visiting the page.
  • Smoother seeking and transitions. Re-renders of the player have been reduced and you should see smoother seek behavior when selecting events.
  • 16x playback was added for browsers other than Firefox.

Updated Dockerbuild

  • Frigate is now built on top of plain Debian containers and consolidated into a single multiarch image. Support for nvidia decoding is built into the single image. There is no longer a need for a special tag.

Experimental Timeline UI

Not recommended for use yet, but an alternative timeline UI has been added. It has very limited browser/device support. #2830

Other changes

  • MQTT sensors for any object type #2908
  • Update latest object endpoints to reference most recent event from database (you will no longer see black images for objects under the camera in live view) #2944
  • Added a new ratio filter for object filters #2952
  • Camera recordings always in sidebar #2846
  • Enable and set mode per camera for birdseye #3083
  • Customize order and hide cameras from the UI #2981
  • Enable improve_contrast via MQTT #3011
  • Enable/disable motion detection independent of object detection via MQTT #3117
  • MQTT topic for motion detection #3152
  • Batch deletes of recordings when more than 100,000 recordings need to be deleted
  • Switch to Btbn ffmpeg builds
  • Improve cache handling for thumbnails and snapshots of completed events
  • Fixes hwaccel issues for Raspberry Pi users
  • Updates to debian 11 as a base image
  • Consolidate Dockerfile to enable multiarch images
  • Birdseye icon can now be customized #2979
  • Frigate now checks for a newer release on startup and exposes that in the stats endpoint #3038
  • Initial implementation of mypy and type checking
  • Images from backend now have appropriate cache headers
  • Motion contour_area and threshold values can now be adjusted dynamically via mqtt (#3154)
  • Fix bug with bounding boxes outside of frame
  • Ensure playlist is in front of error messages in videojs
  • Fixes for H265 events and recordings in browsers with native support for H265 (thanks @uvjustin)
  • Fixes for stuttering playback issues in some circumstances (thanks @uvjustin)

Full Changelog: v0.10.1...v0.11.0

Image: blakeblackshear/frigate:0.11.0

Release 0.10.1

11 Mar 04:11
Compare
Choose a tag to compare

Changes:

  • Make dynamic contrast optional and disable by default
  • Cleanup print statement

Full Changelog: v0.10.0...v0.10.1

Images:

  • x86: blakeblackshear/frigate:0.10.1-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.10.1-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.10.1-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.10.1-aarch64

0.10.0 Release

19 Feb 04:12
Compare
Choose a tag to compare

Major Changes for 0.10.0

BREAKING CHANGES

Camera Names

Camera names in the config file must be URL safe starting with this version. Only A-Z, a-z, 0-9, -, and _ are permitted. If your cameras need to be renamed, any associated events will be retained based on your global retain settings, not the new camera name settings. If you want to retain recordings from the previous camera name, you need to ensure you have retain days set globally. For example:

record: #  <---------- global setting
  retain:
    days: 7 # <------- will retain 7 days of recordings for old cameras

Retain modes

This release adds the ability to define retain modes for the initial retention period and for event data beyond the initial retain period. There are three modes:

  • all: retain all recording segments. This is consistent with the previous behavior
  • motion: retain only the recording segments that have some motion
  • active_objects: retain only the recording segments that have a moving true positive object that is being tracked

The default record settings will retain only segments that have motion for events.

Note that the retain_days config entry has been DEPRECATED. This release includes backwards compatibility, but you should migrate to the new format.

Example: Store all segments with motion for 7 days and events with active objects for 14 days.

record:
  enabled: True
  retain:
    days: 7
    mode: motion
  events:
    retain:
      default: 14
      mode: active_objects

Stationary objects

Frigate will now continue to track objects after they are stationary. This enables use cases such as presence detection. After an object has been stationary for 10 frames, object detection for the object will be paused (the new stationary -> interval setting allows periodic checks too) until there is new movement. An object is determined to be stationary if the bounding box in the current frame overlaps almost entirely with the previous 10 frames. I have been testing this in my home office, and it works quite well.

I expect this to disrupt the way a few people are using Frigate. For example, a car that enters the driveway, parks, and then leaves 5 hours later will be one continuous event. The zones will stay with the tracked object over this lifetime, so when the car leaves, it will still have zones associated from when it first arrived. Ensure you use the right retain mode to ensure you only capture the segments you want.

Depending on the specifics of your room, you may need to tune your resolution and motion settings to get the results you want. In my office, I reduced the resolution to 640x360 and increased the contour_area setting for motion detection up to 125 to reduce the sensitivity. I recommend watching the debug view and adjusting as needed.

The following settings have been added to tune stationary tracking:

detect:
  ...
  # Optional: Configuration for stationary object tracking
  stationary:
    # Optional: Frequency for running detection on stationary objects (default: shown below)
    # When set to 0, object detection will never be run on stationary objects. If set to 10, 
    # it will be run on every 10th frame.
    interval: 0
    # Optional: Number of frames without a position change for an object to be considered 
    # stationary (default: 10x the frame rate or 10s)
    threshold: 50
    # Optional: Define a maximum number of frames for tracking a stationary object (default: not set, track forever)
    # This can help with false positives for objects that should only be stationary for a limited amount of time.
    # It can also be used to disable stationary object tracking. For example, you may want to set a value for person,
    # but leave car at the default.
    max_frames:
      # Optional: Default for all object types (default: not set, track forever)
      default: 3000
      # Optional: Object specific values
      objects:
        person: 1000

fixes #841

In progress events and cache handling

Events are now stored in the database while in progress, so you can expect to see In progress for some events under end time in the Events view.

Recording segments written to the cache are now only moved to the recordings folder if they overlap with an event (in-progress events too). For those with retain_days set to 0, this eliminates disk I/O when there are no events. Frigate will no longer store a minimum of 5 minutes of recording segments for each camera, so now you can enable recording without worrying about SD/SSD wear.

Lastly, more proactive cache maintenance was implemented to prevent the cache disk from filling up. You should never see more than 7 segments in the cache for each camera. You can also see the time it takes to copy to the recordings disk by setting frigate.record: debug in the logger config. Additional error handling was also implemented to prevent the cache maintenance thread from stopping on errors.

Now that recordings are managed proactively, recordings are expired according to the retention settings at the interval set in the expire_interval setting (defaults to once per hour).

fixes #1885

Motion detection improvements

0.9.0 introduced dynamic motion sensitivity which didn't work out well. For many users, this made motion detection too sensitive which increased CPU usage due to more motion causing more object detection. It also increased false positive detections due to the increased frequency for detections on areas without substantial motion.

In this release, motion detection has been reset back to better defaults for frame_height and contour_area. If you have customized either frame_height or contour_area in the past, it is recommended that you remove those for your camera and let them revert back to the new defaults. For most users, the sensitivity can be tuned by adjusting contour_area (smaller numbers are more sensitive and larger numbers are less sensitive). For very high resolutions with very small objects, the frame_height may need to be increased.

In addition, this release brings about dynamic contrast adjustment for motion detection. Based on my testing, this substantially improves night time detection with IR lights and other low contrast situations. It may result in more false positives at night.

Other changes

  • Improved logic for merging motion, bounding boxes, and regions
  • Report coral temperature stats when available (USB Coral not supported)
  • Limit the cache time for playlist urls to avoid recording playback failures
  • Allow yaml extension in addition to yml
  • Sync database recordings with the disk on startup
  • Store motion and objects data in database
  • Entered zones in mqtt messages are now sorted based on the order the object entered zones
  • Frigate now scans for objects in the frame on startup
  • Detected objects that never move no longer generate events or snapshots
  • Make recording expiration interval configurable (previously hard coded to 60 minutes)
  • New event datepicker in the events viewer
  • Require camera names to be url safe
  • Ensure clean snapshots are deleted when deleting events
  • Fix bug when last recording in the database does not exist on disk
  • Randomize the region slightly to try and reduce lost true positives
  • Allow recording motion even when detect is disabled
  • Add stacktrace to config errors
  • Tweak error messages when ffmpeg fails
  • Update has_clip to false when an event fails to play
  • Handle rare divide by zero in fps calculation
  • Recordings link is always visible in the UI even when record is disabled
  • Playback rate is retained in recordings viewer

Fixes

Full Changelog: v0.9.4...v0.10.0

Images:

  • x86: blakeblackshear/frigate:0.10.0-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.10.0-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.10.0-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.10.0-aarch64

0.9.4 Release

24 Oct 19:17
Compare
Choose a tag to compare

Bug Fixes:

  • Fix rtmp global config again 🤦

Full Changelog: v0.9.3...v0.9.4

Images:

  • x86: blakeblackshear/frigate:0.9.4-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.9.4-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.9.4-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.9.4-aarch64

0.9.3 Release

24 Oct 02:12
Compare
Choose a tag to compare

Bug Fixes:

  • Fix cleanup of legacy recordings
  • Prevent config validation failure when rtmp disabled globally
  • Revert switch to mpegts for default segment format (0.9.2 issues)
  • Revert default to including audio (0.9.2 issues)

Changes:

  • Improve performance of cache loop

Full Changelog: v0.9.2...v0.9.3

Images:

  • x86: blakeblackshear/frigate:0.9.3-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.9.3-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.9.3-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.9.3-aarch64

0.9.2 Release

20 Oct 12:01
25bb515
Compare
Choose a tag to compare

NOTICE: There are some known issues with this release.

Bug Fixes:

  • Fix bug causing some recording segments to expire early within an event

Changes:

  • Switch to mpegts container type for recording cache to reduce lost footage if ffmpeg exits
  • Clearer log messages on invalid config
  • Assume default roles when a single input is specified
  • Restrict max size of live view to specified resolution
  • Audio is included by default in recordings

Images:

  • x86: blakeblackshear/frigate:0.9.2-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.9.2-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.9.2-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.9.2-aarch64

0.9.1 Release

05 Oct 23:57
b821887
Compare
Choose a tag to compare

This version is not compatible with the current version of the Home Assistant integration for clips in notifications or the media browser. You will need to use the v2.0.0 pre-release of the integration.

Major Changes for 0.9.x

There are quite a few significant changes to the config for this release. Updated config reference is available here.

BREAKING: Clips have been merged into Recordings

Frigate now records footage from the camera one time. You define retention settings to determine what you want to keep. You can set it to retain all footage for the number of days you want and/or have a different retention setting for recorded footage that contains detected objects. When you view footage for an event, you are viewing the recorded footage for the time where the event occurred. The "Download Clip" button on the event view will dynamically create an mp4 from the recordings for download.

Separating events and recording this way has significant benefits. Overlapping events no longer mean that the same video footage is stored multiple times on disk. Also, the issue with the cache expiring for long running events is eliminated.

If I used clips without 24/7 recording before, does this mean I have to now record 24/7?

No. If you only want to store footage of events, the following config should be used:

record:
  enabled: true
  retain_days: 0
  events:
    retain:
      default: 10

BREAKING: width/height/fps moved under detect

Due to regular confusion about which input the height/width/fps applied to, these settings have been moved under the detect section of the config. Here is an example of a simple config:

cameras:
  back:
    ffmpeg:
      inputs:
        - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2
          roles:
            - detect
    detect:
      width: 1280
      height: 720
      fps: 5

Recordings Viewer

There is now a way to view recorded footage directly in the WebUI. Browse your recordings and events with a collapsible timeline view.

Fullscreen Desktop (Collapsed)
Fullscreen UI Desktop Collapsed
Mobile Mobile Fullscreen
Mobile IMG_4298

Birdseye

A live, dynamic grid view of all cameras with activity. It has 3 modes:

  • objects: includes any cameras with detected objects
  • motion: includes any cameras with detected motion
  • continuous: all cameras all the time

It is designed to minimize the bandwidth used, so when there are no active cameras, you just get a black screen with the frigate logo.

image

Live View

When selecting a camera, the live view now uses JSMpeg, which results in about an 80% reduction in bandwidth required vs mjpeg. This view does not support adding overlay information. Tapping on the feed supports full screen viewing on some devices. The mjpeg debug view with overlays is still available at the top right.

image

Other changes

  • Remove tmpfs_cache_size setting as it is no longer needed for hassos
  • Delete events from the UI
  • Code cleanup and refactors
  • Convert config to pydantic to support future config editor
  • Support for self signed certs and key auth with MQTT
  • has_clip and has_snapshot added to events mqtt topic payload
  • snapshot_time added to events mqtt topic to determine if an updated snapshot is available
  • Clean PNG snapshots alongside jpg for future training purposes
  • Ability to customize timestamp drawn on snapshots and the debug video feed
  • Dynamic motion detection defaults based on resolution (#1176)
  • Adds option to specify jpeg quality on various http endpoints and in config (#821)
  • Trigger a restart from WebUI or via MQTT
  • Labelmap can now be customized via config (#507)
  • Add version to the logs on startup
  • Improve reliability of restart handling
  • Allow partial days in retention settings (0.5 will now save half of a day)
  • Add region/box/area to the database and api endpoints for events
  • Run nginx as root (this resolves permissions issues for many users)
  • Change theme color from red for iOS and Android

0.9.1 Bugfixes

  • Fix logo load for birdseye view

Images:

  • x86: blakeblackshear/frigate:0.9.1-amd64
  • x86 w/ nvidia (for ffmpeg only): blakeblackshear/frigate:0.9.1-amd64nvidia
  • Raspberry Pi 3/4 (32bit): blakeblackshear/frigate:0.9.1-armv7
  • Raspberry Pi 4 (64bit): blakeblackshear/frigate:0.9.1-aarch64