sig
  val gegl_init : unit -> unit
  val gegl_exit : unit -> unit
  type gegl_rectangle
  val gegl_rectangle : int * int * int * int -> Gegl.gegl_rectangle
  type gegl_color
  val gegl_color_new : string -> Gegl.gegl_color
  type gegl_path
  val gegl_path_new : unit -> Gegl.gegl_path
  type babl
  val babl_format : string -> Gegl.babl
  type gegl_buffer
  val gegl_buffer_new : Gegl.gegl_rectangle -> Gegl.babl -> Gegl.gegl_buffer
  val gegl_buffer_set :
    Gegl.gegl_buffer -> Gegl.gegl_rectangle -> Gegl.babl -> bytes -> unit
  val gegl_buffer_unref : Gegl.gegl_buffer -> unit
  type node
  val gegl_node_new : unit -> Gegl.node
  val gegl_node_unref : Gegl.node -> unit
  val gegl_node_buffer_source : Gegl.node -> Gegl.gegl_buffer -> Gegl.node
  val gegl_node_png_save : Gegl.node -> string -> Gegl.node
  val gegl_node_jpg_save : Gegl.node -> string -> ?q:int -> unit -> Gegl.node
  val gegl_node_png_load : Gegl.node -> string -> Gegl.node
  val gegl_node_jpg_load : Gegl.node -> string -> Gegl.node
  val gegl_node_svg_load : Gegl.node -> string -> Gegl.node
  val gegl_node_display : Gegl.node -> string -> Gegl.node
  val gegl_node_plasma : Gegl.node -> int -> int -> int -> Gegl.node
  val gegl_node_perlin_noise : Gegl.node -> Gegl.node
  val gegl_node_connect_to : Gegl.node -> Gegl.node -> unit
  val gegl_node_connect_to2 : Gegl.node -> Gegl.node -> unit
  val gegl_node_process : Gegl.node -> unit
  val gegl_list_operations : unit -> string array
  val gegl_operation_list_properties : string -> (string * string) array
  val gegl_node_crop :
    Gegl.node -> float * float * float * float -> bool -> Gegl.node
  val gegl_node_gaussian_blur : Gegl.node -> float -> float -> Gegl.node
  val gegl_node_edge_sobel : Gegl.node -> Gegl.node
  val gegl_node_image_gradient : Gegl.node -> Gegl.node
  val gegl_node_edge_neon :
    Gegl.node -> radius:float -> amount:float -> Gegl.node
  val gegl_node_noise_pick :
    Gegl.node -> pct_random:float -> repeat:int -> seed:int -> Gegl.node
  val gegl_node_slic : Gegl.node -> Gegl.node
  val gegl_node_waterpixels : Gegl.node -> Gegl.node
  val gegl_node_threshold : Gegl.node -> Gegl.node
  val gegl_node_brightness_contrast :
    Gegl.node -> brightness:float -> contrast:float -> Gegl.node
  val gegl_node_negative_darkroom : Gegl.node -> Gegl.node
  val gegl_node_normal_map : Gegl.node -> Gegl.node
  val gegl_node_dither : Gegl.node -> Gegl.node
  val gegl_node_pixelize : Gegl.node -> Gegl.node
  val gegl_node_invert_linear : Gegl.node -> Gegl.node
  val gegl_node_newsprint : Gegl.node -> Gegl.node
  type compositor =
      Multiply
    | Difference
    | Screen
    | Overlay
    | Subtract
    | Exclusion
  val gegl_node_compose : Gegl.node -> Gegl.compositor -> Gegl.node
  val gegl_path_new_from_string : string -> Gegl.gegl_path
  val gegl_path_move_to : Gegl.gegl_path -> float * float -> unit
  val gegl_path_line_to : Gegl.gegl_path -> float * float -> unit
  val gegl_path_curve_to :
    Gegl.gegl_path -> float * float -> float * float -> float * float -> unit
  val gegl_node_fill_path :
    Gegl.node -> d:Gegl.gegl_path -> color:Gegl.gegl_color -> Gegl.node
  val gegl_node_vector_stroke :
    Gegl.node -> d:Gegl.gegl_path -> color:Gegl.gegl_color -> Gegl.node
  module Utils :
    sig
      val init_buffer :
        w:int ->
        h:int -> (x:int -> y:int -> float * float * float * float) -> bytes
    end
end