sic
sic copied to clipboard
image-script
type Image = internal 'Image<InputMetadata>';
type Set[T] = internal 'Set';
type Seq[T] = internal 'Seq';
fn Image.resize = (image: Image) => image
|> call_internal 'ImageOps::resize';
struct Image<Meta> {
buffer: DynamicImage
meta: Meta,
}
enum InputMetadata {
FromSource(FromSourceMeta),
Erased,
}
struct FromSourceMeta {
source: Source,
...
}
enum Source {
Stdin,
Path(PathBuf),
}
m := Input.read "media/input.png"; #type: fn(Path) => Image
s := Input.read_glob "media/*.jpeg"; #type: fn(GlobPath) => Set[Image]
m' := m # new pipeline
|> Image.resize {x: 480, y: 720} # input type Image, with `argument_map { required: {x: usize, y: usize} }, optional: {}}` #type: fn(Image, {x: usize, y: usize}) => Image
|> Seq.repeat #type: fn(Image) => Seq[Image]
|> Seq.map (image) => ... #type: fn(Seq[Image], fn(Image) => Image) => Seq[Image]
|> Animate.fromSeq #type fn(Seq[Image] => AnimatedImage);
Output.write m' { path: "media/output/dance.png", format: "apng") #type (into ImageBuffer => Unit)
Experimental.unlock Info.print;
Set.each (image) => Info.print image.meta.path;
Output.write_all s { folder: 'media/output', format: 'png' }