README.md

# ai-jiggle-video

A helpful Elixir library for programmatically applying subtle, randomized movements to video frames, creating a "jiggle" effect. This can be useful for adding dynamism or simulating hand-held camera footage.

## Installation

Add `ai_jiggle_video` to your list of dependencies in `mix.exs`:
elixir
def deps do
  [
    {:ai_jiggle_video, "~> 0.1.0"} # Replace with the actual version
  ]
end

Then, run `mix deps.get` to fetch the dependency.

## Usage Examples

This library provides functions to manipulate video frames based on configurable parameters. Here are a few examples:

**1. Basic Jiggle:**
elixir
frame = %{width: 640, height: 480, data: "binary_frame_data"} # Example frame data

jiggled_frame =
  AiJiggleVideo.jiggle_frame(frame)

# jiggled_frame now contains the modified frame data.

**2. Custom Jiggle Intensity:**
elixir
frame = %{width: 640, height: 480, data: "binary_frame_data"}

jiggled_frame =
  frame
  |> AiJiggleVideo.jiggle_frame(%{intensity: 0.75}) # Intensity between 0.0 and 1.0

# jiggled_frame now contains the modified frame with the specified intensity.

**3. Applying Jiggle to a Sequence of Frames (using Enum.map):**
elixir
frames = [%{width: 640, height: 480, data: "frame_1"}, %{width: 640, height: 480, data: "frame_2"}]

jiggled_frames =
  frames
  |> Enum.map(&AiJiggleVideo.jiggle_frame(&1, %{intensity: 0.5, frequency: 2}))

# jiggled_frames now contains the list of modified frames.

**4. Pattern Matching for Specific Frame Types:**
elixir
defmodule VideoProcessor do
  def process_frame(%{type: :i_frame, data: data} = frame) do
    AiJiggleVideo.jiggle_frame(frame, %{intensity: 0.8})
  end

  def process_frame(frame) do
    # Handle other frame types (e.g., P-frames, B-frames) without jiggle
    frame
  end
end

frame = %{type: :i_frame, width: 640, height: 480, data: "i_frame_data"}

jiggled_frame = VideoProcessor.process_frame(frame)

**5.  Piping with Custom Configuration:**
elixir
frame = %{width: 640, height: 480, data: "binary_frame_data"}

jiggled_frame =
  frame
  |> AiJiggleVideo.configure_jiggle(%{intensity: 0.6, x_offset: 5, y_offset: 3})
  |> AiJiggleVideo.jiggle_frame()

## Feature Summary

*   **Simple API:** Easy-to-use functions for applying jiggle effects.
*   **Configurable Intensity:** Control the amount of jiggle applied.
*   **Frame-Based Operation:** Designed to work with individual video frames.
*   **Customizable Offsets:** Fine-tune the horizontal and vertical movement.
*   **Extensible:** Easily integrate with existing video processing pipelines.

## License

MIT

This package is part of the ai-jiggle-video ecosystem. For advanced features and enterprise-grade tools, visit: https://supermaker.ai/video/ai-jiggle-video/