sig
  module RGB8 :
    sig
      module Color :
        sig
          type t = int * int * int
          val of_int : int -> Image.RGB8.Color.t
        end
    end
  module YUV420 :
    sig
      type data =
          (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      type t
      val width : Image.YUV420.t -> int
      val height : Image.YUV420.t -> int
      val create : int -> int -> Image.YUV420.t
      val blank_all : Image.YUV420.t -> unit
      val make :
        int ->
        int ->
        Image.YUV420.data ->
        int ->
        Image.YUV420.data -> Image.YUV420.data -> int -> Image.YUV420.t
      val internal :
        Image.YUV420.t ->
        (Image.YUV420.data * int) *
        (Image.YUV420.data * Image.YUV420.data * int)
    end
  module BGRA :
    sig
      type t
      type data =
          (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      val data : Image.BGRA.t -> Image.BGRA.data
    end
  module RGBA32 :
    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
  module Generic :
    sig
      exception Not_implemented
      module Pixel :
        sig
          type rgb_format = RGB24 | BGR24 | RGB32 | BGR32 | RGBA32
          type yuv_format =
              YUV422
            | YUV444
            | YUV411
            | YUV410
            | YUVJ420
            | YUVJ422
            | YUVJ444
          type format =
              RGB of Image.Generic.Pixel.rgb_format
            | YUV of Image.Generic.Pixel.yuv_format
          val string_of_format : Image.Generic.Pixel.format -> string
        end
      type data =
          (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
          Bigarray.Array1.t
      type t
      val width : Image.Generic.t -> int
      val height : Image.Generic.t -> int
      val pixel_format : Image.Generic.t -> Image.Generic.Pixel.format
      val make_rgb :
        Image.Generic.Pixel.rgb_format ->
        ?stride:int -> int -> int -> Image.Generic.data -> Image.Generic.t
      val rgb_data : Image.Generic.t -> Image.Generic.data * int
      val yuv_data :
        Image.Generic.t ->
        (Image.Generic.data * int) *
        (Image.Generic.data * Image.Generic.data * int)
      val of_RGBA32 : Image.RGBA32.t -> Image.Generic.t
      val of_YUV420 : Image.YUV420.t -> Image.Generic.t
      val convert :
        ?copy:bool ->
        ?proportional:bool ->
        ?scale_kind:Image.RGBA32.Scale.kind ->
        Image.Generic.t -> Image.Generic.t -> unit
    end
end