Document blind-coordinate-field, blind-*-gradient, and blind-*-wave (sinc still pending), and sinus => sine - blind - suckless command-line video editing utility
 (HTM) git clone git://git.suckless.org/blind
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 56ed14063c8b2c82d5ea0652028f47f76cb710f0
 (DIR) parent d967cd0ef2e9d510f2c2588d47a9e811ebff7fda
 (HTM) Author: Mattias Andrée <maandree@kth.se>
       Date:   Mon,  3 Jul 2017 14:30:44 +0200
       
       Document blind-coordinate-field, blind-*-gradient, and blind-*-wave (sinc still pending), and sinus => sine
       
       Signed-off-by: Mattias Andrée <maandree@kth.se>
       
       Diffstat:
         M Makefile                            |       4 ++--
         M README                              |      53 +++++++++++++++++++++++++++----
         M TODO                                |       1 +
         A man/blind-cone-gradient.1           |      63 +++++++++++++++++++++++++++++++
         A man/blind-coordinate-field.1        |      50 +++++++++++++++++++++++++++++++
         A man/blind-double-sine-wave.1        |      34 +++++++++++++++++++++++++++++++
         A man/blind-linear-gradient.1         |      59 +++++++++++++++++++++++++++++++
         A man/blind-radial-gradient.1         |      79 +++++++++++++++++++++++++++++++
         A man/blind-round-wave.1              |      34 +++++++++++++++++++++++++++++++
         A man/blind-sawtooth-wave.1           |      35 +++++++++++++++++++++++++++++++
         A man/blind-sine-wave.1               |      34 +++++++++++++++++++++++++++++++
         A man/blind-spiral-gradient.1         |     123 +++++++++++++++++++++++++++++++
         A man/blind-square-gradient.1         |      63 +++++++++++++++++++++++++++++++
         A man/blind-triangular-wave.1         |      38 +++++++++++++++++++++++++++++++
         M man/blind.7                         |      55 ++++++++++++++++++++++++++-----
         R src/blind-double-sinus-wave.c -> s… |       0 
         R src/blind-sinus-wave.c -> src/blin… |       0 
       
       17 files changed, 709 insertions(+), 16 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -19,7 +19,7 @@ BIN =\
                blind-disperse\
                blind-dissolve\
                blind-dot-product\
       -        blind-double-sinus-wave\
       +        blind-double-sine-wave\
                blind-extend\
                blind-find-rectangle\
                blind-flip\
       @@ -50,7 +50,7 @@ BIN =\
                blind-set-saturation\
                blind-single-colour\
                blind-sinc-wave\
       -        blind-sinus-wave\
       +        blind-sine-wave\
                blind-skip-pattern\
                blind-spiral-gradient\
                blind-split\
 (DIR) diff --git a/README b/README
       @@ -30,26 +30,35 @@ UTILITIES
               blind-concat(1)
                      Concatenate videos
        
       +       blind-cone-gradient(1)
       +              Generate a video with a cone gradient
       +
               blind-convert(1)
                      Change pixel format of a video
        
       -       blind-cross-product(1)
       -              Calculate the cross product of colours in a video
       +       blind-coordinate-field(1)
       +              Generate a video where each pixel indicate their position
        
               blind-crop(1)
                      Extract subframes for all frames
        
       +       blind-cross-product(1)
       +              Calculate the cross product of colours in a video
       +
               blind-cut(1)
                      Retain consecutive frames
        
       -       blind-dot-product(1)
       -              Calculate the dot product of colours in a video
       +       blind-disperse(1)
       +              Framewise split a video into multiple videos
        
               blind-dissolve(1)
                      Fade a video by chaning it's alpha channel
        
       -       blind-disperse(1)
       -              Framewise split a video into multiple videos
       +       blind-dot-product(1)
       +              Calculate the dot product of colours in a video
       +
       +       blind-double-sine-wave(1)
       +              Apply double-sine-wave repetition to gradient
        
               blind-extend(1)
                      Add margins to a video
       @@ -90,6 +99,9 @@ UTILITIES
               blind-make-kernel(1)
                      Create a custom convolution matrix
        
       +       blind-linear-gradient(1)
       +              Generate a video with a linear gradient
       +
               blind-next-frame(1)
                      Extracts the next frame from a video
        
       @@ -102,6 +114,9 @@ UTILITIES
               blind-quaternion-product(1)
                      Calculate the quaternion product of colours in a video
        
       +       blind-radial-gradient(1)
       +              Generate a video with a radial gradient
       +
               blind-read-head(1)
                      Reads the head from a video
        
       @@ -123,6 +138,12 @@ UTILITIES
               blind-rotate-270(1)
                      Rotate a video 270 degrees clockwise
        
       +       blind-round-wave(1)
       +              Apply round wave repetition to gradient
       +
       +       blind-sawtooth-wave(1)
       +              Apply sawtooth-wave repetition to gradient
       +
               blind-set-alpha(1)
                      Multiply the alpha channel of a video
        
       @@ -132,12 +153,26 @@ UTILITIES
               blind-set-saturation(1)
                      Multiply the saturation of a video
        
       +       blind-sine-wave(1)
       +              Apply sine-wave repetition to gradient
       +
       +TODO blind-sinc-wave
       +
       +       blind-sinc-wave(1)
       +              Apply cardinal sine-wave repetition to gradient
       +
               blind-single-colour(1)
                      Generate a single-colour video
        
       +       blind-sine-wave(1)
       +              Apply sine-wave repetition to gradient
       +
               blind-skip-pattern(1)
                      Skips frames in a video according to pattern
        
       +       blind-spiral-gradient(1)
       +              Generate a video with a spiral gradient
       +
               blind-split(1)
                      Split a video, by frame, into multiple videos
        
       @@ -147,6 +182,9 @@ UTILITIES
               blind-split-rows(1)
                      Split a video horizontally into multiple videos
        
       +       blind-square-gradient(1)
       +              Generate a video with a square gradient
       +
               blind-stack(1)
                      Overlay videos
        
       @@ -177,6 +215,9 @@ UTILITIES
               blind-transpose(1)
                      Transpose a video
        
       +       blind-triangular-wave(1)
       +              Apply triangular wave repetition to gradient
       +
               blind-unpremultiply(1)
                      Unpremultiply the alpha channel of a video
        
 (DIR) diff --git a/TODO b/TODO
       @@ -70,6 +70,7 @@ UNTESTED:
                blind-cross-product
                blind-quaternion-product
                blind-vector-projection
       +        blind-coordinate-field
        
        
        HELP REQUIRED:
 (DIR) diff --git a/man/blind-cone-gradient.1 b/man/blind-cone-gradient.1
       @@ -0,0 +1,63 @@
       +.TH BLIND-CONE-GRADIENT 1 blind
       +.SH NAME
       +blind-cone-gradient - Generate a video with a cone gradient
       +.SH SYNOPSIS
       +.B blind-cone-gradient
       +[-a | -s]
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-cone-gradient
       +prints a video with a cone gradient to stdout,
       +parameters for each from is read from each frame
       +in stdin. The gradient is stored in all channels
       +of the video.
       +.P
       +The video in stdin must contain exactly 2 or 3
       +pixels per frame. The first pixel shall point to
       +the beginning of the gradient (where the value is
       +0) and the second pixel shall point to the end of
       +the gradient (where the value is 1). In these
       +pixels, the value of the first channel specifies
       +the X-position and the value of the second
       +channel specifies Y-position, the other channels
       +are ignored.
       +.P
       +If there is a third pixel, in frames in stdin, all
       +values in the gradient are multipled by the value
       +in the second channel (the Y channel) of the third
       +pixel in stdin; the rest of the channels in this
       +pixel is ignored.
       +.SH OPTIONS
       +.TP
       +.B -a
       +Make the gradient increase anticlockwise
       +instead of clockwise.
       +.TP
       +.B -s
       +Make the gradient increase symmetrically
       +instead of clockwise.
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-from-text (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-coordinate-field.1 b/man/blind-coordinate-field.1
       @@ -0,0 +1,50 @@
       +.TH BLIND-COORDINATE-FIELD 1 blind
       +.SH NAME
       +blind-coordinate-field - Generate a video where each pixel indicate their position
       +.SH SYNOPSIS
       +.B blind-coordinate-field
       +[-f
       +.I frames
       +| -f
       +.RB ' inf ']
       +[-F
       +.IR pixel-format ]
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-coordinate-field
       +prints a video to stdout.
       +The values in first channel will be the X-position
       +for each pixel, and the first channel will be the
       +Y-position for each pixel. The values in the other
       +channels will be zero.
       +.SH OPTIONS
       +.TP
       +.BR -f " "\fIframes\fP
       +The number of frames in the video. If
       +.I frames
       +is
       +.RB ' inf ',
       +the number of frames will be specified as 0 in the output's
       +head (works fine with most
       +.B blind
       +tools) but the video will be printed to stdout until there are
       +no processes with an open read end to this process's stdout.
       +.TP
       +.BR -F " "\fIpixel-format\fP
       +Select pixel format, see
       +.BR blind-convert (1)
       +for more information.
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-double-sine-wave.1 b/man/blind-double-sine-wave.1
       @@ -0,0 +1,34 @@
       +.TH BLIND-DOUBLE-SINE-WAVE 1 blind
       +.SH NAME
       +blind-double-sine-wave - Apply double-sine-wave repetition to gradient
       +.SH SYNOPSIS
       +.B blind-double-sine-wave
       +[-e]
       +.SH DESCRIPTION
       +.B blind-double-sine-wave
       +reads a video from stdin, applies a filter to
       +each channel to it, and prints the result to
       +stdout. The filter is designed for applying
       +repetition to a gradient, and thus assumes the
       +range of visible values is [0, 1]. The applied
       +filter creates a double-sine-wave.
       +.SH OPTIONS
       +.TP
       +.B -e
       +Apply optimisation that assumes all channels
       +are identical.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-linear-gradient.1 b/man/blind-linear-gradient.1
       @@ -0,0 +1,59 @@
       +.TH BLIND-LINEAR-GRADIENT 1 blind
       +.SH NAME
       +blind-linear-gradient - Generate a video with a linear gradient
       +.SH SYNOPSIS
       +.B blind-linear-gradient
       +[-b]
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-linear-gradient
       +prints a video with a linear gradient to stdout,
       +parameters for each from is read from each frame
       +in stdin. The gradient is stored in all channels
       +of the video.
       +.P
       +The video in stdin must contain exactly 2 pixels
       +per frame. The first pixel shall point to the
       +beginning of the gradient (where the value is 0)
       +and the second pixel shall point to the end of
       +the gradient (where the value is 1). In these
       +pixels, the value of the first channel specifies
       +the X-position and the value of the second
       +channel specifies Y-position, the other channels
       +are ignored.
       +.SH NOTES
       +Pixels before the beginning of the gradient have
       +negative values, and pixels after the end of the
       +gradient have values larger than 1.
       +.BR blind-*-wave (1)
       +commands can be used to put all values between
       +0 and 1.
       +.SH OPTIONS
       +.TP
       +.B -b
       +Create a bilinear gradient.
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-from-text (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-radial-gradient.1 b/man/blind-radial-gradient.1
       @@ -0,0 +1,79 @@
       +.TH BLIND-RADIAL-GRADIENT 1 blind
       +.SH NAME
       +blind-radial-gradient - Generate a video with a radial gradient
       +.SH SYNOPSIS
       +.B blind-radial-gradient
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-radial-gradient
       +prints a video with a radial gradient to stdout,
       +parameters for each from is read from each frame
       +in stdin. The gradient is stored in all channels
       +of the video.
       +.P
       +The video in stdin must contain exactly 2 or 3
       +pixels per frame. The first pixel shall point to
       +the beginning of the gradient (where the value is
       +0) and the second pixel shall point to the end of
       +the gradient (where the value is 1). In these
       +pixels, the value of the first channel specifies
       +the X-position and the value of the second
       +channel specifies Y-position, the other channels
       +are ignored.
       +.P
       +If there is a third pixel, in frames in stdin, it
       +specified parameters to make the gradient elliptic
       +or superelliptic. For a completely circular
       +gradient its values should be 2, 2, and 1 for the
       +first, second, and third channels, respectively;
       +the fourth channel (the alpha channel) is ignored.
       +If we name these values,
       +.IR a ,
       +.IR b ,
       +and
       +.IR m ,
       +their is an imaginary superelliptic, on which the
       +values of the gradient is 1, determined by the
       +equation
       +.RI || p ||^ a +|| r / m ||^ b =1,
       +where
       +.I p
       +and
       +.I r
       +is the projection and rejection, respectively,
       +of the normalised vector from beginning of the
       +gradient to a pixel onto the vector from the
       +beginning of the gradient to the end of the
       +gradient.
       +.SH NOTES
       +Pixels after the end of the gradient have values
       +larger than 1.
       +.BR blind-*-wave (1)
       +commands can be used to put all values between
       +0 and 1.
       +.SH OPTIONS
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-from-text (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-round-wave.1 b/man/blind-round-wave.1
       @@ -0,0 +1,34 @@
       +.TH BLIND-ROUND-WAVE 1 blind
       +.SH NAME
       +blind-round-wave - Apply round-wave repetition to gradient
       +.SH SYNOPSIS
       +.B blind-round-wave
       +[-e]
       +.SH DESCRIPTION
       +.B blind-round-wave
       +reads a video from stdin, applies a filter to
       +each channel to it, and prints the result to
       +stdout. The filter is designed for applying
       +repetition to a gradient, and thus assumes the
       +range of visible values is [0, 1]. The applied
       +filter creates a round wave.
       +.SH OPTIONS
       +.TP
       +.B -e
       +Apply optimisation that assumes all channels
       +are identical.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-sawtooth-wave.1 b/man/blind-sawtooth-wave.1
       @@ -0,0 +1,35 @@
       +.TH BLIND-SAWTOOTH-WAVE 1 blind
       +.SH NAME
       +blind-sawtooth-wave - Apply sawtooth-wave repetition to gradient
       +.SH SYNOPSIS
       +.B blind-sawtooth-wave
       +[-e]
       +.SH DESCRIPTION
       +.B blind-sawtooth-wave
       +reads a video from stdin, applies a filter to
       +each channel to it, and prints the result to
       +stdout. The filter is designed for applying
       +repetition to a gradient, and thus assumes the
       +range of visible values is [0, 1]. The applied
       +filter creates a sawtooth-wave.
       +.SH OPTIONS
       +.TP
       +.B -e
       +Apply optimisation that assumes all channels
       +are identical.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-sine-wave.1 b/man/blind-sine-wave.1
       @@ -0,0 +1,34 @@
       +.TH BLIND-SINE-WAVE 1 blind
       +.SH NAME
       +blind-sine-wave - Apply sine-wave repetition to gradient
       +.SH SYNOPSIS
       +.B blind-sine-wave
       +[-e]
       +.SH DESCRIPTION
       +.B blind-sine-wave
       +reads a video from stdin, applies a filter to
       +each channel to it, and prints the result to
       +stdout. The filter is designed for applying
       +repetition to a gradient, and thus assumes the
       +range of visible values is [0, 1]. The applied
       +filter creates a sine-wave.
       +.SH OPTIONS
       +.TP
       +.B -e
       +Apply optimisation that assumes all channels
       +are identical.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-spiral-gradient.1 b/man/blind-spiral-gradient.1
       @@ -0,0 +1,123 @@
       +.TH BLIND-SPIRAL-GRADIENT 1 blind
       +.SH NAME
       +blind-spiral-gradient - Generate a video with a spiral gradient
       +.SH SYNOPSIS
       +.B blind-spiral-gradient
       +[-al]
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-spiral-gradient
       +prints a video with a spiral gradient to stdout,
       +parameters for each from is read from each frame
       +in stdin. The gradient is stored in all channels
       +of the video.
       +.P
       +The video in stdin must contain 2 to 5 pixels per
       +frame (inclusively). The first pixel shall point
       +to the beginning of the gradient (where the value
       +is 0) and the second pixel shall point to the end
       +of the gradient (where the value is 1). In these
       +pixels, the value of the first channel specifies
       +the X-position and the value of the second
       +channel specifies Y-position, the other channels
       +are ignored. The angle of the vector between these
       +two pixels determine the angle of the spiral.
       +.P
       +If there are four or five pixel in each frame in
       +stdin, the third and fourth pixels are used to
       +modify the shape of the spiral so that it is
       +based on a superellipse instead of a circle.
       +The first and second channel of third pixel creates
       +a vector that is normalised. This vector and its
       +normal creates the basis an imaginary coordinate
       +system with its origo at the beginning of the spiral.
       +The superellipse defined by the equation
       +.RI | x |^ a +| y / m |^ b =1,
       +where
       +.I x
       +is the distance from origo along the vector,
       +.I y
       +is the distance from origo along the vector's normal,
       +.IR a ,
       +.IR b ,
       +and
       +.I m
       +are the values of the first, second, and third
       +channels, respectively, in the fourth pixel. and has
       +the distance 1 from origo at all points on it. If
       +.IR a ,
       +.IR b ,
       +and
       +.I m
       +have the values 2, 2, and 1, respectively, these
       +pixels have no effect on the spiral's shape.
       +The third and fourth channels in the third pixel
       +and the fourth channel in the fourth pixel are
       +ignored.
       +.P
       +If there are three or five pixels, the channels,
       +in order, in the last pixel, specifies the value
       +.IR a ,
       +.IR e ,
       +.IR p ,
       +and
       +.IR k ,
       +whose default values are 0, 1, 1, and 1, respectively.
       +.I k
       +is ignored unless
       +.B -l
       +is used. If
       +.B -l
       +is not used, the spiral is defined by the equation
       +.IR r = a +( b /( 2\fBpi\fP )^ e ) v ^( ep ).
       +If
       +.B -l
       +is used, the spiral is defined by the equation
       +.RI log( r / k )= a +(log( b )/( 2\fBpi\fP )^ e ) v ^( ep ).
       +.I r
       +is defined as the distance from the center of the
       +spiral,
       +.I b
       +is defined as the distance between the points
       +specified in the first and second pixel from stdin,
       +and
       +.I v
       +is defined as the angle.
       +.SH NOTES
       +Pixels after the end of the gradient have values
       +larger than 1.
       +.BR blind-*-wave (1)
       +commands can be used to put all values between
       +0 and 1.
       +.SH OPTIONS
       +.TP
       +.B -a
       +Create a spiral that gones anticlockwise.
       +.TP
       +.B -l
       +Create a logarithmic spiral.
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-from-text (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-square-gradient.1 b/man/blind-square-gradient.1
       @@ -0,0 +1,63 @@
       +.TH BLIND-SQUARE-GRADIENT 1 blind
       +.SH NAME
       +blind-square-gradient - Generate a video with a square gradient
       +.SH SYNOPSIS
       +.B blind-square-gradient
       +[-b]
       +-w
       +.I width
       +-h
       +.I height
       +.SH DESCRIPTION
       +.B blind-square-gradient
       +prints a video with a square gradient to stdout,
       +parameters for each from is read from each frame
       +in stdin. The gradient is stored in all channels
       +of the video.
       +.P
       +The video in stdin must contain exactly 2 or 3
       +pixels per frame. The first pixel shall point to
       +the beginning of the gradient (where the value is
       +0) and the second pixel shall point to the end of
       +the gradient (where the value is 1). In these
       +pixels, the value of the first channel specifies
       +the X-position and the value of the second
       +channel specifies Y-position, the other channels
       +are ignored.
       +.P
       +If there is a third pixel, in frames in stdin,
       +the value of the second channel (the Y channel)
       +is used to modify the shape of the square, making
       +it rectangular; the other channels are ignored.
       +The axis perpendicular to the vector between
       +the beginning and end of the gradient is divided
       +by this value.
       +.SH NOTES
       +Pixels after the end of the gradient have values
       +larger than 1.
       +.BR blind-*-wave (1)
       +commands can be used to put all values between
       +0 and 1.
       +.SH OPTIONS
       +.TP
       +.BR -w " "\fIwidth\fP
       +The width of the video, in pixels.
       +.TP
       +.BR -h " "\fIheight\fP
       +The height of the video, in pixels.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-from-text (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-triangular-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind-triangular-wave.1 b/man/blind-triangular-wave.1
       @@ -0,0 +1,38 @@
       +.TH BLIND-TRIANGULAR-WAVE 1 blind
       +.SH NAME
       +blind-triangular-wave - Apply triangular-wave repetition to gradient
       +.SH SYNOPSIS
       +.B blind-triangular-wave
       +[-es]
       +.SH DESCRIPTION
       +.B blind-triangular-wave
       +reads a video from stdin, applies a filter to
       +each channel to it, and prints the result to
       +stdout. The filter is designed for applying
       +repetition to a gradient, and thus assumes the
       +range of visible values is [0, 1]. The applied
       +filter creates a triangular wave.
       +.SH OPTIONS
       +.TP
       +.B -e
       +Apply optimisation that assumes all channels
       +are identical.
       +.TP
       +.B -s
       +Apply a variation of the filter that is
       +more appropriate for spiral gradient.
       +.SH SEE ALSO
       +.BR blind (7),
       +.BR blind-double-sine-wave (1),
       +.BR blind-round-wave (1),
       +.BR blind-sawtooth-wave (1),
       +.BR blind-sinc-wave (1),
       +.BR blind-sine-wave (1),
       +.BR blind-cone-gradient (1),
       +.BR blind-linear-gradient (1),
       +.BR blind-radial-gradient (1),
       +.BR blind-spiral-gradient (1),
       +.BR blind-square-gradient (1)
       +.SH AUTHORS
       +Mattias Andrée
       +.RI < maandree@kth.se >
 (DIR) diff --git a/man/blind.7 b/man/blind.7
       @@ -29,10 +29,12 @@ Place videos side by side
        Stack videos vertically
        .TP
        .BR blind-colour-ciexyz (1)
       -Convert CIE XYZ for use with blind-single-colour(1)
       +Convert CIE XYZ for use with
       +.BR blind-single-colour (1)
        .TP
        .BR blind-colour-srgb (1)
       -Convert sRGB for use with blind-single-colour(1)
       +Convert sRGB for use with
       +.BR blind-single-colour (1)
        .TP
        .BR blind-compress (1)
        Compress a video for network transmission
       @@ -40,30 +42,40 @@ Compress a video for network transmission
        .BR blind-concat (1)
        Concatenate videos
        .TP
       +.BR blind-cone-gradient (1)
       +Generate a video with a cone gradient
       +.TP
        .BR blind-convert (1)
        Change pixel format of a video
        .TP
       -.BR blind-cross-product (1)
       -Calculate the cross product of colours in a video
       +.BR blind-coordinate-field (1)
       +Generate a video where each pixel indicate their position
        .TP
        .BR blind-crop (1)
        Extract subframes for all frames
        .TP
       +.BR blind-cross-product (1)
       +Calculate the cross product of colours in a video
       +.TP
        .BR blind-cut (1)
        Retain consecutive frames
        .TP
        .BR blind-decompress (1)
       -Decompress a video compressed by blind-compress(1)
       -.TP
       -.BR blind-dissolve (1)
       -Fade a video by chaning it's alpha channel
       +Decompress a video compressed by
       +.BR blind-compress (1)
        .TP
        .BR blind-disperse (1)
        Framewise split a video into multiple videos
        .TP
       +.BR blind-dissolve (1)
       +Fade a video by chaning it's alpha channel
       +.TP
        .BR blind-dot-product (1)
        Calculate the dot product of colours in a video
        .TP
       +.BR blind-double-sine-wave (1)
       +Apply double-sine-wave repetition to gradient
       +.TP
        .BR blind-extend (1)
        Add margins to a video
        .TP
       @@ -100,6 +112,9 @@ Framewise interleave videos
        .BR blind-invert-luma (1)
        Invert the luminosity of a video
        .TP
       +.BR blind-linear-gradient (1)
       +Generate a video with a linear gradient
       +.TP
        .BR blind-make-kernel (1)
        Create a custom convolution matrix
        .TP
       @@ -115,6 +130,9 @@ Premultiply the alpha channel of a video
        .BR blind-quaternion-product (1)
        Calculate the quaternion product of colours in a video
        .TP
       +.BR blind-radial-gradient (1)
       +Generate a video with a radial gradient
       +.TP
        .BR blind-read-head (1)
        Reads the head from a video
        .TP
       @@ -136,6 +154,12 @@ Rotate a video 180 degrees
        .BR blind-rotate-270 (1)
        Rotate a video 270 degrees clockwise
        .TP
       +.BR blind-round-wave (1)
       +Apply round wave repetition to gradient
       +.TP
       +.BR blind-sawtooth-wave (1)
       +Apply sawtooth-wave repetition to gradient
       +.TP
        .BR blind-set-alpha (1)
        Multiply the alpha channel of a video
        .TP
       @@ -145,12 +169,21 @@ Multiply the luminosity of a video
        .BR blind-set-saturation (1)
        Multiply the saturation of a video
        .TP
       +.BR blind-sinc-wave (1)
       +Apply cardinal sine-wave repetition to gradient
       +.TP
        .BR blind-single-colour (1)
        Generate a single-colour video
        .TP
       +.BR blind-sine-wave (1)
       +Apply sine-wave repetition to gradient
       +.TP
        .BR blind-skip-pattern (1)
        Skips frames in a video according to pattern
        .TP
       +.BR blind-spiral-gradient (1)
       +Generate a video with a spiral gradient
       +.TP
        .BR blind-split (1)
        Split a video, by frame, into multiple videos
        .TP
       @@ -160,6 +193,9 @@ Split a video vertically into multiple videos
        .BR blind-split-rows (1)
        Split a video horizontally into multiple videos
        .TP
       +.BR blind-square-gradient (1)
       +Generate a video with a square gradient
       +.TP
        .BR blind-stack (1)
        Overlay videos
        .TP
       @@ -192,6 +228,9 @@ Perform framewise translation of a video
        .BR blind-transpose (1)
        Transpose a video
        .TP
       +.BR blind-triangular-wave (1)
       +Apply triangular wave repetition to gradient
       +.TP
        .BR blind-unpremultiply (1)
        Unpremultiply the alpha channel of a video
        .TP
 (DIR) diff --git a/src/blind-double-sinus-wave.c b/src/blind-double-sine-wave.c
 (DIR) diff --git a/src/blind-sinus-wave.c b/src/blind-sine-wave.c