sig
  val magick_core_genesis : unit -> unit
  val magick_core_terminus : unit -> unit
  type exception_info
  val magick_exception_info_acquire : unit -> Magick.exception_info
  val magick_exception_info_destroy : Magick.exception_info -> unit
  type image_info
  val magick_image_info_clone : unit -> Magick.image_info
  val magick_image_info_destroy : Magick.image_info -> unit
  val magick_image_info_clone_some : Magick.image_info -> Magick.image_info
  val magick_image_info_set_filename : Magick.image_info -> string -> unit
  val magick_image_info_set_size : Magick.image_info -> string -> unit
  external _magick_exception_info_acquire : unit -> Magick.exception_info
    = "caml_magick_exception_info_acquire"
  external _magick_exception_info_destroy : Magick.exception_info -> unit
    = "caml_magick_exception_info_destroy"
  external _magick_image_info_clone : unit -> Magick.image_info
    = "caml_magick_image_info_clone"
  external _magick_image_info_destroy : Magick.image_info -> unit
    = "caml_magick_image_info_destroy"
  external _magick_image_info_clone_some :
    Magick.image_info -> Magick.image_info
    = "caml_magick_image_info_clone_some"
  external _magick_image_info_set_size : Magick.image_info -> string -> unit
    = "caml_magick_image_info_set_size"
  external _magick_image_info_is_null : Magick.image_info -> bool
    = "caml_magick_image_info_is_null"
  external _magick_core_genesis : string array -> unit
    = "caml_magick_core_genesis"
  external _magick_core_terminus : unit -> unit = "caml_magick_core_terminus"
  type image
  val magick_image_destroy : Magick.image -> unit
  val magick_image_set_filename : Magick.image -> string -> unit
  val magick_image_read :
    Magick.image_info -> Magick.exception_info -> Magick.image
  val magick_image_write : Magick.image_info -> Magick.image -> unit
  type color = int * int * int * int
  val magick_image_new :
    Magick.image_info -> int -> int -> Magick.color -> Magick.image
  val magick_image_display : Magick.image_info -> Magick.image -> unit
  val magick_image_blur :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_spread :
    Magick.image -> radius:float -> Magick.exception_info -> Magick.image
  val magick_image_sharpen :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_shade :
    Magick.image ->
    gray:bool ->
    azimuth:float -> elevation:float -> Magick.exception_info -> Magick.image
  val magick_image_emboss :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_edge :
    Magick.image -> radius:float -> Magick.exception_info -> Magick.image
  val magick_image_despeckle :
    Magick.image -> Magick.exception_info -> Magick.image
  val magick_image_charcoal :
    Magick.image ->
    radius:float -> sigma:float -> Magick.exception_info -> Magick.image
  val magick_image_modulate : Magick.image -> modulate:string -> unit
  val magick_image_negate : Magick.image -> unit
  val magick_image_equalize : Magick.image -> unit
  val magick_image_scale :
    Magick.image -> int * int -> Magick.exception_info -> Magick.image
  module ColorSpace :
    sig type t = RGB | GRAY | CMYK | HSL | CMY | Luv | LCHab | LCHuv end
  val magick_image_colorspace_transform :
    Magick.image -> Magick.ColorSpace.t -> unit
  module CompositeOp :
    sig
      type t =
          ColorBurn
        | ColorDodge
        | Colorize
        | Darken
        | DstAtop
        | DstIn
        | DstOut
        | DstOver
        | Difference
        | Displace
        | Dissolve
        | Exclusion
        | HardLight
        | Hue
        | In
        | Lighten
        | LinearLight
        | Luminize
        | MinusDst
        | Modulate
        | Multiply
        | Out
        | Over
        | Overlay
        | Plus
        | Saturate
        | Screen
        | SoftLight
        | SrcAtop
        | Src
        | SrcIn
        | SrcOut
        | SrcOver
        | ModulusSubtract
        | Threshold
        | Xor
        | DivideDst
        | Distort
        | Blur
        | PegtopLight
        | VividLight
        | PinLight
        | LinearDodge
        | LinearBurn
        | DivideSrc
        | MinusSrc
        | Blend
        | Bumpmap
        | HardMix
    end
  val magick_image_composite :
    Magick.image ->
    Magick.CompositeOp.t -> Magick.image -> int -> int -> unit
  type draw_info
  val magick_draw_info_acquire : unit -> Magick.draw_info
  val magick_draw_info_destroy : Magick.draw_info -> unit
  val magick_draw_info_set_fill : Magick.draw_info -> Magick.color -> unit
  val magick_draw_info_set_stroke : Magick.draw_info -> Magick.color -> unit
  val magick_draw_info_set_stroke_width : Magick.draw_info -> float -> unit
  val magick_draw_info_set_primitive : Magick.draw_info -> string -> unit
  val magick_draw_info_set_font : Magick.draw_info -> string -> unit
  val magick_draw_info_set_pointsize : Magick.draw_info -> float -> unit
  val magick_image_draw : Magick.image -> Magick.draw_info -> unit
  val magick_get_quantum_depth : unit -> int
  val magick_get_quantum_range : unit -> float
  val magick_get_quantum_scale : unit -> float
  val magick_get_max_map : unit -> int
  val magick_get_max_colormap_size : unit -> int
  module Magick :
    sig
      val image_read : string -> Magick.image
      val new_image : int -> int -> Magick.color -> Magick.image
      val image_display : Magick.image -> unit
      val image_write : Magick.image -> filename:string -> unit
      val image_charcoal :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_blur :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_spread : Magick.image -> radius:float -> Magick.image
      val image_sharpen :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_shade :
        Magick.image ->
        gray:bool -> azimuth:float -> elevation:float -> Magick.image
      val image_edge : Magick.image -> radius:float -> Magick.image
      val image_despeckle : Magick.image -> Magick.image
      val image_emboss :
        Magick.image -> radius:float -> sigma:float -> Magick.image
      val image_colorspace_transform :
        Magick.image -> Magick.ColorSpace.t -> unit
      val image_scale : Magick.image -> size:int * int -> Magick.image
      val image_composite :
        Magick.image ->
        Magick.CompositeOp.t -> Magick.image -> int -> int -> unit
      val image_modulate : Magick.image -> modulate:int * int * int -> unit
      val image_brightness : Magick.image -> int -> unit
      val image_saturation : Magick.image -> int -> unit
      val image_hue : Magick.image -> int -> unit
      val image_negate : Magick.image -> unit
      val image_equalize : Magick.image -> unit
      module Color :
        sig
          type t = Magick.color
          val map8 : Magick.Magick.Color.t -> Magick.Magick.Color.t
        end
      module Prim :
        sig
          type t
          val draw_point : int * int -> Magick.Magick.Prim.t
          val draw_line : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_rectangle : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_circle : int * int -> int -> Magick.Magick.Prim.t
          val draw_ellipse : int * int -> int * int -> Magick.Magick.Prim.t
          val draw_qbcurve :
            int * int -> int * int -> int * int -> Magick.Magick.Prim.t
          val draw_cbcurve :
            int * int ->
            int * int -> int * int -> int * int -> Magick.Magick.Prim.t
          val draw_polygon : (int * int) list -> Magick.Magick.Prim.t
          val draw_text : int * int -> string -> string
        end
      val fill_primitive :
        Magick.image ->
        prim:Magick.Magick.Prim.t ->
        ?fill:Magick.Magick.Color.t -> unit -> unit
      val stroke_primitive :
        Magick.image ->
        prim:Magick.Magick.Prim.t ->
        ?stroke:Magick.Magick.Color.t -> ?stroke_width:float -> unit -> unit
      val draw_text :
        Magick.image ->
        pos:int * int ->
        s:string ->
        ?font:string ->
        ?pointsize:float ->
        ?fill:Magick.Magick.Color.t ->
        ?stroke:Magick.Magick.Color.t -> ?stroke_width:float -> unit -> unit
    end
  type exception_type =
      UndefinedException
    | WarningException
    | TypeWarning
    | OptionWarning
    | DelegateWarning
    | MissingDelegateWarning
    | CorruptImageWarning
    | FileOpenWarning
    | BlobWarning
    | StreamWarning
    | CacheWarning
    | CoderWarning
    | FilterWarning
    | ModuleWarning
    | DrawWarning
    | ImageWarning
    | WandWarning
    | RandomWarning
    | XServerWarning
    | MonitorWarning
    | RegistryWarning
    | ConfigureWarning
    | PolicyWarning
    | ErrorException
    | TypeError
    | OptionError
    | DelegateError
    | MissingDelegateError
    | CorruptImageError
    | FileOpenError
    | BlobError
    | StreamError
    | CacheError
    | CoderError
    | FilterError
    | ModuleError
    | DrawError
    | ImageError
    | WandError
    | RandomError
    | XServerError
    | MonitorError
    | RegistryError
    | ConfigureError
    | PolicyError
    | FatalErrorException
    | TypeFatalError
    | OptionFatalError
    | DelegateFatalError
    | MissingDelegateFatalError
    | CorruptImageFatalError
    | FileOpenFatalError
    | BlobFatalError
    | StreamFatalError
    | CacheFatalError
    | CoderFatalError
    | FilterFatalError
    | ModuleFatalError
    | DrawFatalError
    | ImageFatalError
    | WandFatalError
    | RandomFatalError
    | XServerFatalError
    | MonitorFatalError
    | RegistryFatalError
    | ConfigureFatalError
    | PolicyFatalError
  val magick_exception_info_reason : Magick.exception_info -> string
  val magick_exception_info_description : Magick.exception_info -> string
  val magick_exception_info_severity :
    Magick.exception_info -> Magick.exception_type
  val exception_severity_string : Magick.exception_type -> string
end