Remove TypeScript files.
This commit is contained in:
parent
e3103fb8a3
commit
5a36bfb40b
|
@ -1,66 +0,0 @@
|
|||
import {
|
||||
FocusBlur,
|
||||
Mirrors,
|
||||
Newsprint,
|
||||
SimplexNoise,
|
||||
Softglow,
|
||||
StereographicProjection,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [1920, 1080];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-06',
|
||||
operations: [
|
||||
new SimplexNoise({scale: 4, seed: 2_071_140_406}),
|
||||
new Newsprint({
|
||||
colorModel: 'rgb',
|
||||
pattern2: 'line',
|
||||
period2: 200,
|
||||
angle2: 15,
|
||||
pattern3: 'line',
|
||||
period3: 200,
|
||||
angle3: 45,
|
||||
pattern4: 'line',
|
||||
period4: 200,
|
||||
angle4: 0,
|
||||
}),
|
||||
new Mirrors(),
|
||||
new Softglow(),
|
||||
new Newsprint(),
|
||||
new StereographicProjection({tilt: 123}),
|
||||
new FocusBlur({
|
||||
blurType: 'gaussian',
|
||||
blurRadius: 11.5,
|
||||
radius: 0.9,
|
||||
midpoint: 0.6,
|
||||
}),
|
||||
new Newsprint({
|
||||
colorModel: 'rgb',
|
||||
pattern2: 'diamond',
|
||||
period2: 200,
|
||||
angle2: 0,
|
||||
pattern3: 'diamond',
|
||||
period3: 200,
|
||||
angle3: 35,
|
||||
pattern4: 'diamond',
|
||||
period4: 200,
|
||||
angle4: 55,
|
||||
}),
|
||||
new FocusBlur({
|
||||
blurType: 'gaussian',
|
||||
blurRadius: 11.5,
|
||||
radius: 0.9,
|
||||
midpoint: 0.6,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,68 +0,0 @@
|
|||
import {
|
||||
Cartoon,
|
||||
MedianBlur,
|
||||
Mirrors,
|
||||
Mosaic,
|
||||
Plasma,
|
||||
Waterpixels,
|
||||
Waves,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [1920, 1080];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-07',
|
||||
operations: [
|
||||
new Plasma({
|
||||
height,
|
||||
seed: 2_000_111_903,
|
||||
turbulence: 1,
|
||||
width,
|
||||
}),
|
||||
new Mosaic({
|
||||
colorVariation: 1,
|
||||
tileHeight: 5,
|
||||
tileNeatness: 1,
|
||||
tileSize: 116.53,
|
||||
tileSurface: true,
|
||||
tileType: 'triangles',
|
||||
}),
|
||||
new Waves({
|
||||
amplitude: 2.9,
|
||||
clamp: true,
|
||||
samplerType: 'cubic',
|
||||
}),
|
||||
new Waves({
|
||||
amplitude: 17.3,
|
||||
clamp: true,
|
||||
samplerType: 'cubic',
|
||||
}),
|
||||
new Mirrors({
|
||||
oX: 1,
|
||||
oY: 0.353,
|
||||
nSegs: 2,
|
||||
}),
|
||||
new Cartoon(),
|
||||
new Waterpixels({
|
||||
fill: 'average',
|
||||
size: 32,
|
||||
smoothness: 1,
|
||||
}),
|
||||
new Mirrors({
|
||||
oX: 0.01,
|
||||
oY: 0.01,
|
||||
nSegs: 5,
|
||||
rAngle: 342,
|
||||
}),
|
||||
new MedianBlur(),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,42 +0,0 @@
|
|||
import {
|
||||
DiffractionPatterns,
|
||||
FocusBlur,
|
||||
Newsprint,
|
||||
StereographicProjection,
|
||||
TileSeamless,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [1920, 1080];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-08',
|
||||
operations: [
|
||||
new DiffractionPatterns({
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new TileSeamless(),
|
||||
new StereographicProjection(),
|
||||
new Newsprint({
|
||||
colorModel: 'cmyk',
|
||||
period: 4,
|
||||
}),
|
||||
new FocusBlur({
|
||||
blurRadius: 9.72,
|
||||
blurType: 'lens',
|
||||
focus: 0,
|
||||
highlightFactor: 0.924,
|
||||
radius: 1.173,
|
||||
shape: 'circle',
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,60 +0,0 @@
|
|||
import {
|
||||
FocusBlur,
|
||||
Maze,
|
||||
MedianBlur,
|
||||
Mirrors,
|
||||
Newsprint,
|
||||
Oilify,
|
||||
TileGlass,
|
||||
TileSeamless,
|
||||
Waterpixels,
|
||||
Waves,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [1920, 1080];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: true,
|
||||
name: '2022-03-09',
|
||||
operations: [
|
||||
new Maze(),
|
||||
new TileGlass(),
|
||||
new Waterpixels(),
|
||||
new Newsprint({
|
||||
angle2: -55.4,
|
||||
angle3: 60.77,
|
||||
angle4: 103.55,
|
||||
colorModel: 'rgb',
|
||||
}),
|
||||
new Waves({
|
||||
amplitude: 5.9,
|
||||
clamp: true,
|
||||
}),
|
||||
new Oilify(),
|
||||
new TileSeamless(),
|
||||
new MedianBlur({
|
||||
percentile: 2.35,
|
||||
}),
|
||||
new Mirrors({
|
||||
nSegs: 3,
|
||||
oX: 0.1,
|
||||
oY: 0.2,
|
||||
rAngle: 330,
|
||||
}),
|
||||
new FocusBlur({
|
||||
blurRadius: 33.57,
|
||||
blurType: 'lens',
|
||||
focus: 0.111,
|
||||
highlightFactor: 0.529,
|
||||
radius: 1.173,
|
||||
}),
|
||||
],
|
||||
resetAlpha: true,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,47 +0,0 @@
|
|||
import {Bloom, CellNoise, Newsprint, Waves} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-10',
|
||||
operations: [
|
||||
new CellNoise({
|
||||
scale: 0.5,
|
||||
seed: 2_762_328_325,
|
||||
}),
|
||||
new Newsprint({
|
||||
angle4: 75.85,
|
||||
colorModel: 'rgb',
|
||||
pattern2: 'circle',
|
||||
pattern4: 'cross',
|
||||
period2: 42.38,
|
||||
period3: 0,
|
||||
period4: 135.1,
|
||||
turbulence: 0.454,
|
||||
}),
|
||||
new Waves({
|
||||
amplitude: 67.6,
|
||||
clamp: true,
|
||||
period: 514.8,
|
||||
phi: -0.529,
|
||||
samplerType: 'cubic',
|
||||
x: -0.25,
|
||||
y: -0.75,
|
||||
}),
|
||||
new Bloom({
|
||||
radius: 20,
|
||||
softness: 57,
|
||||
strength: 90,
|
||||
threshold: 10,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,61 +0,0 @@
|
|||
import {
|
||||
Bloom,
|
||||
Cartoon,
|
||||
Newsprint,
|
||||
NoisePick,
|
||||
Plasma,
|
||||
Waterpixels,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: true,
|
||||
name: '2022-03-11',
|
||||
operations: [
|
||||
new Plasma({
|
||||
seed: 168_139_081,
|
||||
turbulence: 1.5,
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 40,
|
||||
pctBlack: 0.2,
|
||||
}),
|
||||
new Waterpixels({
|
||||
size: 64,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 40,
|
||||
pctBlack: 0.2,
|
||||
}),
|
||||
new Newsprint({
|
||||
colorModel: 'rgb',
|
||||
pattern2: 'circle',
|
||||
pattern3: 'cross',
|
||||
pattern4: 'circle',
|
||||
period2: 15,
|
||||
period3: 150,
|
||||
period4: 30,
|
||||
turbulence: 0.9,
|
||||
}),
|
||||
new Bloom({
|
||||
radius: 7.48,
|
||||
strength: 115.29,
|
||||
threshold: 65.88,
|
||||
}),
|
||||
new NoisePick({
|
||||
repeat: 5,
|
||||
seed: 0,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,51 +0,0 @@
|
|||
import {
|
||||
DiffractionPatterns,
|
||||
Generic,
|
||||
MedianBlur,
|
||||
Mirrors,
|
||||
Newsprint,
|
||||
Waterpixels,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-12',
|
||||
operations: [
|
||||
new DiffractionPatterns({
|
||||
brightness: 0.382,
|
||||
polarization: 0.67,
|
||||
scattering: 53.21,
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new Waterpixels({
|
||||
smoothness: 2,
|
||||
}),
|
||||
new Generic('gegl:edge-neon', {
|
||||
amount: 0.5,
|
||||
radius: 3,
|
||||
}),
|
||||
new Mirrors({
|
||||
oX: 0.365,
|
||||
oY: 0.694,
|
||||
trimX: 0.375,
|
||||
trimY: 0.375,
|
||||
}),
|
||||
new Newsprint({
|
||||
turbulence: 0.996,
|
||||
}),
|
||||
new MedianBlur({
|
||||
neighborhood: 'diamond',
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,53 +0,0 @@
|
|||
import {
|
||||
Cartoon,
|
||||
Mirrors,
|
||||
Oilify,
|
||||
Plasma,
|
||||
StereographicProjection,
|
||||
Waterpixels,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-13',
|
||||
operations: [
|
||||
new Plasma({
|
||||
seed: 65_198_886,
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 50,
|
||||
pctBlack: 1,
|
||||
}),
|
||||
new Waterpixels({
|
||||
size: 64,
|
||||
}),
|
||||
new Oilify({
|
||||
maskRadius: 8,
|
||||
}),
|
||||
new Mirrors({
|
||||
nSegs: 8,
|
||||
oX: 0.829,
|
||||
oY: 0.812,
|
||||
trimX: 0.325,
|
||||
trimY: 0.09,
|
||||
}),
|
||||
new StereographicProjection({
|
||||
tilt: -73.42,
|
||||
}),
|
||||
new Oilify({
|
||||
maskRadius: 8,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,51 +0,0 @@
|
|||
import {
|
||||
Cartoon,
|
||||
DiffractionPatterns,
|
||||
Generic,
|
||||
MedianBlur,
|
||||
Mirrors,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-14',
|
||||
operations: [
|
||||
new DiffractionPatterns({
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new Mirrors({
|
||||
nSegs: 7,
|
||||
oX: 0.347,
|
||||
oY: 0.1,
|
||||
rAngle: 13,
|
||||
trimX: 0.051,
|
||||
trimY: 0.253,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 50,
|
||||
pctBlack: 1,
|
||||
}),
|
||||
new MedianBlur({
|
||||
radius: 5,
|
||||
}),
|
||||
new Generic('gegl:edge', {
|
||||
algorithm: 'prewitt',
|
||||
amount: 10,
|
||||
borderBehavior: 'clamp',
|
||||
}),
|
||||
new MedianBlur({
|
||||
radius: 5,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,90 +0,0 @@
|
|||
import {
|
||||
Bloom,
|
||||
Cartoon,
|
||||
Crop,
|
||||
FocusBlur,
|
||||
Generic,
|
||||
Mirrors,
|
||||
Newsprint,
|
||||
Waves,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-15',
|
||||
operations: [
|
||||
new Generic('gegl:spiral', {
|
||||
balance: 0.424,
|
||||
color1: '#3078d2',
|
||||
color2: '#ff00dc',
|
||||
direction: 'cw',
|
||||
height,
|
||||
radius: 918.7,
|
||||
type: 'linear',
|
||||
width,
|
||||
x: 0.307,
|
||||
y: 0.542,
|
||||
}),
|
||||
new Crop({
|
||||
height,
|
||||
width,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 50,
|
||||
pctBlack: 1,
|
||||
}),
|
||||
new Newsprint({
|
||||
colorModel: 'rgb',
|
||||
pattern2: 'line',
|
||||
pattern3: 'diamond',
|
||||
pattern4: 'pssquare',
|
||||
period2: 105.96,
|
||||
period3: 30.46,
|
||||
period4: 125.83,
|
||||
turbulence: 0.182,
|
||||
}),
|
||||
new Bloom({
|
||||
radius: 2.08,
|
||||
softness: 87.94,
|
||||
strength: 165.29,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 50,
|
||||
pctBlack: 1,
|
||||
}),
|
||||
new Waves({
|
||||
amplitude: 65,
|
||||
clamp: true,
|
||||
period: 500,
|
||||
phi: 0.5,
|
||||
x: 0,
|
||||
y: 1,
|
||||
}),
|
||||
new Mirrors({
|
||||
rAngle: 30,
|
||||
nSegs: 3,
|
||||
oX: 0.312,
|
||||
oY: 1,
|
||||
trimX: 0.162,
|
||||
trimY: 0.031,
|
||||
}),
|
||||
new FocusBlur({
|
||||
blurRadius: 5.4,
|
||||
blurType: 'lens',
|
||||
focus: 0.154,
|
||||
highlightFactor: 0.75,
|
||||
midpoint: 0.38,
|
||||
radius: 0.802,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,50 +0,0 @@
|
|||
import {
|
||||
Bloom,
|
||||
Cartoon,
|
||||
FocusBlur,
|
||||
Mirrors,
|
||||
Oilify,
|
||||
Plasma,
|
||||
} from '../../gegl/exports.js';
|
||||
import Project from '../../project.js';
|
||||
|
||||
const [width, height] = [3840, 2160];
|
||||
|
||||
const project: Project = {
|
||||
createInputImage: false,
|
||||
name: '2022-03-29',
|
||||
operations: [
|
||||
new Plasma({
|
||||
height,
|
||||
seed: 3_474_742_930,
|
||||
turbulence: 2,
|
||||
width,
|
||||
}),
|
||||
new Cartoon({
|
||||
maskRadius: 50,
|
||||
pctBlack: 1,
|
||||
}),
|
||||
new FocusBlur({
|
||||
blurType: 'lens',
|
||||
}),
|
||||
new Mirrors({
|
||||
oX: 0.406,
|
||||
oY: 0.588,
|
||||
}),
|
||||
new Oilify({
|
||||
maskRadius: 8,
|
||||
}),
|
||||
new Bloom({
|
||||
radius: 2.08,
|
||||
softness: 87.94,
|
||||
strength: 165.29,
|
||||
}),
|
||||
],
|
||||
resetAlpha: false,
|
||||
resolution: {
|
||||
width,
|
||||
height,
|
||||
},
|
||||
};
|
||||
|
||||
export default project;
|
|
@ -1,29 +0,0 @@
|
|||
import Project from '../../project.js';
|
||||
|
||||
import p2022_03_06 from './2022-03-06.js';
|
||||
import p2022_03_07 from './2022-03-07.js';
|
||||
import p2022_03_08 from './2022-03-08.js';
|
||||
import p2022_03_09 from './2022-03-09.js';
|
||||
import p2022_03_10 from './2022-03-10.js';
|
||||
import p2022_03_11 from './2022-03-11.js';
|
||||
import p2022_03_12 from './2022-03-12.js';
|
||||
import p2022_03_13 from './2022-03-13.js';
|
||||
import p2022_03_14 from './2022-03-14.js';
|
||||
import p2022_03_15 from './2022-03-15.js';
|
||||
import p2022_03_29 from './2022-03-29.js';
|
||||
|
||||
const projects: Project[] = [
|
||||
p2022_03_06,
|
||||
p2022_03_07,
|
||||
p2022_03_08,
|
||||
p2022_03_09,
|
||||
p2022_03_10,
|
||||
p2022_03_11,
|
||||
p2022_03_12,
|
||||
p2022_03_13,
|
||||
p2022_03_14,
|
||||
p2022_03_15,
|
||||
p2022_03_29,
|
||||
];
|
||||
|
||||
export default projects;
|
|
@ -1,6 +0,0 @@
|
|||
import Project from '../project.js';
|
||||
import p2022_03 from './03/projects.js';
|
||||
|
||||
const projects: Project[] = [...p2022_03];
|
||||
|
||||
export default projects;
|
|
@ -1,39 +0,0 @@
|
|||
export abstract class BaseOperation<P extends {}> {
|
||||
public abstract get default(): P;
|
||||
|
||||
public parameters: P;
|
||||
|
||||
/**
|
||||
* Some GEGL operations will run infinitely unless you limit the buffer in
|
||||
* some way, so all operations must indicate whether or not they should be
|
||||
* followed by a crop operation.
|
||||
*/
|
||||
public abstract appendCrop: boolean;
|
||||
|
||||
/** The GEGL operation name, starting with `gegl:`. */
|
||||
public abstract name: string;
|
||||
|
||||
constructor(parameters: P) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public graph(includeDefaults = false): string[] {
|
||||
const defaults = this.default;
|
||||
const graph: string[] = [this.name];
|
||||
|
||||
for (const [key, value] of Object.entries(this.parameters)) {
|
||||
if (
|
||||
!includeDefaults &&
|
||||
key in defaults &&
|
||||
(defaults as Record<string, any>)[key] === value
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const kebabCasedKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();
|
||||
graph.push(`${kebabCasedKey}=${value as string}`);
|
||||
}
|
||||
|
||||
return graph;
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface BloomParameters {
|
||||
limitExposure: boolean;
|
||||
radius: number;
|
||||
softness: number;
|
||||
strength: number;
|
||||
threshold: number;
|
||||
}
|
||||
|
||||
export class Bloom extends BaseOperation<BloomParameters> {
|
||||
public static default: BloomParameters = {
|
||||
limitExposure: false,
|
||||
radius: 10,
|
||||
softness: 25,
|
||||
strength: 50,
|
||||
threshold: 50,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Bloom.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:bloom';
|
||||
|
||||
constructor(parameters?: Partial<BloomParameters>) {
|
||||
super({...Bloom.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface CartoonParameters {
|
||||
maskRadius: number;
|
||||
pctBlack: number;
|
||||
}
|
||||
|
||||
export class Cartoon extends BaseOperation<CartoonParameters> {
|
||||
public static default: CartoonParameters = {
|
||||
maskRadius: 7,
|
||||
pctBlack: 0.2,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Cartoon.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:cartoon';
|
||||
|
||||
constructor(parameters?: Partial<CartoonParameters>) {
|
||||
super({...Cartoon.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface CellNoiseParameters {
|
||||
iterations: number;
|
||||
palettize: boolean;
|
||||
rank: number;
|
||||
scale: number;
|
||||
seed: number;
|
||||
shape: number;
|
||||
}
|
||||
|
||||
export class CellNoise extends BaseOperation<CellNoiseParameters> {
|
||||
public static default: CellNoiseParameters = {
|
||||
iterations: 1,
|
||||
palettize: false,
|
||||
rank: 1,
|
||||
scale: 1,
|
||||
seed: 0,
|
||||
shape: 2,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return CellNoise.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:cell-noise';
|
||||
|
||||
constructor(parameters?: Partial<CellNoiseParameters>) {
|
||||
super({...CellNoise.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface CropParameters {
|
||||
height: number;
|
||||
resetOrigin: boolean;
|
||||
width: number;
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export class Crop extends BaseOperation<CropParameters> {
|
||||
public static default: CropParameters = {
|
||||
height: 0,
|
||||
resetOrigin: false,
|
||||
width: 0,
|
||||
x: 0,
|
||||
y: 0,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Crop.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:crop';
|
||||
|
||||
constructor(parameters?: Partial<CropParameters>) {
|
||||
super({...Crop.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface DiffractionPatternsParameters {
|
||||
blueContours: number;
|
||||
blueFrequency: number;
|
||||
blueSedges: number;
|
||||
brightness: number;
|
||||
greenContours: number;
|
||||
greenFrequency: number;
|
||||
greenSedges: number;
|
||||
height: number;
|
||||
polarization: number;
|
||||
redContours: number;
|
||||
redFrequency: number;
|
||||
redSedges: number;
|
||||
scattering: number;
|
||||
width: number;
|
||||
}
|
||||
|
||||
export class DiffractionPatterns extends BaseOperation<DiffractionPatternsParameters> {
|
||||
public static default: DiffractionPatternsParameters = {
|
||||
blueContours: 0.97,
|
||||
blueFrequency: 1.12,
|
||||
blueSedges: 0.64,
|
||||
brightness: 0.07,
|
||||
greenContours: 0.82,
|
||||
greenFrequency: 1.22,
|
||||
greenSedges: 0.68,
|
||||
height: 200,
|
||||
polarization: -0.47,
|
||||
redContours: 0.82,
|
||||
redFrequency: 0.81,
|
||||
redSedges: 0.61,
|
||||
scattering: 37.13,
|
||||
width: 200,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return DiffractionPatterns.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:diffraction-patterns';
|
||||
|
||||
constructor(parameters?: Partial<DiffractionPatternsParameters>) {
|
||||
super({...DiffractionPatterns.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
export * from './base.js';
|
||||
export * from './bloom.js';
|
||||
export * from './cartoon.js';
|
||||
export * from './cell-noise.js';
|
||||
export * from './crop.js';
|
||||
export * from './diffraction-patterns.js';
|
||||
export * from './focus-blur.js';
|
||||
export * from './generic.js';
|
||||
export * from './maze.js';
|
||||
export * from './median-blur.js';
|
||||
export * from './mirrors.js';
|
||||
export * from './mosaic.js';
|
||||
export * from './newsprint.js';
|
||||
export * from './noise-pick.js';
|
||||
export * from './oilify.js';
|
||||
export * from './plasma.js';
|
||||
export * from './simplex-noise.js';
|
||||
export * from './softglow.js';
|
||||
export * from './stereographic-projection.js';
|
||||
export * from './tile-glass.js';
|
||||
export * from './tile-seamless.js';
|
||||
export * from './waterpixels.js';
|
||||
export * from './waves.js';
|
|
@ -1,48 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface FocusBlurParameters {
|
||||
aspectRatio: number;
|
||||
blurRadius: number;
|
||||
blurType: 'gaussian' | 'lens';
|
||||
focus: number;
|
||||
highlightFactor: number;
|
||||
highlightThresholdHigh: number;
|
||||
highlightThresholdLow: number;
|
||||
highQuality: boolean;
|
||||
midpoint: number;
|
||||
radius: number;
|
||||
rotation: number;
|
||||
shape: 'circle' | 'square' | 'diamond' | 'horizontal' | 'vertical';
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export class FocusBlur extends BaseOperation<FocusBlurParameters> {
|
||||
public static default: FocusBlurParameters = {
|
||||
aspectRatio: 0,
|
||||
blurRadius: 25,
|
||||
blurType: 'gaussian',
|
||||
focus: 0.25,
|
||||
highlightFactor: 0,
|
||||
highlightThresholdHigh: 1,
|
||||
highlightThresholdLow: 0,
|
||||
highQuality: false,
|
||||
midpoint: 0.5,
|
||||
radius: 0.75,
|
||||
rotation: 0,
|
||||
shape: 'circle',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return FocusBlur.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:focus-blur';
|
||||
|
||||
constructor(parameters?: Partial<FocusBlurParameters>) {
|
||||
super({...FocusBlur.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export type GenericParameters = Record<string, number | string | boolean>;
|
||||
|
||||
export class Generic extends BaseOperation<GenericParameters> {
|
||||
public get default() {
|
||||
return {};
|
||||
}
|
||||
|
||||
public appendCrop: boolean;
|
||||
public name: string;
|
||||
|
||||
constructor(
|
||||
name: string,
|
||||
parameters?: GenericParameters,
|
||||
appendCrop?: boolean,
|
||||
) {
|
||||
super(parameters ?? {});
|
||||
this.name = name;
|
||||
this.appendCrop = appendCrop ?? false;
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface MazeParameters {
|
||||
algorithmType: 'depth-first' | 'prim';
|
||||
bgColor: string;
|
||||
fgColor: string;
|
||||
seed: number;
|
||||
tileable: boolean;
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export class Maze extends BaseOperation<MazeParameters> {
|
||||
public static default: MazeParameters = {
|
||||
algorithmType: 'depth-first',
|
||||
bgColor: '#fff',
|
||||
fgColor: '#000',
|
||||
seed: 0,
|
||||
tileable: false,
|
||||
x: 16,
|
||||
y: 16,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Maze.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:maze';
|
||||
|
||||
constructor(parameters?: Partial<MazeParameters>) {
|
||||
super({...Maze.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface MedianBlurParameters {
|
||||
abyssPolicy: 'none' | 'clamp';
|
||||
alphaPercentile: number;
|
||||
highPrecision: boolean;
|
||||
neighborhood: 'square' | 'circle' | 'diamond';
|
||||
percentile: number;
|
||||
radius: number;
|
||||
}
|
||||
|
||||
export class MedianBlur extends BaseOperation<MedianBlurParameters> {
|
||||
public static default: MedianBlurParameters = {
|
||||
abyssPolicy: 'clamp',
|
||||
alphaPercentile: 50,
|
||||
highPrecision: false,
|
||||
neighborhood: 'circle',
|
||||
percentile: 50,
|
||||
radius: 3,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return MedianBlur.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:median-blur';
|
||||
|
||||
constructor(parameters?: Partial<MedianBlurParameters>) {
|
||||
super({...MedianBlur.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface MirrorsParameters {
|
||||
clip: boolean;
|
||||
cX: number;
|
||||
cY: number;
|
||||
inputScale: number;
|
||||
mAngle: number;
|
||||
nSegs: number;
|
||||
outputScale: number;
|
||||
oX: number;
|
||||
oY: number;
|
||||
rAngle: number;
|
||||
trimX: number;
|
||||
trimY: number;
|
||||
warp: boolean;
|
||||
}
|
||||
|
||||
export class Mirrors extends BaseOperation<MirrorsParameters> {
|
||||
public static default: MirrorsParameters = {
|
||||
clip: true,
|
||||
cX: 0.5,
|
||||
cY: 0.5,
|
||||
inputScale: 100,
|
||||
mAngle: 0,
|
||||
nSegs: 6,
|
||||
outputScale: 1,
|
||||
oX: 0,
|
||||
oY: 0,
|
||||
rAngle: 0,
|
||||
trimX: 0,
|
||||
trimY: 0,
|
||||
warp: true,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Mirrors.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:mirrors';
|
||||
|
||||
constructor(parameters?: Partial<MirrorsParameters>) {
|
||||
super({...Mirrors.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface MosaicParameters {
|
||||
antialiasing: boolean;
|
||||
colorAveraging: boolean;
|
||||
colorVariation: number;
|
||||
jointsColor: string;
|
||||
lightColor: string;
|
||||
lightDir: number;
|
||||
seed: number;
|
||||
tileAllowSplit: boolean;
|
||||
tileHeight: number;
|
||||
tileNeatness: number;
|
||||
tileSize: number;
|
||||
tileSpacing: number;
|
||||
tileSurface: boolean;
|
||||
tileType: 'squares' | 'hexagons' | 'octagons' | 'triangles';
|
||||
}
|
||||
|
||||
export class Mosaic extends BaseOperation<MosaicParameters> {
|
||||
public static default: MosaicParameters = {
|
||||
antialiasing: true,
|
||||
colorAveraging: true,
|
||||
colorVariation: 0.2,
|
||||
jointsColor: '#000',
|
||||
lightColor: '#fff',
|
||||
lightDir: 135,
|
||||
seed: 0,
|
||||
tileAllowSplit: true,
|
||||
tileHeight: 4,
|
||||
tileNeatness: 0.65,
|
||||
tileSize: 15,
|
||||
tileSpacing: 1,
|
||||
tileSurface: false,
|
||||
tileType: 'hexagons',
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Mosaic.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:mosaic';
|
||||
|
||||
constructor(parameters?: Partial<MosaicParameters>) {
|
||||
super({...Mosaic.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
type NewsprintPattern = 'line' | 'circle' | 'diamond' | 'pssquare' | 'cross';
|
||||
|
||||
export interface NewsprintParameters {
|
||||
aaSamples: number;
|
||||
angle: number;
|
||||
angle2: number;
|
||||
angle3: number;
|
||||
angle4: number;
|
||||
angleboost: number;
|
||||
blackPullout: number;
|
||||
blocksize: number;
|
||||
colorModel: 'black-on-white' | 'cmyk' | 'rgb' | 'white-on-black';
|
||||
pattern: NewsprintPattern;
|
||||
pattern2: NewsprintPattern;
|
||||
pattern3: NewsprintPattern;
|
||||
pattern4: NewsprintPattern;
|
||||
period: number;
|
||||
period2: number;
|
||||
period3: number;
|
||||
period4: number;
|
||||
turbulence: number;
|
||||
}
|
||||
|
||||
export class Newsprint extends BaseOperation<NewsprintParameters> {
|
||||
public static default: NewsprintParameters = {
|
||||
aaSamples: 16,
|
||||
angle: 75,
|
||||
angle2: 15,
|
||||
angle3: 45,
|
||||
angle4: 0,
|
||||
angleboost: 0,
|
||||
blackPullout: 1,
|
||||
blocksize: -1,
|
||||
colorModel: 'black-on-white',
|
||||
pattern: 'line',
|
||||
pattern2: 'line',
|
||||
pattern3: 'line',
|
||||
pattern4: 'line',
|
||||
period: 12,
|
||||
period2: 12,
|
||||
period3: 12,
|
||||
period4: 12,
|
||||
turbulence: 0,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Newsprint.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:newsprint';
|
||||
|
||||
constructor(parameters?: Partial<NewsprintParameters>) {
|
||||
super({...Newsprint.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface NoisePickParameters {
|
||||
pctRandom: number;
|
||||
repeat: number;
|
||||
seed: number;
|
||||
}
|
||||
|
||||
export class NoisePick extends BaseOperation<NoisePickParameters> {
|
||||
public static default: NoisePickParameters = {
|
||||
pctRandom: 50,
|
||||
repeat: 1,
|
||||
seed: 0,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return NoisePick.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:noise-pick';
|
||||
|
||||
constructor(parameters?: Partial<NoisePickParameters>) {
|
||||
super({...NoisePick.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface OilifyParameters {
|
||||
exponent: number;
|
||||
intensities: number;
|
||||
maskRadius: number;
|
||||
useInten: boolean;
|
||||
}
|
||||
|
||||
export class Oilify extends BaseOperation<OilifyParameters> {
|
||||
public static default: OilifyParameters = {
|
||||
exponent: 8,
|
||||
intensities: 128,
|
||||
maskRadius: 4,
|
||||
useInten: true,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Oilify.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:oilify';
|
||||
|
||||
constructor(parameters?: Partial<OilifyParameters>) {
|
||||
super({...Oilify.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface PlasmaParameters {
|
||||
height: number;
|
||||
seed: number;
|
||||
turbulence: number;
|
||||
width: number;
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export class Plasma extends BaseOperation<PlasmaParameters> {
|
||||
public static default: PlasmaParameters = {
|
||||
height: 768,
|
||||
seed: 0,
|
||||
turbulence: 1,
|
||||
width: 1024,
|
||||
x: 0,
|
||||
y: 0,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Plasma.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:plasma';
|
||||
|
||||
constructor(parameters?: Partial<PlasmaParameters>) {
|
||||
super({...Plasma.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface SimplexNoiseParameters {
|
||||
iterations: number;
|
||||
scale: number;
|
||||
seed: number;
|
||||
}
|
||||
|
||||
export class SimplexNoise extends BaseOperation<SimplexNoiseParameters> {
|
||||
public static default: SimplexNoiseParameters = {
|
||||
iterations: 1,
|
||||
scale: 1,
|
||||
seed: 1,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return SimplexNoise.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:simplex-noise';
|
||||
|
||||
constructor(parameters?: Partial<SimplexNoiseParameters>) {
|
||||
super({...SimplexNoise.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface SoftglowParameters {
|
||||
brightness: number;
|
||||
glowRadius: number;
|
||||
sharpness: number;
|
||||
}
|
||||
|
||||
export class Softglow extends BaseOperation<SoftglowParameters> {
|
||||
public static default: SoftglowParameters = {
|
||||
brightness: 0.3,
|
||||
glowRadius: 10,
|
||||
sharpness: 0.85,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Softglow.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:softglow';
|
||||
|
||||
constructor(parameters?: Partial<SoftglowParameters>) {
|
||||
super({...Softglow.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface StereographicProjectionParameters {
|
||||
height: number;
|
||||
inverse: boolean;
|
||||
pan: number;
|
||||
samplerType: 'nearest' | 'linear' | 'cubic' | 'nohalo' | 'lohalo';
|
||||
spin: number;
|
||||
tilt: number;
|
||||
width: number;
|
||||
zoom: number;
|
||||
}
|
||||
|
||||
export class StereographicProjection extends BaseOperation<StereographicProjectionParameters> {
|
||||
public static default: StereographicProjectionParameters = {
|
||||
height: -1,
|
||||
inverse: false,
|
||||
pan: 0,
|
||||
samplerType: 'nearest',
|
||||
spin: 0,
|
||||
tilt: 90,
|
||||
width: -1,
|
||||
zoom: 100,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return StereographicProjection.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:stereographic-projection';
|
||||
|
||||
constructor(parameters?: Partial<StereographicProjectionParameters>) {
|
||||
super({...StereographicProjection.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface TileGlassParameters {
|
||||
tileHeight: number;
|
||||
tileWidth: number;
|
||||
}
|
||||
|
||||
export class TileGlass extends BaseOperation<TileGlassParameters> {
|
||||
public static default: TileGlassParameters = {
|
||||
tileHeight: 25,
|
||||
tileWidth: 25,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return TileGlass.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:tile-glass';
|
||||
|
||||
constructor(parameters?: Partial<TileGlassParameters>) {
|
||||
super({...TileGlass.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export type TileSeamlessParameters = Record<string, unknown>;
|
||||
|
||||
export class TileSeamless extends BaseOperation<TileSeamlessParameters> {
|
||||
public get default() {
|
||||
return {};
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:tile-seamless';
|
||||
|
||||
constructor() {
|
||||
super({});
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface WaterpixelsParameters {
|
||||
fill: 'average' | 'random';
|
||||
regularization: number;
|
||||
size: number;
|
||||
smoothness: number;
|
||||
}
|
||||
|
||||
export class Waterpixels extends BaseOperation<WaterpixelsParameters> {
|
||||
public static default: WaterpixelsParameters = {
|
||||
fill: 'average',
|
||||
regularization: 0,
|
||||
size: 32,
|
||||
smoothness: 1,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Waterpixels.default;
|
||||
}
|
||||
|
||||
public appendCrop = false;
|
||||
public name = 'gegl:waterpixels';
|
||||
|
||||
constructor(parameters?: Partial<WaterpixelsParameters>) {
|
||||
super({...Waterpixels.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
import {BaseOperation} from './base.js';
|
||||
|
||||
export interface WavesParameters {
|
||||
amplitude: number;
|
||||
aspect: number;
|
||||
clamp: boolean;
|
||||
period: number;
|
||||
phi: number;
|
||||
samplerType: 'nearest' | 'linear' | 'cubic' | 'nohalo' | 'lohalo';
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
|
||||
export class Waves extends BaseOperation<WavesParameters> {
|
||||
public static default: WavesParameters = {
|
||||
amplitude: 25,
|
||||
aspect: 1,
|
||||
clamp: false,
|
||||
period: 100,
|
||||
phi: 0,
|
||||
samplerType: 'cubic',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
};
|
||||
|
||||
public get default() {
|
||||
return Waves.default;
|
||||
}
|
||||
|
||||
public appendCrop = true;
|
||||
public name = 'gegl:waves';
|
||||
|
||||
constructor(parameters?: Partial<WavesParameters>) {
|
||||
super({...Waves.default, ...parameters});
|
||||
}
|
||||
}
|
|
@ -1,132 +0,0 @@
|
|||
import fsp from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import {performance} from 'node:perf_hooks';
|
||||
|
||||
import {execa} from 'execa';
|
||||
import meow from 'meow';
|
||||
|
||||
import {Crop} from './gegl/exports.js';
|
||||
import Project from './project.js';
|
||||
|
||||
import p2022 from './2022/projects.js';
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const cli = meow(
|
||||
`
|
||||
Options
|
||||
--filter <name> Only render projects starting with <name>.
|
||||
--include-defaults Include default GEGL operation parameters.
|
||||
--no-render Don't render any images.
|
||||
`,
|
||||
{
|
||||
flags: {
|
||||
filter: {
|
||||
default: '',
|
||||
type: 'string',
|
||||
},
|
||||
includeDefaults: {
|
||||
default: false,
|
||||
type: 'boolean',
|
||||
},
|
||||
render: {
|
||||
default: true,
|
||||
type: 'boolean',
|
||||
},
|
||||
},
|
||||
importMeta: import.meta,
|
||||
},
|
||||
);
|
||||
|
||||
const includeDefaults = cli.flags.includeDefaults;
|
||||
const noRender = !cli.flags.render;
|
||||
|
||||
const projects: Project[] = [...p2022].filter((project) =>
|
||||
project.name.startsWith(cli.flags.filter),
|
||||
);
|
||||
|
||||
for (const {
|
||||
createInputImage,
|
||||
name,
|
||||
operations,
|
||||
resolution,
|
||||
resetAlpha,
|
||||
} of projects) {
|
||||
const dataStart = performance.now();
|
||||
const {width, height} = resolution;
|
||||
|
||||
const baseDir = path.resolve(`./output/${name}`);
|
||||
await fsp.mkdir(baseDir, {recursive: true});
|
||||
|
||||
console.log(`# ${name}`);
|
||||
console.log(`* ${width}x${height}`);
|
||||
console.log(`* ${operations.length} operations`);
|
||||
|
||||
const graph = operations.flatMap((operation) => {
|
||||
const graph = operation.graph(includeDefaults);
|
||||
if (operation.appendCrop) {
|
||||
graph.push(...new Crop({height, width}).graph(includeDefaults));
|
||||
}
|
||||
|
||||
return graph;
|
||||
});
|
||||
|
||||
const prettyGraph = graph.map((operation) =>
|
||||
operation.startsWith('gegl:') ? `\n${operation}\n` : ` ${operation}\n`,
|
||||
);
|
||||
|
||||
const graphFile = `${name}.txt`;
|
||||
const outputFile = `${name}.png`;
|
||||
const compressedFile = `${outputFile.slice(0, -4)}.jpeg`;
|
||||
|
||||
console.log(`* Writing ${graphFile}`);
|
||||
await fsp.writeFile(
|
||||
path.join(baseDir, graphFile),
|
||||
prettyGraph.join('').trimStart(),
|
||||
);
|
||||
|
||||
if (noRender) {
|
||||
console.log(`* Skipped ${outputFile}`);
|
||||
} else {
|
||||
const fullOutputFile = path.join(baseDir, outputFile);
|
||||
if (createInputImage) {
|
||||
await execa('convert', [
|
||||
'-size',
|
||||
`${width}x${height}`,
|
||||
'xc:white',
|
||||
fullOutputFile,
|
||||
]);
|
||||
}
|
||||
|
||||
console.log(`* Writing ${outputFile}`);
|
||||
await execa('gegl', [
|
||||
...(createInputImage ? ['-i', fullOutputFile] : []),
|
||||
'-o',
|
||||
fullOutputFile,
|
||||
'--',
|
||||
...graph,
|
||||
]);
|
||||
|
||||
if (resetAlpha) {
|
||||
await execa('convert', [
|
||||
fullOutputFile,
|
||||
'-alpha',
|
||||
'Off',
|
||||
fullOutputFile,
|
||||
]);
|
||||
}
|
||||
|
||||
console.log(`* Writing ${compressedFile}`);
|
||||
await execa('convert', [
|
||||
fullOutputFile,
|
||||
'-quality',
|
||||
'92',
|
||||
path.join(baseDir, compressedFile),
|
||||
]);
|
||||
}
|
||||
|
||||
const time = (performance.now() - dataStart).toFixed(2);
|
||||
console.log(`* Generated in ${time}ms`);
|
||||
}
|
||||
}
|
||||
|
||||
void main();
|
|
@ -1,12 +0,0 @@
|
|||
import {BaseOperation} from './gegl/exports.js';
|
||||
|
||||
export default interface Project {
|
||||
createInputImage: boolean;
|
||||
name: string;
|
||||
operations: Array<InstanceType<typeof BaseOperation>>;
|
||||
resetAlpha: boolean;
|
||||
resolution: {
|
||||
height: number;
|
||||
width: number;
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue