You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+69Lines changed: 69 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,74 @@
1
1
# Changelog
2
2
3
+
## Image 0.67.0
4
+
5
+
### Breaking Changes
6
+
7
+
***`Image.Classification` and `Image.Generation` have moved to a new sibling package, [`:image_detection`](https://hex.pm/packages/image_detection).** The two modules keep their fully-qualified names (`Image.Classification` and `Image.Generation`) so that existing call sites continue to work — they just live in a different OTP application now. To restore the previous functionality, add `:image_detection` to your `mix.exs`:
8
+
9
+
def deps do
10
+
[
11
+
{:image, "~> 0.67"},
12
+
{:image_detection, "~> 0.1"},
13
+
# plus your preferred Nx backend, e.g.
14
+
{:exla, "~> 0.10"}
15
+
]
16
+
end
17
+
18
+
***`:bumblebee` is no longer a dependency of `:image`.** It is brought in transitively only when you add `:image_detection`. The `:nx`, `:nx_image`, `:scholar`, `:exla`, and `:rustler` optional deps stay in `:image` because `Image.to_nx/2`, `Image.from_nx/1`, `Image.k_means/2`, and a few internal pipelines still use them.
19
+
20
+
***`Image.bumblebee_configured?/0` has been removed.** It is replaced by `ImageDetection.bumblebee_configured?/0` which lives in the new package.
21
+
22
+
***`Image.Application` no longer autostarts the classification or generation services.** That responsibility moved to `ImageDetection.Application`, which manages its own `ImageDetection.Supervisor`. Both services default to `autostart: false` in the new package — you opt in via `config :image_detection, :classifier, autostart: true` (or `:generator`).
23
+
24
+
***`config :image, :classifier` and `config :image, :generator` no longer have any effect.** Move them to `config :image_detection, :classifier` / `:generator` in your `runtime.exs` (or equivalent).
25
+
26
+
* The `doctest Image.Classification` line has been removed from `test/image_test.exs` since the module is no longer part of `:image`.
27
+
28
+
### Enhancements
29
+
30
+
*`:image` no longer pulls `:bumblebee` (or its transitive deps) into the dependency graph. For users who don't need ML-backed classification/generation, the install footprint shrinks substantially. The Hex tarball is unchanged in size, but the dependency tree is much lighter.
31
+
32
+
* The `image_detection` package's `bumblebee_configured?/0` predicate only checks for `Nx` and `Bumblebee` at compile time; the Nx backend (e.g. `:exla`) is now a runtime-only requirement. Users who want to compile against `image_detection` no longer have to install EXLA on their build machine.
33
+
34
+
## Image 0.66.0
35
+
36
+
This release replaces the eVision-backed video frame extraction with an FFmpeg-backed implementation via `:xav`.
37
+
38
+
### Breaking Changes
39
+
40
+
***`Image.Video` is now backed by [Xav](https://hex.pm/packages/xav)** (a thin Elixir wrapper around FFmpeg) instead of `:evision` / OpenCV. The public API surface is largely unchanged but the underlying type, options, and a few semantic details have moved:
41
+
42
+
* The video struct is now `%Image.Video{}` (with fields `:reader`, `:source`, `:fps`, `:duration_seconds`, `:frame_count`, `:width`, `:height`) rather than `%Evision.VideoCapture{}`. Pattern-match on the new struct module if your code does so.
43
+
44
+
*`Image.Video.open/2`'s `:backend` option has been removed. FFmpeg picks the demuxer automatically and there is no concept of pluggable backends in Xav.
45
+
46
+
*`Image.Video.known_backends/0`, `available_backends/0`, `known_backend?/1`, `known_backend_values/0`, and `available_backend?/1` have been removed for the same reason. `Image.Options.Video` (the module that owned the backend table) has been deleted.
47
+
48
+
* Camera input is now opened via a platform-specific device path. `:default_camera` resolves to `/dev/video0` on Linux, `"0"` (AVFoundation device 0) on macOS, and `"video=0"` on Windows. An integer camera index is mapped to the corresponding `/dev/videoN` (or platform equivalent). For non-default cameras you can also pass an explicit FFmpeg device string.
49
+
50
+
* Frame-based seeking (`Image.Video.seek/2` with `frame: n`, and `Image.Video.image_from_video/2` with `frame: n`) is now implemented as a time-based seek to `n / fps` followed by zero or more `next_frame` calls. For most files this lands on the requested frame; for very inter-frame-compressed files FFmpeg may snap to the nearest preceding keyframe.
51
+
52
+
*`Image.Video.close/1` is now a no-op that returns `{:ok, %Image.Video{reader: nil}}`. Xav garbage-collects the underlying FFmpeg context, so explicit close is no longer necessary. The function is retained for source compatibility; subsequent operations on the closed struct return `{:error, %Image.Error{reason: :video_closed}}`.
53
+
54
+
* Image and audio frames are decoded by FFmpeg + libswscale rather than by OpenCV's videoio backend. Pixel-exact comparisons against fixtures generated by the previous version will not match; the test fixture `test/support/validate/video/video_sample_frame_0.png` has been regenerated.
55
+
56
+
***`:xav` is now an optional dependency.** Add it to your `mix.exs` if you use `Image.Video`:
57
+
58
+
{:xav, "~> 0.10", optional: true}
59
+
60
+
Xav requires FFmpeg ≥ 6.0 on the system.
61
+
62
+
***`:evision` is no longer needed for `Image.Video`.** It is still required for `Image.QRcode` and for the `Image.to_evision/2` / `Image.from_evision/1` interop helpers, which are unchanged. The README's optional-dependency table reflects the new split.
63
+
64
+
### Enhancements
65
+
66
+
*`Image.Video` now supports HTTP/HTTPS/RTSP/RTMP URLs as video sources for free, since FFmpeg supports them natively.
67
+
68
+
*`Image.xav_configured?/0` is the new compile-time predicate that gates the `Image.Video` module (analogous to `Image.evision_configured?/0` and `Image.bumblebee_configured?/0`).
69
+
70
+
* The `Image.Video.frame_to_image/1` helper exposes the raw `Xav.Frame` → `Vix.Vips.Image.t()` conversion (used internally by `image_from_video/2` and `stream!/2`). Useful if you have a frame from elsewhere in the Xav ecosystem and want to bring it into `Image`.
71
+
3
72
## Image 0.65.0
4
73
5
74
This release prepares the library for a 1.0 tag. It is dominated by API hygiene rather than new features.
0 commit comments