@sealpixel/plugin-finetune 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @sealpixel/plugin-finetune
2
+
3
+ Brightness, contrast, saturation, exposure, gamma, clarity and vignette adjustments. Part of the Sealpixel image editor.
@@ -0,0 +1,111 @@
1
+ import type { OperationBase } from '@sealpixel/core';
2
+ import { z } from 'zod';
3
+ /** All -1..1 except gamma (0.1..10, identity 1). */
4
+ export interface FinetuneParams {
5
+ brightness: number;
6
+ contrast: number;
7
+ saturation: number;
8
+ exposure: number;
9
+ gamma: number;
10
+ clarity: number;
11
+ vignette: number;
12
+ }
13
+ export type FinetuneDoc = FinetuneParams;
14
+ /** Merge-sets any subset of the parameters. */
15
+ export interface FinetuneSetOp extends OperationBase<'finetune.set'> {
16
+ params: {
17
+ [K in keyof FinetuneParams]?: FinetuneParams[K] | undefined;
18
+ };
19
+ }
20
+ export type FinetuneResetOp = OperationBase<'finetune.reset'>;
21
+ declare module '@sealpixel/core' {
22
+ interface OperationRegistry {
23
+ 'finetune.set': FinetuneSetOp;
24
+ 'finetune.reset': FinetuneResetOp;
25
+ }
26
+ interface DocumentRegistry {
27
+ finetune: FinetuneDoc;
28
+ }
29
+ }
30
+ export declare const DEFAULT_FINETUNE: FinetuneParams;
31
+ export declare const FinetuneParamsSchema: z.ZodObject<{
32
+ brightness: z.ZodNumber;
33
+ contrast: z.ZodNumber;
34
+ saturation: z.ZodNumber;
35
+ exposure: z.ZodNumber;
36
+ gamma: z.ZodNumber;
37
+ clarity: z.ZodNumber;
38
+ vignette: z.ZodNumber;
39
+ }, z.core.$strict>;
40
+ export declare const finetuneSet: import("@sealpixel/core").OperationDef<FinetuneParams, FinetuneSetOp>;
41
+ export declare const finetuneReset: import("@sealpixel/core").OperationDef<FinetuneParams, FinetuneResetOp>;
42
+ /** Contributes only the non-identity parameters to the shared `color` stage. */
43
+ export type FinetuneControl = keyof FinetuneParams;
44
+ export interface FinetuneRange {
45
+ min: number;
46
+ max: number;
47
+ step: number;
48
+ }
49
+ export declare const FinetuneOptionsSchema: z.ZodObject<{
50
+ controls: z.ZodArray<z.ZodEnum<{
51
+ brightness: "brightness";
52
+ contrast: "contrast";
53
+ saturation: "saturation";
54
+ exposure: "exposure";
55
+ gamma: "gamma";
56
+ clarity: "clarity";
57
+ vignette: "vignette";
58
+ }>>;
59
+ ranges: z.ZodRecord<z.ZodEnum<{
60
+ brightness: "brightness";
61
+ contrast: "contrast";
62
+ saturation: "saturation";
63
+ exposure: "exposure";
64
+ gamma: "gamma";
65
+ clarity: "clarity";
66
+ vignette: "vignette";
67
+ }> & z.core.$partial, z.ZodObject<{
68
+ min: z.ZodNumber;
69
+ max: z.ZodNumber;
70
+ step: z.ZodNumber;
71
+ }, z.core.$strict>>;
72
+ defaults: z.ZodObject<{
73
+ brightness: z.ZodOptional<z.ZodNumber>;
74
+ contrast: z.ZodOptional<z.ZodNumber>;
75
+ saturation: z.ZodOptional<z.ZodNumber>;
76
+ exposure: z.ZodOptional<z.ZodNumber>;
77
+ gamma: z.ZodOptional<z.ZodNumber>;
78
+ clarity: z.ZodOptional<z.ZodNumber>;
79
+ vignette: z.ZodOptional<z.ZodNumber>;
80
+ }, z.core.$strict>;
81
+ enforce: z.ZodBoolean;
82
+ }, z.core.$strict>;
83
+ /**
84
+ * `controls`: parameters shown, in order (others are rejected). `ranges`:
85
+ * slider bounds per parameter, overriding the built-in range. `defaults`:
86
+ * values applied to a freshly loaded image.
87
+ */
88
+ export type FinetuneOptions = z.infer<typeof FinetuneOptionsSchema>;
89
+ export declare const FINETUNE_BUILTIN_RANGES: Record<FinetuneControl, FinetuneRange>;
90
+ export declare const FINETUNE_DEFAULT_OPTIONS: FinetuneOptions;
91
+ /** The effective slider range for a control. */
92
+ export declare function finetuneRange(options: FinetuneOptions, control: FinetuneControl): FinetuneRange;
93
+ export declare const finetunePlugin: import("@sealpixel/plugin-sdk").ConfigurablePlugin<"finetune", FinetuneParams, {
94
+ controls: ("brightness" | "contrast" | "saturation" | "exposure" | "gamma" | "clarity" | "vignette")[];
95
+ ranges: Partial<Record<"brightness" | "contrast" | "saturation" | "exposure" | "gamma" | "clarity" | "vignette", {
96
+ min: number;
97
+ max: number;
98
+ step: number;
99
+ }>>;
100
+ defaults: {
101
+ brightness?: number | undefined;
102
+ contrast?: number | undefined;
103
+ saturation?: number | undefined;
104
+ exposure?: number | undefined;
105
+ gamma?: number | undefined;
106
+ clarity?: number | undefined;
107
+ vignette?: number | undefined;
108
+ };
109
+ enforce: boolean;
110
+ }>;
111
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC;AAEzC,+CAA+C;AAC/C,MAAM,WAAW,aAAc,SAAQ,aAAa,CAAC,cAAc,CAAC;IAClE,MAAM,EAAE;SAAG,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;KAAE,CAAC;CACzE;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAE9D,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,iBAAiB;QACzB,cAAc,EAAE,aAAa,CAAC;QAC9B,gBAAgB,EAAE,eAAe,CAAC;KACnC;IACD,UAAU,gBAAgB;QACxB,QAAQ,EAAE,WAAW,CAAC;KACvB;CACF;AAED,eAAO,MAAM,gBAAgB,EAAE,cAQ9B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;kBAUtB,CAAC;AAIZ,eAAO,MAAM,WAAW,uEAatB,CAAC;AAEH,eAAO,MAAM,aAAa,yEAIxB,CAAC;AAEH,gFAAgF;AAChF,MAAM,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC;AACnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAeD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOvB,CAAC;AAEZ;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,aAAa,CAQ1E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAKtC,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,CAE/F;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;EAwCzB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,129 @@
1
+ import { defineOperation, definePlugin } from '@sealpixel/plugin-sdk';
2
+ import { z } from 'zod';
3
+ export const DEFAULT_FINETUNE = {
4
+ brightness: 0,
5
+ contrast: 0,
6
+ saturation: 0,
7
+ exposure: 0,
8
+ gamma: 1,
9
+ clarity: 0,
10
+ vignette: 0,
11
+ };
12
+ const signed = z.number().min(-1).max(1);
13
+ export const FinetuneParamsSchema = z
14
+ .object({
15
+ brightness: signed,
16
+ contrast: signed,
17
+ saturation: signed,
18
+ exposure: z.number().min(-3).max(3),
19
+ gamma: z.number().min(0.1).max(10),
20
+ clarity: signed,
21
+ vignette: signed,
22
+ })
23
+ .strict();
24
+ const base = { id: z.string().min(1), at: z.number().optional() };
25
+ export const finetuneSet = defineOperation({
26
+ type: 'finetune.set',
27
+ schema: z
28
+ .object({ type: z.literal('finetune.set'), ...base, params: FinetuneParamsSchema.partial() })
29
+ .strict(),
30
+ reduce: (slice, op) => {
31
+ const next = { ...slice };
32
+ for (const key of Object.keys(DEFAULT_FINETUNE)) {
33
+ const v = op.params[key];
34
+ if (v !== undefined)
35
+ next[key] = v;
36
+ }
37
+ return next;
38
+ },
39
+ });
40
+ export const finetuneReset = defineOperation({
41
+ type: 'finetune.reset',
42
+ schema: z.object({ type: z.literal('finetune.reset'), ...base }).strict(),
43
+ reduce: () => DEFAULT_FINETUNE,
44
+ });
45
+ const CONTROLS = [
46
+ 'brightness',
47
+ 'contrast',
48
+ 'saturation',
49
+ 'exposure',
50
+ 'gamma',
51
+ 'clarity',
52
+ 'vignette',
53
+ ];
54
+ const rangeSchema = z
55
+ .object({ min: z.number().finite(), max: z.number().finite(), step: z.number().positive() })
56
+ .strict()
57
+ .refine((r) => r.min < r.max, 'min must be below max');
58
+ export const FinetuneOptionsSchema = z
59
+ .object({
60
+ controls: z.array(z.enum(CONTROLS)).min(1),
61
+ ranges: z.partialRecord(z.enum(CONTROLS), rangeSchema),
62
+ defaults: FinetuneParamsSchema.partial(),
63
+ enforce: z.boolean(),
64
+ })
65
+ .strict();
66
+ export const FINETUNE_BUILTIN_RANGES = {
67
+ brightness: { min: -1, max: 1, step: 0.01 },
68
+ contrast: { min: -1, max: 1, step: 0.01 },
69
+ saturation: { min: -1, max: 1, step: 0.01 },
70
+ exposure: { min: -3, max: 3, step: 0.01 },
71
+ gamma: { min: 0.1, max: 4, step: 0.01 },
72
+ clarity: { min: -1, max: 1, step: 0.01 },
73
+ vignette: { min: -1, max: 1, step: 0.01 },
74
+ };
75
+ export const FINETUNE_DEFAULT_OPTIONS = {
76
+ controls: [...CONTROLS],
77
+ ranges: {},
78
+ defaults: {},
79
+ enforce: false,
80
+ };
81
+ /** The effective slider range for a control. */
82
+ export function finetuneRange(options, control) {
83
+ return options.ranges[control] ?? FINETUNE_BUILTIN_RANGES[control];
84
+ }
85
+ export const finetunePlugin = definePlugin({
86
+ id: 'finetune',
87
+ version: 1,
88
+ operations: [finetuneSet, finetuneReset],
89
+ initialDocument: DEFAULT_FINETUNE,
90
+ stage: { name: 'color', order: 100 },
91
+ toPlan: (doc) => {
92
+ const params = {};
93
+ for (const key of Object.keys(DEFAULT_FINETUNE)) {
94
+ if (doc[key] !== DEFAULT_FINETUNE[key])
95
+ params[key] = doc[key];
96
+ }
97
+ return Object.keys(params).length === 0 ? null : params;
98
+ },
99
+ kernel: { kind: 'core' },
100
+ options: {
101
+ schema: FinetuneOptionsSchema,
102
+ defaults: FINETUNE_DEFAULT_OPTIONS,
103
+ describe: {
104
+ controls: 'Parameters shown, in order; others are rejected.',
105
+ ranges: 'Slider bounds per parameter, overriding the built-in range.',
106
+ defaults: 'Values applied to a freshly loaded image.',
107
+ enforce: 'Reject ops that touch hidden controls or leave the configured ranges.',
108
+ },
109
+ },
110
+ initialOps: ({ options }) => Object.keys(options.defaults).length === 0
111
+ ? []
112
+ : [{ type: 'finetune.set', params: options.defaults }],
113
+ validate: (op, { options }) => {
114
+ if (op.type !== 'finetune.set' || !options.enforce)
115
+ return null;
116
+ for (const [key, value] of Object.entries(op.params)) {
117
+ const control = key;
118
+ if (value === undefined)
119
+ continue;
120
+ if (!options.controls.includes(control))
121
+ return `"${control}" is not offered by this editor`;
122
+ const r = finetuneRange(options, control);
123
+ if (value < r.min - 1e-9 || value > r.max + 1e-9)
124
+ return `"${control}" must stay within ${r.min}..${r.max}`;
125
+ }
126
+ return null;
127
+ },
128
+ });
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@sealpixel/plugin-finetune",
3
+ "version": "1.0.0-rc.0",
4
+ "description": "Brightness, contrast, saturation, exposure, gamma, clarity and vignette adjustments.",
5
+ "license": "BUSL-1.1",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/9feet/sealpixel.git",
9
+ "directory": "packages/plugins/finetune"
10
+ },
11
+ "homepage": "https://docs.sealpixel.dev",
12
+ "bugs": "https://github.com/9feet/sealpixel/issues",
13
+ "type": "module",
14
+ "sideEffects": false,
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "keywords": [
20
+ "sealpixel-plugin"
21
+ ],
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc -p tsconfig.build.json",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit",
32
+ "test": "vitest run"
33
+ },
34
+ "dependencies": {
35
+ "@sealpixel/plugin-sdk": "workspace:*"
36
+ },
37
+ "peerDependencies": {
38
+ "@sealpixel/core": "workspace:*",
39
+ "zod": "^4.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "@sealpixel/config": "workspace:*",
43
+ "@sealpixel/core": "workspace:*",
44
+ "@types/node": "^24.0.0",
45
+ "typescript": "^5.9.0",
46
+ "vitest": "^4.0.0",
47
+ "zod": "^4.0.0"
48
+ }
49
+ }