sig
  type t
  val new_genesis : unit -> Mgk.t
  val input_image : string -> Mgk.t -> unit
  val set_size : wh:int * int -> Mgk.t -> unit
  val init_canvas : string -> Mgk.t -> unit
  val set_filename : string -> Mgk.t -> unit
  val write_command : Mgk.t -> unit
  val draw_line : int * int -> int * int -> Mgk.t -> unit
  val draw_point : int * int -> Mgk.t -> unit
  val draw_rectangle : int * int -> int * int -> Mgk.t -> unit
  val draw_circle : int * int -> int -> Mgk.t -> unit
  val draw_ellipse : int * int -> int * int -> Mgk.t -> unit
  val draw_qbcurve : int * int -> int * int -> int * int -> Mgk.t -> unit
  val draw_cbcurve :
    int * int -> int * int -> int * int -> int * int -> Mgk.t -> unit
  val draw_polygon : (int * int) list -> Mgk.t -> unit
  val draw_text : int * int -> string -> Mgk.t -> unit
  val set_font : string -> Mgk.t -> unit
  val set_pointsize : int -> Mgk.t -> unit
  val set_strokewidth : float -> Mgk.t -> unit
  val set_fill : string -> Mgk.t -> unit
  val set_stroke : string -> Mgk.t -> unit
  type comp_op = string
  val over : Mgk.comp_op
  val multiply : Mgk.comp_op
  val screen : Mgk.comp_op
  val overlay : Mgk.comp_op
  val darken : Mgk.comp_op
  val lighten : Mgk.comp_op
  val add : Mgk.comp_op
  val subtract : Mgk.comp_op
  val compositeop_of_string : string -> Mgk.comp_op
  val set_composite_op : Mgk.comp_op -> Mgk.t -> unit
  val composite : Mgk.t -> unit
  val open_layer : (Mgk.t -> unit) -> Mgk.t -> unit
  val set_geometry : int * int -> Mgk.t -> unit
  val negate : Mgk.t -> unit
  val blur : int -> Mgk.t -> unit
  val normalize : Mgk.t -> unit
  val shade : int * int -> Mgk.t -> unit
  val modulate : int * int * int -> Mgk.t -> unit
end