@apergrex/n8n-nodes-franklab 0.1.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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/credentials/FrankLabApi.credentials.d.ts +9 -0
  4. package/dist/credentials/FrankLabApi.credentials.js +50 -0
  5. package/dist/credentials/FrankLabApi.credentials.js.map +1 -0
  6. package/dist/credentials/franklab.svg +4 -0
  7. package/dist/nodes/C2pa/C2pa.node.json +10 -0
  8. package/dist/nodes/C2pa/FrankLabC2pa.node.d.ts +5 -0
  9. package/dist/nodes/C2pa/FrankLabC2pa.node.js +58 -0
  10. package/dist/nodes/C2pa/FrankLabC2pa.node.js.map +1 -0
  11. package/dist/nodes/C2pa/c2pa.svg +5 -0
  12. package/dist/nodes/Holst/FrankLabHolst.node.d.ts +5 -0
  13. package/dist/nodes/Holst/FrankLabHolst.node.js +99 -0
  14. package/dist/nodes/Holst/FrankLabHolst.node.js.map +1 -0
  15. package/dist/nodes/Holst/Holst.node.json +10 -0
  16. package/dist/nodes/Holst/holst.svg +6 -0
  17. package/dist/nodes/Kley/FrankLabKley.node.d.ts +5 -0
  18. package/dist/nodes/Kley/FrankLabKley.node.js +95 -0
  19. package/dist/nodes/Kley/FrankLabKley.node.js.map +1 -0
  20. package/dist/nodes/Kley/Kley.node.json +10 -0
  21. package/dist/nodes/Kley/kley.svg +6 -0
  22. package/dist/nodes/Plastinka/FrankLabPlastinka.node.d.ts +5 -0
  23. package/dist/nodes/Plastinka/FrankLabPlastinka.node.js +112 -0
  24. package/dist/nodes/Plastinka/FrankLabPlastinka.node.js.map +1 -0
  25. package/dist/nodes/Plastinka/Plastinka.node.json +10 -0
  26. package/dist/nodes/Plastinka/plastinka.svg +6 -0
  27. package/dist/nodes/Volna/FrankLabVolna.node.d.ts +5 -0
  28. package/dist/nodes/Volna/FrankLabVolna.node.js +246 -0
  29. package/dist/nodes/Volna/FrankLabVolna.node.js.map +1 -0
  30. package/dist/nodes/Volna/Volna.node.json +10 -0
  31. package/dist/nodes/Volna/volna.svg +5 -0
  32. package/dist/nodes/shared/client.d.ts +30 -0
  33. package/dist/nodes/shared/client.js +215 -0
  34. package/dist/nodes/shared/client.js.map +1 -0
  35. package/dist/nodes/shared/node-utils.d.ts +7 -0
  36. package/dist/nodes/shared/node-utils.js +191 -0
  37. package/dist/nodes/shared/node-utils.js.map +1 -0
  38. package/dist/nodes/shared/redaction.d.ts +1 -0
  39. package/dist/nodes/shared/redaction.js +48 -0
  40. package/dist/nodes/shared/redaction.js.map +1 -0
  41. package/dist/nodes/shared/registry.d.ts +29 -0
  42. package/dist/nodes/shared/registry.js +584 -0
  43. package/dist/nodes/shared/registry.js.map +1 -0
  44. package/dist/nodes/shared/status.d.ts +4 -0
  45. package/dist/nodes/shared/status.js +20 -0
  46. package/dist/nodes/shared/status.js.map +1 -0
  47. package/dist/nodes/shared/url.d.ts +4 -0
  48. package/dist/nodes/shared/url.js +164 -0
  49. package/dist/nodes/shared/url.js.map +1 -0
  50. package/dist/package.json +59 -0
  51. package/examples/holst-image-info.workflow.json +19 -0
  52. package/package.json +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FrankLab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,162 @@
1
+ # @apergrex/n8n-nodes-franklab
2
+
3
+ Official FrankLab community nodes for n8n.
4
+
5
+ FrankLab is a first-party media automation API for image processing, video post-production, audio processing, voice generation, dubbing, and content credential profile management. This package integrates one service: the FrankLab API at `https://franklab.ru/franklab/api`.
6
+
7
+ ## What This Package Contains
8
+
9
+ This repository is the public n8n connector package only. It contains:
10
+
11
+ - n8n node definitions for HOLST, KLEY, PLASTINKA, VOLNA, and C2PA.
12
+ - FrankLab API credential definition.
13
+ - A small request client that calls the public FrankLab API with your API key.
14
+ - Tests, examples, and GitHub Actions workflows for n8n community-node verification and npm provenance publishing.
15
+
16
+ It does not contain FrankLab backend source code, provider integrations, provider API keys, `.env` files, billing internals, partner-admin routes, database schema, MCP tooling, or private Make.com module sources.
17
+
18
+ ## API Key And Price List
19
+
20
+ You need a FrankLab API key before these nodes can run jobs.
21
+
22
+ To request an API key, current pricing, and onboarding details, contact:
23
+
24
+ - Email: `fedorchuk.a@apergrex.com`
25
+ - Telegram: `@ReanimatorXP`
26
+
27
+ Please mention that you want to use `@apergrex/n8n-nodes-franklab` in n8n. FrankLab will provide the API key and the current price list or commercial terms for your use case.
28
+
29
+ ## Billing
30
+
31
+ The n8n package does not calculate prices, hold balances, or bill customers locally. Billing and access control happen on the FrankLab API side:
32
+
33
+ 1. n8n sends your API key with each request.
34
+ 2. FrankLab identifies the account, partner, or workspace behind that key.
35
+ 3. FrankLab validates access and available limits or balance.
36
+ 4. FrankLab creates the job and applies the server-side billing rules.
37
+ 5. Where supported, responses include cost fields such as `final_cost_franks`, `cost_currency`, `cost_status`, and `cost_unit`.
38
+
39
+ For production use, request your API key and current price list before building workflows that generate paid media jobs.
40
+
41
+ ## Installation
42
+
43
+ Install the package through n8n community nodes:
44
+
45
+ ```text
46
+ @apergrex/n8n-nodes-franklab
47
+ ```
48
+
49
+ Follow the official [n8n community node installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) if your n8n instance has not installed community nodes before.
50
+
51
+ ## Credentials
52
+
53
+ Create a FrankLab credential in n8n after installation.
54
+
55
+ The credential has two fields:
56
+
57
+ - `API Key`: your FrankLab API key.
58
+ - `Base URL`: fixed to `https://franklab.ru/franklab/api` or `https://franklab.ru`.
59
+
60
+ The public package does not support custom hosts, local hosts, DNS overrides, or test-host switches.
61
+
62
+ ## Cookbook
63
+
64
+ Use the FrankLab Cookbook for workflow examples and field-level guidance:
65
+
66
+ https://franklab.ru/franklab/cookbook
67
+
68
+ The cookbook includes Make.com and n8n editions. Use the platform switch in the cookbook to move between versions.
69
+
70
+ ## Operations
71
+
72
+ ### HOLST
73
+
74
+ - Submit an image processing job.
75
+ - Poll an image job status.
76
+ - Supported image operations include resize, crop, format conversion, watermark, image overlay, text, filters, rotate, flip, blur, sharpen, mask, metadata read/write, collage, adjust, and GPS metadata removal.
77
+
78
+ ### KLEY
79
+
80
+ - Montage operations.
81
+ - Video speed changes.
82
+ - Subtitle rendering.
83
+ - Video overlays.
84
+ - Job status polling.
85
+
86
+ ### PLASTINKA
87
+
88
+ - Audio processing.
89
+ - Save a reusable audio sample from a public HTTPS URL.
90
+ - List audio samples.
91
+ - Apply a saved sample to a video.
92
+ - Job status polling.
93
+
94
+ ### VOLNA
95
+
96
+ - Text to speech.
97
+ - Text to dialogue, turbo TTS, and Google 3.1 TTS.
98
+ - Speech to text.
99
+ - Sound effects.
100
+ - Audio isolation.
101
+ - Voice clone.
102
+ - Voice design.
103
+ - Save a designed voice.
104
+ - Dubbing.
105
+ - Voice, model, usage, and task lookups.
106
+
107
+ ### C2PA
108
+
109
+ - List signer profiles.
110
+ - Generate a self-signed signer profile.
111
+ - Revoke a signer profile.
112
+ - Load profile options for other FrankLab nodes.
113
+
114
+ Public verified v1 intentionally excludes private key import and private key rotation flows.
115
+
116
+ ## Usage Notes
117
+
118
+ All media inputs in public v1 are URL-only. Use public `http` or `https` URLs. Local URLs such as localhost, loopback/link-local IPs, metadata hosts, and file paths are rejected.
119
+
120
+ Most submit operations return a `taskId`. Enable `Wait for Completion` to poll until FrankLab returns a terminal status, or use the matching status operation later in the workflow.
121
+
122
+ For advanced request fields, use `Additional JSON`. Keep media URLs public and never paste secrets, private keys, PEM files, or provider credentials into workflow fields.
123
+
124
+ ## Compatibility
125
+
126
+ The package is built with the official `n8n-node` tool and `@n8n/node-cli >= 0.23.0`.
127
+
128
+ Development and CI use Node.js 24. The package declares `node >=20.19` because the current n8n toolchain requires a Node 20 build with modern ESM interop or newer.
129
+
130
+ The verified package has no runtime dependencies. Development dependencies are used only for build, lint, release, and local tests.
131
+
132
+ ## Verification
133
+
134
+ - `npm run build`: compile and copy n8n node assets.
135
+ - `npm test`: run package metadata, registry, client, and leakage tests.
136
+ - `npm run scan`: run local n8n lint plus `npm pack --dry-run`.
137
+ - `npm run scan:published`: run the official n8n published-package scanner after the package is published to npm with provenance.
138
+
139
+ ## Public Release Repository
140
+
141
+ This repository is intended to be public so npm provenance can be verified by GitHub Actions. The npm package is published from this public package repository, not from the private FrankLab monorepo.
142
+
143
+ Recommended release flow:
144
+
145
+ 1. Merge package changes in the private FrankLab monorepo.
146
+ 2. Export or sync only `integrations/n8n-nodes-franklab` into the public `d906090-rgb/n8n-nodes-franklab` repository.
147
+ 3. Review the public repository file list before pushing.
148
+ 4. Push the release tag to the public repository.
149
+ 5. Let the public GitHub Actions publish workflow run `npm run release` with npm provenance.
150
+ 6. Verify the published package with `npm run scan:published`.
151
+
152
+ ## Resources
153
+
154
+ - [FrankLab Cookbook](https://franklab.ru/franklab/cookbook)
155
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
156
+ - [Submit n8n community nodes](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/)
157
+ - [n8n community node verification guidelines](https://docs.n8n.io/integrations/creating-nodes/build/reference/verification-guidelines/)
158
+ - [Public package repository](https://github.com/d906090-rgb/n8n-nodes-franklab)
159
+
160
+ ## Version History
161
+
162
+ - `0.1.0`: First-wave package scaffold for HOLST, KLEY, PLASTINKA, VOLNA, and C2PA.
@@ -0,0 +1,9 @@
1
+ import type { ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class FrankLabApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: "file:franklab.svg";
7
+ properties: INodeProperties[];
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrankLabApi = void 0;
4
+ class FrankLabApi {
5
+ constructor() {
6
+ this.name = 'frankLabApi';
7
+ this.displayName = 'FrankLab API';
8
+ this.documentationUrl = 'https://github.com/d906090-rgb/n8n-nodes-franklab#credentials';
9
+ this.icon = 'file:franklab.svg';
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ required: true,
18
+ },
19
+ {
20
+ displayName: 'Base URL',
21
+ name: 'baseUrl',
22
+ type: 'options',
23
+ default: 'https://franklab.ru/franklab/api',
24
+ options: [
25
+ {
26
+ name: 'FrankLab Production',
27
+ value: 'https://franklab.ru/franklab/api',
28
+ },
29
+ {
30
+ name: 'FrankLab Production Root',
31
+ value: 'https://franklab.ru',
32
+ },
33
+ ],
34
+ required: true,
35
+ description: 'The verified public package only supports the FrankLab production origin.',
36
+ },
37
+ ];
38
+ this.test = {
39
+ request: {
40
+ baseURL: 'https://franklab.ru/franklab/api',
41
+ url: '/franklab/integrations/text-sticker/auth/stats',
42
+ headers: {
43
+ Authorization: '=Bearer {{$credentials.apiKey}}',
44
+ },
45
+ },
46
+ };
47
+ }
48
+ }
49
+ exports.FrankLabApi = FrankLabApi;
50
+ //# sourceMappingURL=FrankLabApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrankLabApi.credentials.js","sourceRoot":"","sources":["../../credentials/FrankLabApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IAAxB;QACC,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GAAG,cAAc,CAAC;QAC7B,qBAAgB,GAAG,+DAA+D,CAAC;QACnF,SAAI,GAAG,mBAA4B,CAAC;QAEpC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,kCAAkC;gBAC3C,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,qBAAqB;wBAC3B,KAAK,EAAE,kCAAkC;qBACzC;oBACD;wBACC,IAAI,EAAE,0BAA0B;wBAChC,KAAK,EAAE,qBAAqB;qBAC5B;iBACD;gBACD,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,2EAA2E;aACxF;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kCAAkC;gBAC3C,GAAG,EAAE,gDAAgD;gBACrD,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA5CD,kCA4CC"}
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="FrankLab">
2
+ <rect width="64" height="64" rx="12" fill="#101820" />
3
+ <path fill="#14b8a6" d="M14 14h36v9H24v9h20v9H24v9H14z" />
4
+ </svg>
@@ -0,0 +1,10 @@
1
+ {
2
+ "node": "n8n-nodes-base.frankLabC2pa",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Utility"],
6
+ "resources": {
7
+ "credentialDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#credentials" }],
8
+ "primaryDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#c2pa" }]
9
+ }
10
+ }
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class FrankLabC2pa implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<import("n8n-workflow").INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrankLabC2pa = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const node_utils_1 = require("../shared/node-utils");
6
+ class FrankLabC2pa {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'FrankLab C2PA',
10
+ name: 'frankLabC2pa',
11
+ icon: 'file:c2pa.svg',
12
+ group: ['transform'],
13
+ version: 1,
14
+ description: 'Manage safe FrankLab C2PA signer profiles.',
15
+ defaults: {
16
+ name: 'FrankLab C2PA',
17
+ },
18
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
19
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
20
+ credentials: [
21
+ {
22
+ name: 'frankLabApi',
23
+ required: true,
24
+ },
25
+ ],
26
+ usableAsTool: true,
27
+ properties: [
28
+ {
29
+ displayName: 'Operation',
30
+ name: 'operation',
31
+ type: 'options',
32
+ noDataExpression: true,
33
+ default: 'listProfiles',
34
+ options: [
35
+ { name: 'Generate Self-Signed Profile', value: 'generateSelfSigned' },
36
+ { name: 'List Profiles', value: 'listProfiles' },
37
+ { name: 'Profile Options', value: 'profileOptions' },
38
+ { name: 'Revoke Profile', value: 'revokeProfile' },
39
+ ],
40
+ },
41
+ {
42
+ displayName: 'Label',
43
+ name: 'label',
44
+ type: 'string',
45
+ default: '',
46
+ required: true,
47
+ displayOptions: { show: { operation: ['generateSelfSigned'] } },
48
+ },
49
+ node_utils_1.profileIdProperty,
50
+ ],
51
+ };
52
+ }
53
+ async execute() {
54
+ return (0, node_utils_1.executeFrankLabModule)(this, 'c2pa', 'listProfiles');
55
+ }
56
+ }
57
+ exports.FrankLabC2pa = FrankLabC2pa;
58
+ //# sourceMappingURL=FrankLabC2pa.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrankLabC2pa.node.js","sourceRoot":"","sources":["../../../nodes/C2pa/FrankLabC2pa.node.ts"],"names":[],"mappings":";;;AACA,+CAAmD;AACnD,qDAAgF;AAEhF,MAAa,YAAY;IAAzB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,eAAe;YAC5B,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE;gBACT,IAAI,EAAE,eAAe;aACrB;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,WAAW;oBACxB,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE;wBACR,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,oBAAoB,EAAE;wBACrE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE;wBAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,gBAAgB,EAAE;wBACpD,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE;qBAClD;iBACD;gBACD;oBACC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE;iBAC/D;gBACD,8BAAiB;aACjB;SACD,CAAC;IAKH,CAAC;IAHA,KAAK,CAAC,OAAO;QACZ,OAAO,IAAA,kCAAqB,EAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;CACD;AAjDD,oCAiDC"}
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="FrankLab C2PA">
2
+ <rect width="64" height="64" rx="8" fill="#111827"/>
3
+ <path d="M32 10l18 8v14c0 12-7 19-18 22-11-3-18-10-18-22V18z" fill="#e5e7eb"/>
4
+ <path d="M24 32l6 6 12-14" fill="none" stroke="#22c55e" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class FrankLabHolst implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<import("n8n-workflow").INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrankLabHolst = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const node_utils_1 = require("../shared/node-utils");
6
+ class FrankLabHolst {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'FrankLab HOLST',
10
+ name: 'frankLabHolst',
11
+ icon: 'file:holst.svg',
12
+ group: ['transform'],
13
+ version: 1,
14
+ description: 'Process images with FrankLab HOLST.',
15
+ defaults: {
16
+ name: 'FrankLab HOLST',
17
+ },
18
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
19
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
20
+ credentials: [
21
+ {
22
+ name: 'frankLabApi',
23
+ required: true,
24
+ },
25
+ ],
26
+ usableAsTool: true,
27
+ properties: [
28
+ {
29
+ displayName: 'Operation',
30
+ name: 'operation',
31
+ type: 'options',
32
+ noDataExpression: true,
33
+ default: 'submitImage',
34
+ options: [
35
+ {
36
+ name: 'Get Job Status',
37
+ value: 'getStatus',
38
+ description: 'Fetch a HOLST job status and output',
39
+ action: 'Fetch a HOLST job status and output',
40
+ },
41
+ {
42
+ name: 'Submit Image Job',
43
+ value: 'submitImage',
44
+ description: 'Create a HOLST image processing job',
45
+ action: 'Create a HOLST image processing job',
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ displayName: 'Image URL',
51
+ name: 'imageUrl',
52
+ type: 'string',
53
+ default: '',
54
+ required: true,
55
+ displayOptions: { show: { operation: ['submitImage'] } },
56
+ },
57
+ {
58
+ displayName: 'Image Operation',
59
+ name: 'operationName',
60
+ type: 'options',
61
+ default: 'info',
62
+ options: [
63
+ { name: 'Adjust', value: 'adjust' },
64
+ { name: 'Blur', value: 'blur' },
65
+ { name: 'Collage', value: 'collage' },
66
+ { name: 'Crop', value: 'crop' },
67
+ { name: 'Filter', value: 'filter' },
68
+ { name: 'Flip', value: 'flip' },
69
+ { name: 'Flop', value: 'flop' },
70
+ { name: 'Format', value: 'format' },
71
+ { name: 'Image Overlay', value: 'image_overlay' },
72
+ { name: 'Info', value: 'info' },
73
+ { name: 'Mask', value: 'mask' },
74
+ { name: 'Read Metadata', value: 'read_metadata' },
75
+ { name: 'Replace Metadata', value: 'replace_metadata' },
76
+ { name: 'Resize', value: 'resize' },
77
+ { name: 'Rotate', value: 'rotate' },
78
+ { name: 'Sharpen', value: 'sharpen' },
79
+ { name: 'Strip GPS', value: 'strip_gps' },
80
+ { name: 'Strip Metadata', value: 'strip_meta' },
81
+ { name: 'Text', value: 'text' },
82
+ { name: 'Watermark', value: 'watermark' },
83
+ { name: 'Write EXIF', value: 'write_exif' },
84
+ { name: 'Write Metadata', value: 'write_metadata' },
85
+ ],
86
+ displayOptions: { show: { operation: ['submitImage'] } },
87
+ },
88
+ node_utils_1.jobIdProperty,
89
+ node_utils_1.payloadProperty,
90
+ node_utils_1.waitProperty,
91
+ ],
92
+ };
93
+ }
94
+ async execute() {
95
+ return (0, node_utils_1.executeFrankLabModule)(this, 'holst', 'getStatus');
96
+ }
97
+ }
98
+ exports.FrankLabHolst = FrankLabHolst;
99
+ //# sourceMappingURL=FrankLabHolst.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrankLabHolst.node.js","sourceRoot":"","sources":["../../../nodes/Holst/FrankLabHolst.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "node": "n8n-nodes-base.frankLabHolst",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Marketing & Content", "Utility"],
6
+ "resources": {
7
+ "credentialDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#credentials" }],
8
+ "primaryDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#holst" }]
9
+ }
10
+ }
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="FrankLab HOLST">
2
+ <rect width="64" height="64" rx="8" fill="#111827"/>
3
+ <path d="M16 18h32v28H16z" fill="#f8fafc"/>
4
+ <path d="M22 38l8-10 6 7 5-6 7 9z" fill="#22c55e"/>
5
+ <circle cx="42" cy="25" r="4" fill="#f59e0b"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class FrankLabKley implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<import("n8n-workflow").INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FrankLabKley = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const node_utils_1 = require("../shared/node-utils");
6
+ class FrankLabKley {
7
+ constructor() {
8
+ this.description = {
9
+ displayName: 'FrankLab KLEY',
10
+ name: 'frankLabKley',
11
+ icon: 'file:kley.svg',
12
+ group: ['transform'],
13
+ version: 1,
14
+ description: 'Process video montage, speed, subtitles, and overlays with FrankLab KLEY.',
15
+ defaults: {
16
+ name: 'FrankLab KLEY',
17
+ },
18
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
19
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
20
+ credentials: [
21
+ {
22
+ name: 'frankLabApi',
23
+ required: true,
24
+ },
25
+ ],
26
+ usableAsTool: true,
27
+ properties: [
28
+ {
29
+ displayName: 'Operation',
30
+ name: 'operation',
31
+ type: 'options',
32
+ noDataExpression: true,
33
+ default: 'montage',
34
+ options: [
35
+ { name: 'Change Speed', value: 'videoSpeed' },
36
+ { name: 'Get Job Status', value: 'getStatus' },
37
+ { name: 'Montage', value: 'montage' },
38
+ { name: 'Overlay', value: 'overlay' },
39
+ { name: 'Subtitles', value: 'subtitles' },
40
+ ],
41
+ },
42
+ {
43
+ displayName: 'Video URL',
44
+ name: 'videoUrl',
45
+ type: 'string',
46
+ default: '',
47
+ required: true,
48
+ displayOptions: { show: { operation: ['montage', 'videoSpeed', 'subtitles', 'overlay'] } },
49
+ },
50
+ {
51
+ displayName: 'Montage Operation',
52
+ name: 'operationName',
53
+ type: 'options',
54
+ default: 'probe',
55
+ options: [
56
+ { name: 'Concat', value: 'concat' },
57
+ { name: 'Crop', value: 'crop' },
58
+ { name: 'Fade', value: 'fade' },
59
+ { name: 'Frame', value: 'frame' },
60
+ { name: 'GIF', value: 'gif' },
61
+ { name: 'Picture in Picture', value: 'pip' },
62
+ { name: 'Probe', value: 'probe' },
63
+ { name: 'Replace Tags', value: 'replace_tags' },
64
+ { name: 'Resize', value: 'resize' },
65
+ { name: 'Reverse', value: 'reverse' },
66
+ { name: 'Slideshow', value: 'slideshow' },
67
+ { name: 'Smart Thumbnail', value: 'thumbnail_smart' },
68
+ { name: 'Strip Tags', value: 'strip_tags' },
69
+ { name: 'Transcode', value: 'transcode' },
70
+ { name: 'Trim', value: 'trim' },
71
+ { name: 'Video on Image', value: 'video_on_image' },
72
+ { name: 'Write Tags', value: 'write_tags' },
73
+ ],
74
+ displayOptions: { show: { operation: ['montage'] } },
75
+ },
76
+ {
77
+ displayName: 'Speed',
78
+ name: 'speed',
79
+ type: 'number',
80
+ default: 1,
81
+ typeOptions: { minValue: 0.25, maxValue: 4 },
82
+ displayOptions: { show: { operation: ['videoSpeed'] } },
83
+ },
84
+ node_utils_1.jobIdProperty,
85
+ node_utils_1.payloadProperty,
86
+ node_utils_1.waitProperty,
87
+ ],
88
+ };
89
+ }
90
+ async execute() {
91
+ return (0, node_utils_1.executeFrankLabModule)(this, 'kley', 'getStatus');
92
+ }
93
+ }
94
+ exports.FrankLabKley = FrankLabKley;
95
+ //# sourceMappingURL=FrankLabKley.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrankLabKley.node.js","sourceRoot":"","sources":["../../../nodes/Kley/FrankLabKley.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "node": "n8n-nodes-base.frankLabKley",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Marketing & Content", "Utility"],
6
+ "resources": {
7
+ "credentialDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#credentials" }],
8
+ "primaryDocumentation": [{ "url": "https://github.com/d906090-rgb/n8n-nodes-franklab#kley" }]
9
+ }
10
+ }
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="FrankLab KLEY">
2
+ <rect width="64" height="64" rx="8" fill="#111827"/>
3
+ <path d="M14 20h34v24H14z" fill="#e5e7eb"/>
4
+ <path d="M48 26l8-5v22l-8-5z" fill="#38bdf8"/>
5
+ <path d="M22 26h18v4H22zm0 8h14v4H22z" fill="#111827"/>
6
+ </svg>
@@ -0,0 +1,5 @@
1
+ import type { IExecuteFunctions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class FrankLabPlastinka implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<import("n8n-workflow").INodeExecutionData[][]>;
5
+ }