sig
  module Color : sig type t = int * int * int * int end
  type data =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
  type t
  val width : Image.RGBA32.t -> int
  val height : Image.RGBA32.t -> int
  val dimensions : Image.RGBA32.t -> int * int
  val data : Image.RGBA32.t -> Image.RGBA32.data
  val stride : Image.RGBA32.t -> int
  val create : int -> int -> Image.RGBA32.t
  val make : ?stride:int -> int -> int -> Image.RGBA32.data -> Image.RGBA32.t
  val get_pixel : Image.RGBA32.t -> int -> int -> Image.RGBA32.Color.t
  val set_pixel :
    Image.RGBA32.t -> int -> int -> Image.RGBA32.Color.t -> unit
  val copy : Image.RGBA32.t -> Image.RGBA32.t
  val blit :
    ?blank:bool ->
    ?x:int ->
    ?y:int -> ?w:int -> ?h:int -> Image.RGBA32.t -> Image.RGBA32.t -> unit
  val blit_all : Image.RGBA32.t -> Image.RGBA32.t -> unit
  val of_RGB24_string : string -> int -> Image.RGBA32.t
  val to_RGB24_string : Image.RGBA32.t -> string
  val of_BGRA : Image.BGRA.t -> Image.RGBA32.t
  val to_BGRA : Image.RGBA32.t -> Image.BGRA.t
  val of_YUV420 : Image.YUV420.t -> Image.RGBA32.t
  val to_int_image : Image.RGBA32.t -> int array array
  val to_BMP : Image.RGBA32.t -> string
  val of_PPM : ?alpha:Image.RGB8.Color.t -> string -> Image.RGBA32.t
  val swap_rb : Image.RGBA32.t -> unit
  val add :
    ?x:int ->
    ?y:int -> ?w:int -> ?h:int -> Image.RGBA32.t -> Image.RGBA32.t -> unit
  val fill_all : Image.RGBA32.t -> Image.RGBA32.Color.t -> unit
  val blank_all : Image.RGBA32.t -> unit
  val randomize_all : Image.RGBA32.t -> unit
  module Scale :
    sig
      type kind = Linear | Bilinear
      val onto :
        ?kind:Image.RGBA32.Scale.kind ->
        ?proportional:bool -> Image.RGBA32.t -> Image.RGBA32.t -> unit
      val create :
        ?kind:Image.RGBA32.Scale.kind ->
        ?copy:bool ->
        ?proportional:bool -> Image.RGBA32.t -> int -> int -> Image.RGBA32.t
    end
  module Effect :
    sig
      val translate : Image.RGBA32.t -> int -> int -> unit
      val affine : Image.RGBA32.t -> float -> float -> int -> int -> unit
      val flip : Image.RGBA32.t -> unit
      val greyscale : Image.RGBA32.t -> unit
      val sepia : Image.RGBA32.t -> unit
      val lomo : Image.RGBA32.t -> unit
      val invert : Image.RGBA32.t -> unit
      val rotate : Image.RGBA32.t -> float -> unit
      val mask : Image.RGBA32.t -> Image.RGBA32.t -> unit
      val box_blur : Image.RGBA32.t -> unit
      module Alpha :
        sig
          val blur : Image.RGBA32.t -> unit
          val scale : Image.RGBA32.t -> float -> unit
          val disk : Image.RGBA32.t -> int -> int -> int -> unit
          val of_color : Image.RGBA32.t -> Image.RGB8.Color.t -> int -> unit
        end
    end
  module Draw :
    sig
      val line :
        Image.RGBA32.t ->
        Image.RGBA32.Color.t -> int * int -> int * int -> unit
    end
  module Motion :
    sig
      val compute : int -> Image.RGBA32.t -> Image.RGBA32.t -> int * int
      module Multi :
        sig
          type vectors
          val compute :
            int ->
            Image.RGBA32.t ->
            Image.RGBA32.t -> Image.RGBA32.Motion.Multi.vectors
          val median_denoise : Image.RGBA32.Motion.Multi.vectors -> unit
          val mean : Image.RGBA32.Motion.Multi.vectors -> int * int
          val arrows :
            Image.RGBA32.Motion.Multi.vectors -> Image.RGBA32.t -> unit
        end
    end
end