{"_id":"@apergrex/n8n-nodes-franklab","_rev":"8-0594e3c3afe7ecf9c5d6a2b07c0f47ab","name":"@apergrex/n8n-nodes-franklab","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@apergrex/n8n-nodes-franklab","version":"0.1.0","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"name":"FrankLab"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.1.0","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"910e8045f849c912b7a3ef40629dfa1c15ef05b6","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.1.0.tgz","fileCount":52,"integrity":"sha512-oIducUgEMOFaFE4Hq5QzOsjvqivG1j8aSwe41tN0i6OdkevQdABYI/PanMcRSEhLiM+7w8FqvGuB54gLAqFhhQ==","signatures":[{"sig":"MEUCIQD8WNBRgvxT+f04jxPekhgj3wsDq1XgQjJ+Y9Qeh2b3tAIgCcqCXKtpe/Wfw2h1oOmHczlynQznOjx+25E1NTOwhS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":147979},"engines":{"node":">=20.19"},"gitHead":"fb1f0f71ca9f4e48bbdadf8e2f9d5dbac8c9b78b","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"n8n-node build","pretest":"npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"n8n-node prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.13.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@n8n/node-cli":"^0.23.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.1.0_1780579334909_0.6860494145278264","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@apergrex/n8n-nodes-franklab","version":"0.1.1","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.1.1","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"a0996e4e4bf1079f5ab3eb78d66fed21c417d7ad","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.1.1.tgz","fileCount":52,"integrity":"sha512-7VPEozmK3sB7zImPMA6IaNhW6l6dWl1BcQHHLAVE4Sm3eGVyXL9NP1SpBLHXeEBQSGM6Ykw+IQINubNqSJHOSQ==","signatures":[{"sig":"MEYCIQCxv9Q2eQRlZK/OytEmL4IEcpBgTK3cVM9+7SxOz2bbdAIhAJ2e0bCQrdcX50TaccTGZDtosUMbCPLD3LKjnMOgXsL+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148133},"engines":{"node":">=20.19"},"gitHead":"11d9e92d9033e4c05f60f451ad80322cc4ec2958","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"n8n-node build","pretest":"npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"n8n-node prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.13.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@n8n/node-cli":"^0.23.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.1.1_1780595014856_0.26376279810783587","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@apergrex/n8n-nodes-franklab","version":"0.1.2","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.1.2","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"8f45f1402cc46e5ad0171a7a239bc11099cbf9a3","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.1.2.tgz","fileCount":52,"integrity":"sha512-55SsKXJIXmvLiil/QeGgHKDLeNULnGeK74avsEJRr6m52yuiTY5zbACnDrXewMigJ8go8Y4R4eKQxo523yFx+A==","signatures":[{"sig":"MEUCIAyZRQu+5Jn15u5U6pHxJRgiS2IKowgjbs5udS+4xe2XAiEA5ZU7/nnIyKcKVoHJhg7B2ljQItBtBU7dI2HyCMHOdxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":148944},"engines":{"node":">=20.19"},"gitHead":"f9708c8e2d569ad58908139cc281d9aeeb9c9773","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"n8n-node build","pretest":"npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"n8n-node prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.13.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.16.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.32.0","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@n8n/node-cli":"^0.23.1"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.1.2_1780603654639_0.2927162492731774","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@apergrex/n8n-nodes-franklab","version":"0.2.0","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.2.0","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Alibaba/FrankLabAlibaba.node.js","dist/nodes/Aries/FrankLabAries.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js","dist/nodes/Dola/FrankLabDola.node.js","dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/HotCoffe/FrankLabHotCoffe.node.js","dist/nodes/Jupiter/FrankLabJupiter.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Kusok/FrankLabKusok.node.js","dist/nodes/Mars/FrankLabMars.node.js","dist/nodes/Mercury/FrankLabMercury.node.js","dist/nodes/Minimax/FrankLabMinimax.node.js","dist/nodes/Moon/FrankLabMoon.node.js","dist/nodes/Neptune/FrankLabNeptune.node.js","dist/nodes/Omni/FrankLabOmni.node.js","dist/nodes/Orkestr/FrankLabOrkestr.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Pluto/FrankLabPluto.node.js","dist/nodes/Saturn/FrankLabSaturn.node.js","dist/nodes/Sufler/FrankLabSufler.node.js","dist/nodes/TextSticker/FrankLabTextSticker.node.js","dist/nodes/Titan/FrankLabTitan.node.js","dist/nodes/Venus/FrankLabVenus.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/X/FrankLabX.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"44277f753170265af96e1260b9680542741d8a90","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.2.0.tgz","fileCount":154,"integrity":"sha512-NqYL6dp3DmaHEyfaCyyK6KaZrbmQVFLp3IYS3zrYixJgGtXulpzE2AiibL9p2Xhcbs3xVZJQ4YJZt5z08MXr5A==","signatures":[{"sig":"MEUCICTKZ9VbQzH1XquPaL3JrZCRVXzAF0Wp0c2YoIU3L6L1AiEAlXcLjvHXyOsr0IcUwFvyPRWV0fUHzFOUTqf8Or4HHUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":416939},"engines":{"node":">=20.19"},"gitHead":"23bd7f886d93ffddecad8ee778731b5200099161","scripts":{"dev":"node tooling/run-node-cli.mjs dev","lint":"node tooling/run-node-cli.mjs lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"node tooling/run-node-cli.mjs build","pretest":"npm run build","release":"node tooling/run-node-cli.mjs release","lint:fix":"node tooling/run-node-cli.mjs lint --fix","tooling:ci":"npm --prefix tooling ci --ignore-scripts && node tooling/link-node-cli.mjs","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"node tooling/run-node-cli.mjs prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.19.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"isolated-vm":true},"dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.5","prettier":"3.9.6","release-it":"^19.0.4","typescript":"5.9.3","@types/node":"18.19.130"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.2.0_1788549717599_0.37031796995910504","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@apergrex/n8n-nodes-franklab","version":"0.2.1","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.2.1","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Alibaba/FrankLabAlibaba.node.js","dist/nodes/Aries/FrankLabAries.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js","dist/nodes/Dola/FrankLabDola.node.js","dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/HotCoffe/FrankLabHotCoffe.node.js","dist/nodes/Jupiter/FrankLabJupiter.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Kusok/FrankLabKusok.node.js","dist/nodes/Mars/FrankLabMars.node.js","dist/nodes/Mercury/FrankLabMercury.node.js","dist/nodes/Minimax/FrankLabMinimax.node.js","dist/nodes/Moon/FrankLabMoon.node.js","dist/nodes/Neptune/FrankLabNeptune.node.js","dist/nodes/Omni/FrankLabOmni.node.js","dist/nodes/Orkestr/FrankLabOrkestr.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Pluto/FrankLabPluto.node.js","dist/nodes/Saturn/FrankLabSaturn.node.js","dist/nodes/Sufler/FrankLabSufler.node.js","dist/nodes/TextSticker/FrankLabTextSticker.node.js","dist/nodes/Titan/FrankLabTitan.node.js","dist/nodes/Venus/FrankLabVenus.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/X/FrankLabX.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"370cfc4d5f74393b7c99826308daa79c90b7e862","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.2.1.tgz","fileCount":154,"integrity":"sha512-ABog/hHnW73ke+5qHQTdIfaAwokxLvFTlBahbQxZi5U3Q7cWFWUUXJEBRq6FN0Kxa+WDZ09GNEunByDpC2kK/A==","signatures":[{"sig":"MEQCIBXtE3as2ep8DakXxWQ1mHVuxzNNc23ijobF0oGW1m5tAiACGnCGO/P0FIG3yFKnIKZK0o33xIQouRaIcQh3JzYWBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":417590},"engines":{"node":">=20.19"},"gitHead":"68c9c7c4c22a722071804f705a86f2e356681f7c","scripts":{"dev":"node tooling/run-node-cli.mjs dev","lint":"node tooling/run-node-cli.mjs lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"node tooling/run-node-cli.mjs build","pretest":"npm run build","release":"node tooling/run-node-cli.mjs release","lint:fix":"node tooling/run-node-cli.mjs lint --fix","tooling:ci":"npm --prefix tooling ci --ignore-scripts && node tooling/link-node-cli.mjs","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"node tooling/run-node-cli.mjs prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.19.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"isolated-vm":true},"dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.5","prettier":"3.9.6","release-it":"^19.0.4","typescript":"5.9.3","@types/node":"18.19.130"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.2.1_1788590989855_0.20799812261162498","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@apergrex/n8n-nodes-franklab","version":"0.2.2","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.2.2","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Alibaba/FrankLabAlibaba.node.js","dist/nodes/Aries/FrankLabAries.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js","dist/nodes/Dola/FrankLabDola.node.js","dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/HotCoffe/FrankLabHotCoffe.node.js","dist/nodes/Jupiter/FrankLabJupiter.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Kusok/FrankLabKusok.node.js","dist/nodes/Mars/FrankLabMars.node.js","dist/nodes/Mercury/FrankLabMercury.node.js","dist/nodes/Minimax/FrankLabMinimax.node.js","dist/nodes/Moon/FrankLabMoon.node.js","dist/nodes/Neptune/FrankLabNeptune.node.js","dist/nodes/Omni/FrankLabOmni.node.js","dist/nodes/Orkestr/FrankLabOrkestr.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Pluto/FrankLabPluto.node.js","dist/nodes/Saturn/FrankLabSaturn.node.js","dist/nodes/Sufler/FrankLabSufler.node.js","dist/nodes/TextSticker/FrankLabTextSticker.node.js","dist/nodes/Titan/FrankLabTitan.node.js","dist/nodes/Venus/FrankLabVenus.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/X/FrankLabX.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"04bcbf01bc97201ca35bd021d3a5814b4b18404c","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.2.2.tgz","fileCount":179,"integrity":"sha512-+yphucVuKPcaIo1R0PlXDs1LqgwmrpaiGb1P/5MukkCfGswxsNvowbF2K1SfSYikmZwt2pnGi1NHnnOFc7kvOg==","signatures":[{"sig":"MEQCIBlhnkMlCxIiShUzlevz/TEo7WdGdqMAzv1+Wt26NPcYAiBZUs2jka72cCw9OHAQ0uDhygpo/79V7jzswVQ367tf1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":428630},"engines":{"node":">=20.19"},"gitHead":"9febd875e22a9380ad537603c6b5d72b6ac954af","scripts":{"dev":"node tooling/run-node-cli.mjs dev","lint":"node tooling/run-node-cli.mjs lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"node tooling/run-node-cli.mjs build","pretest":"npm run build","release":"node tooling/run-node-cli.mjs release","lint:fix":"node tooling/run-node-cli.mjs lint --fix","tooling:ci":"npm --prefix tooling ci --ignore-scripts && node tooling/link-node-cli.mjs","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"node tooling/run-node-cli.mjs prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.19.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"isolated-vm":true},"dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.5","prettier":"3.9.6","release-it":"^19.0.4","typescript":"5.9.3","@types/node":"18.19.130"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.2.2_1788600730479_0.34050071831331596","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@apergrex/n8n-nodes-franklab","version":"0.2.3","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"url":"https://franklab.ru","name":"FrankLab","email":"fedorchuk.a@apergrex.com"},"license":"MIT","_id":"@apergrex/n8n-nodes-franklab@0.2.3","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"n8n":{"nodes":["dist/nodes/Alibaba/FrankLabAlibaba.node.js","dist/nodes/Aries/FrankLabAries.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js","dist/nodes/Dola/FrankLabDola.node.js","dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/HotCoffe/FrankLabHotCoffe.node.js","dist/nodes/Jupiter/FrankLabJupiter.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Kusok/FrankLabKusok.node.js","dist/nodes/Mars/FrankLabMars.node.js","dist/nodes/Mercury/FrankLabMercury.node.js","dist/nodes/Minimax/FrankLabMinimax.node.js","dist/nodes/Moon/FrankLabMoon.node.js","dist/nodes/Neptune/FrankLabNeptune.node.js","dist/nodes/Omni/FrankLabOmni.node.js","dist/nodes/Orkestr/FrankLabOrkestr.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Pluto/FrankLabPluto.node.js","dist/nodes/Saturn/FrankLabSaturn.node.js","dist/nodes/Sufler/FrankLabSufler.node.js","dist/nodes/TextSticker/FrankLabTextSticker.node.js","dist/nodes/Titan/FrankLabTitan.node.js","dist/nodes/Venus/FrankLabVenus.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/X/FrankLabX.node.js"],"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"0e037e8b57f4dfd12685e063348a2efb7fe8c5de","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.2.3.tgz","fileCount":179,"integrity":"sha512-5oVKWrZzqSyrW+1PPfY4c39B2KC7sXBAopPSKw1zF8y+a/FNw5Zn9I1Gt5ODuONRwPgNQPiYrSdbFHxFhivhBg==","signatures":[{"sig":"MEYCIQCdPl1UtOQEl7Xi/4j76HFEa2i8RMOvjt0vqH/7MpwYDgIhAIQdD77c5vOKU3I1nzf54+prjXWvL5zxY9kaX6XfnWrh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":430793},"engines":{"node":">=20.19"},"gitHead":"f54f9b21f94d6bb073313db7e8b7d4193d94b85a","scripts":{"dev":"node tooling/run-node-cli.mjs dev","lint":"node tooling/run-node-cli.mjs lint","scan":"npm run lint && npm run pack:dry-run","test":"node --test test/*.test.mjs","build":"node tooling/run-node-cli.mjs build","pretest":"npm run build","release":"node tooling/run-node-cli.mjs release","lint:fix":"node tooling/run-node-cli.mjs lint --fix","tooling:ci":"npm --prefix tooling ci --ignore-scripts && node tooling/link-node-cli.mjs","build:watch":"tsc --watch","pack:dry-run":"npm pack --dry-run","prepublishOnly":"node tooling/run-node-cli.mjs prerelease","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab"},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"repository":{"url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git","type":"git"},"_npmVersion":"11.19.0","description":"Official FrankLab community nodes for n8n.","directories":{},"_nodeVersion":"24.20.0","allowScripts":{"isolated-vm":true},"dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"9.39.5","prettier":"3.9.6","release-it":"^19.0.4","typescript":"5.9.3","@types/node":"18.19.130"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-franklab_0.2.3_1788700928904_0.30025246631933133","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@apergrex/n8n-nodes-franklab","version":"0.2.4","description":"Official FrankLab community nodes for n8n.","license":"MIT","homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","keywords":["n8n-community-node-package","n8n","franklab","automation"],"author":{"name":"FrankLab","email":"fedorchuk.a@apergrex.com","url":"https://franklab.ru"},"repository":{"type":"git","url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git"},"publishConfig":{"access":"public"},"engines":{"node":">=20.19"},"scripts":{"tooling:ci":"npm --prefix tooling ci --ignore-scripts && node tooling/link-node-cli.mjs","build":"node tooling/run-node-cli.mjs build","build:watch":"tsc --watch","dev":"node tooling/run-node-cli.mjs dev","lint":"node tooling/run-node-cli.mjs lint","lint:fix":"node tooling/run-node-cli.mjs lint --fix","pack:dry-run":"npm pack --dry-run","release":"node tooling/run-node-cli.mjs release","scan":"npm run lint && npm run pack:dry-run","scan:published":"npx @n8n/scan-community-package @apergrex/n8n-nodes-franklab","pretest":"npm run build","test":"node --test test/*.test.mjs","prepublishOnly":"node tooling/run-node-cli.mjs prerelease"},"allowScripts":{"isolated-vm":true},"n8n":{"n8nNodesApiVersion":1,"strict":true,"credentials":["dist/credentials/FrankLabApi.credentials.js"],"nodes":["dist/nodes/Alibaba/FrankLabAlibaba.node.js","dist/nodes/Aries/FrankLabAries.node.js","dist/nodes/C2pa/FrankLabC2pa.node.js","dist/nodes/Dola/FrankLabDola.node.js","dist/nodes/Holst/FrankLabHolst.node.js","dist/nodes/HotCoffe/FrankLabHotCoffe.node.js","dist/nodes/Jupiter/FrankLabJupiter.node.js","dist/nodes/Kley/FrankLabKley.node.js","dist/nodes/Kusok/FrankLabKusok.node.js","dist/nodes/Mars/FrankLabMars.node.js","dist/nodes/Mercury/FrankLabMercury.node.js","dist/nodes/Minimax/FrankLabMinimax.node.js","dist/nodes/Moon/FrankLabMoon.node.js","dist/nodes/Neptune/FrankLabNeptune.node.js","dist/nodes/Omni/FrankLabOmni.node.js","dist/nodes/Orkestr/FrankLabOrkestr.node.js","dist/nodes/Plastinka/FrankLabPlastinka.node.js","dist/nodes/Pluto/FrankLabPluto.node.js","dist/nodes/Saturn/FrankLabSaturn.node.js","dist/nodes/Sufler/FrankLabSufler.node.js","dist/nodes/TextSticker/FrankLabTextSticker.node.js","dist/nodes/Titan/FrankLabTitan.node.js","dist/nodes/Venus/FrankLabVenus.node.js","dist/nodes/Volna/FrankLabVolna.node.js","dist/nodes/X/FrankLabX.node.js"]},"dependencies":{},"devDependencies":{"@types/node":"18.19.130","eslint":"9.39.5","prettier":"3.9.6","release-it":"^19.0.4","typescript":"5.9.3"},"peerDependencies":{"n8n-workflow":"*"},"gitHead":"e35aa7241046d7ddb82b973097a87e9ce49aabfa","_id":"@apergrex/n8n-nodes-franklab@0.2.4","bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-GeDAtYzMRB8YGyh6+JeY+vuBdQK7yT56m80RRlRoT6VBYw7xev96/1L1qFippGNrGAd2w9FLq0B6a5YFkF6uPQ==","shasum":"66fde676de88c30933e8f57dc0ddb38631033a72","tarball":"https://registry.npmjs.org/@apergrex/n8n-nodes-franklab/-/n8n-nodes-franklab-0.2.4.tgz","fileCount":179,"unpackedSize":452293,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@apergrex%2fn8n-nodes-franklab@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCzGeKvO1cshop7NhPwXMs+cEOzDCdFDeqwjZzsdaKU9wIgcm462Cr2joVT7ojnIaXfWA+O3A2MHRrwmtiZiSzp3fU="}]},"_npmUser":{"name":"franklab","email":"d906090@gmail.com"},"directories":{},"maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-franklab_0.2.4_1788788246958_0.5449621832707967"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T13:22:14.793Z","modified":"2026-09-07T13:37:27.424Z","0.1.0":"2026-06-04T13:22:15.036Z","0.1.1":"2026-06-04T17:43:34.978Z","0.1.2":"2026-06-04T20:07:34.844Z","0.2.0":"2026-09-04T19:21:57.748Z","0.2.1":"2026-09-05T06:49:50.007Z","0.2.2":"2026-09-05T09:32:10.628Z","0.2.3":"2026-09-06T13:22:09.046Z","0.2.4":"2026-09-07T13:37:27.075Z"},"bugs":{"url":"https://github.com/d906090-rgb/n8n-nodes-franklab/issues"},"author":{"name":"FrankLab","email":"fedorchuk.a@apergrex.com","url":"https://franklab.ru"},"license":"MIT","homepage":"https://github.com/d906090-rgb/n8n-nodes-franklab#readme","keywords":["n8n-community-node-package","n8n","franklab","automation"],"repository":{"type":"git","url":"git+https://github.com/d906090-rgb/n8n-nodes-franklab.git"},"description":"Official FrankLab community nodes for n8n.","maintainers":[{"name":"franklab","email":"d906090@gmail.com"}],"readme":"# @apergrex/n8n-nodes-franklab\n\nOfficial FrankLab community nodes for n8n.\n\nFrankLab 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`.\n\n## What This Package Contains\n\nThis repository is the public n8n connector package only. It contains:\n\n- n8n node definitions for HOLST, KLEY, PLASTINKA, VOLNA, C2PA, SUFLER, TextSticker, ORKESTR, JUPITER, MARS, SATURN, MOON, VENUS, X, MiniMax, DOLA, Alibaba, OMNI, KUSOK, MERCURY, NEPTUNE, PLUTO, ARIES, TITAN, and Hot Coffe (25 nodes). Kling runs exclusively through the SATURN node (Kling 3.0 Omni) and the MARS node (Kling 3.0).\n- FrankLab API credential definition.\n- A small request client that calls the public FrankLab API with your API key.\n- Tests, examples, and GitHub Actions workflows for n8n community-node verification and npm provenance publishing.\n\nIt 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.\n\n## API Key And Price List\n\nYou need a FrankLab API key before these nodes can run jobs.\n\nTo request an API key, current pricing, and onboarding details, contact:\n\n- Email: `fedorchuk.a@apergrex.com`\n- Telegram: `@ReanimatorXP`\n\nPlease 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.\n\n## Billing\n\nThe n8n package does not calculate prices, hold balances, or bill customers locally. Billing and access control happen on the FrankLab API side:\n\n1. n8n sends your API key with each request.\n2. FrankLab identifies the account, partner, or workspace behind that key.\n3. FrankLab validates access and available limits or balance.\n4. FrankLab creates the job and applies the server-side billing rules.\n5. Where supported, responses include cost fields such as `final_cost_franks`, `cost_currency`, `cost_status`, and `cost_unit`.\n\nFor production use, request your API key and current price list before building workflows that generate paid media jobs.\n\n## Installation\n\nInstall the package through n8n community nodes:\n\n```text\n@apergrex/n8n-nodes-franklab\n```\n\nFollow 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.\n\n## Credentials\n\nCreate a FrankLab credential in n8n after installation.\n\nThe credential has two fields:\n\n- `API Key`: your FrankLab API key.\n- `Base URL`: fixed to `https://franklab.ru/franklab/api` or `https://franklab.ru`.\n\nThe public package does not support custom hosts, local hosts, DNS overrides, or test-host switches.\n\n## Cookbook\n\nUse the FrankLab Cookbook for workflow examples and field-level guidance:\n\nhttps://franklab.ru/franklab/cookbook\n\nThe cookbook includes Make.com and n8n editions. Use the platform switch in the cookbook to move between versions.\n\n## Operations\n\n### HOLST\n\n- Submit an image processing job.\n- Poll an image job status.\n- Supported image operations include resize, crop, format conversion, watermark, image overlay, text, filters, rotate, flip, blur, sharpen, mask, metadata read/write, collage, adjust, GPS metadata removal, and the BRIA operations (remove/replace background, erase foreground, erase by text, product lifestyle by text, product cutout).\n\n### KLEY\n\n- Montage operations.\n- Video speed changes.\n- Subtitle rendering.\n- Video overlays.\n- Job status polling.\n\n### PLASTINKA\n\n- Audio processing.\n- Save a reusable audio sample from a public HTTPS URL.\n- List audio samples.\n- Apply a saved sample to a video.\n- Job status polling.\n\n### VOLNA\n\n- Text to speech.\n- Text to dialogue, turbo TTS, and Google 3.1 TTS.\n- Speech to text.\n- Sound effects.\n- Audio isolation.\n- Voice clone.\n- Voice design.\n- Save a designed voice.\n- Dubbing.\n- Voice, model, usage, and task lookups.\n\n### C2PA\n\n- List signer profiles.\n- Generate a self-signed signer profile.\n- Revoke a signer profile.\n- Load profile options for other FrankLab nodes.\n- Verify Content Credentials on any asset by public HTTPS URL. The verdict is `Valid`,\n  `Trusted`, `Invalid`, `Unknown` or `NoManifest`; the check is synchronous and free, and\n  the asset is read and discarded rather than stored.\n\nPublic verified v1 intentionally excludes private key import and private key rotation flows.\n\n### SUFLER\n\n- Burn styled subtitles into a video with the v1 or v2 caption engine.\n- Optional template, language, transcription engine, highlight mode, platform, and safe zone preset.\n- Job status polling. Advanced styling fields (glossary, emphasis, render modes, translation) go through `Additional JSON`.\n\n### TextSticker\n\n- Overlay text, stickers, emojis, and images on a video.\n- Job status polling.\n- Studio option lists: fonts, stickers, emojis, subtitle templates, video effects, transitions, transition sounds, safe zone options, aspect ratios, resize presets.\n\n### ORKESTR\n\n- V1 (Suno envelope): music, lyrics, style, persona, processing, visuals, and task status polling by poll kind.\n- V2: generate, extend, upload cover, upload extend, add instrumental, add vocals, replace section, mashup, lyrics, timestamped lyrics, separate vocals, generate MIDI, convert WAV, music video, cover image, boost style, generate persona, Lyria music (Google Lyria), and task status.\n- V1 submits do not auto-poll; use `Get Task Status` with the matching poll kind. V2 submits support `Wait for Completion`.\n\n### JUPITER\n\n- Generate images with omni-image (generate/edit modes, quality, output format, aspect ratio, series) or seedream.\n- Recraft tasks (create + status) for background removal and similar image operations.\n- Task status polling per endpoint.\n\n### MARS\n\n- Text to video and image to video (image passed as a public URL in the `image` field).\n- Video effects (`effect_scene`, `effect`, `image`, optional `image_tail`) and motion control (reference frame + video + duration).\n- Per-endpoint task status polling.\n\n### SATURN\n\n- SATURN (Kling 3.0 Omni) video generation and SATURN Turbo text/image to video. Kling traffic runs only here and in MARS (Kling 3.0).\n- Per-endpoint task status polling. The Google-backed omni video routes live in the OMNI node.\n\n### MOON\n\n- Submit cinematic video tasks (text/image/reference to video, video edit/extend) with model, duration, ratio, and resolution presets.\n- Estimate the cost of a task before submitting.\n- Task status polling.\n\n### VENUS\n\n- Generate talking-avatar videos from a portrait image plus an audio URL or audio id.\n- Task status polling.\n\n### X\n\n- Generate videos with xAI Imagine (Grok text/reference/edit/extend/single-image modes).\n- Generate images with xAI Imagine.\n- Per-endpoint task status polling.\n\n### MiniMax\n\n- Submit MiniMax H3 video tasks with idempotency keys, scenario, resolution, duration, ratio, and stored-file first frames.\n- Mint idempotency keys, list video tasks (with `page_num`/`page_size` pagination), and cancel or delete tasks by task ID.\n- Task status polling (long-poll `wait_seconds` is not used; standard polling applies).\n\n### DOLA\n\n- Generate text (and structured JSON with `json_object`/`json_schema` response formats) with MOON GPT models.\n- Async mode returns a billing task id you can poll with `Get Task`.\n- Import files from public URLs, list files, get a file, delete a file, and list models.\n- Streaming generation and direct multipart file upload are not part of the public package.\n\n### OMNI\n\n- Google-backed video generation (distinct provider from Kling-backed SATURN): Gemini Omni Flash and Omni Flash 1.1, Veo 3 and Veo 3 Fast.\n- Text/image/reference to video plus edit and extend operations with model, duration, resolution, and aspect ratio presets.\n- The v1 omni-video route and the Google subscription rails (`videos/google-sub`, `images/google-sub`) with per-rail status polling.\n- Provider info lookup and task status polling.\n\n### KUSOK\n\n- Element library: create (sync and async), list, get, delete.\n- Portrait/image recognition (sync and async) with async task polling.\n- Voice library: create, list, get, delete, and preset voices.\n- Requires a Kusok-capable partner API key; legacy keys are rejected server-side.\n\n### MERCURY\n\n- Lip-sync a video to speech audio (compat and advanced modes).\n- Face identification on images.\n- Per-endpoint task status polling.\n\n### NEPTUNE\n\n- Generate speech from text with optional voice and model.\n- Voice list lookup and task status polling.\n\n### PLUTO\n\n- Generate audio from a text prompt or produce audio for an existing video.\n- Per-endpoint task status polling.\n\n### ARIES\n\n- Kolors virtual try-on task status polling. New try-on submissions are retired server-side (the route answers 410 Gone); use Get Status for tasks submitted earlier.\n\n### TITAN\n\n- Staged multi-element video composition: initialize, add, delete, clear, and preview element selections, then create the video.\n- Task list and task status polling.\n\n### Hot Coffe\n\n- Generate images and Seedance videos (ByteDance ModelArk) with operation, model variant, resolution, duration, and ratio presets.\n- Per-surface task status polling.\n\n### Alibaba\n\n- Generate images with Alibaba Z-Image (synchronous), plus a Qwen operation toggle for\n  text-to-image and image edit (1-3 FrankLab stored-file IDs).\n- Submit HappyHorse videos (text/image to video) and estimate task cost before submitting.\n- Pick the video model: the default HappyHorse 1.1 body, WAN 3.0 Video, or an explicit\n  HappyHorse 1.1 text-to-video / image-to-video. WAN 3.0 additionally exposes audio,\n  prompt-extension and watermark toggles, a last-frame asset on image-to-video, and a\n  1-10 reference-image list on reference-to-video (HappyHorse rejects that operation).\n- Image-to-video takes a full first-frame asset descriptor (stored file ID, URL, MIME\n  type, width, height, size in bytes) on both models. The frame must already be uploaded\n  to FrankLab; an external URL is rejected.\n- Task status polling.\n- Availability depends on the FrankLab server-side Alibaba rollout flag; requests fail closed until it is enabled for your key.\n\n## Usage Notes\n\nAll 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.\n\nMost 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.\n\nFor advanced request fields, use `Additional JSON`. Keep media URLs public and never paste secrets, private keys, PEM files, or provider credentials into workflow fields.\n\nMultipart upload endpoints (MiniMax media upload, DOLA direct file upload) are intentionally not exposed: pass media by public URL, data URL, or partner-scoped stored file id instead, matching the URL-only media policy of the package.\n\n## Development\n\nThe public repository is self-contained but deliberately separates publishable package dependencies from its private build toolchain. From a clean clone, install both deterministic contours before running package commands:\n\n```bash\nnpm ci --ignore-scripts\nnpm run tooling:ci\nnpm run build\nnpm test\nnpm run scan\n```\n\n`tooling` is marked `private:true`; it exists only for build, lint, test, and release commands. The publishable package remains override-free with no runtime dependencies, and the private tooling directory is excluded from the npm tarball.\n\n## Compatibility\n\nThe package is built with the official `n8n-node` tool. The private development contour currently pins `@n8n/node-cli@0.46.2` for reproducible community verification.\n\nDevelopment 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.\n\nThe verified package has no runtime dependencies. Development dependencies are used only for build, lint, release, and local tests.\n\n## Verification\n\n- `npm run tooling:ci`: clean-install the private development toolchain and link its canonical eslint export into the public development tree.\n- `npm run build`: compile and copy n8n node assets.\n- `npm test`: run package metadata, registry, client, and leakage tests.\n- `npm run scan`: run local n8n lint plus `npm pack --dry-run`.\n- `npm run scan:published`: run the official n8n published-package scanner after the package is published to npm with provenance.\n\n## Public Release Repository\n\nThis 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.\n\nRecommended release flow:\n\n1. Merge package changes in the private FrankLab monorepo.\n2. Export or sync only `integrations/n8n-nodes-franklab` into the public `d906090-rgb/n8n-nodes-franklab` repository.\n3. Review the public repository file list before pushing, including the tracked private tooling manifest and lockfile but no `node_modules`.\n4. From a clean public checkout, run `npm ci --ignore-scripts`, `npm run tooling:ci`, build, test, scan, and inspect the dry-run tarball for zero tooling paths.\n5. Push the release tag to the public repository.\n6. Let the public GitHub Actions publish workflow run `npm run release` with npm provenance.\n7. Verify the published package with `npm run scan:published`.\n\n## Resources\n\n- [FrankLab Cookbook](https://franklab.ru/franklab/cookbook)\n- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)\n- [Submit n8n community nodes](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/)\n- [n8n community node verification guidelines](https://docs.n8n.io/integrations/creating-nodes/build/reference/verification-guidelines/)\n- [Public package repository](https://github.com/d906090-rgb/n8n-nodes-franklab)\n\n## Version History\n\n- `0.2.4`: ALIBABA video model selection (HappyHorse 1.1 / WAN 3.0 Video) with the WAN 3.0 audio, prompt-extension, watermark, last-frame and reference-image fields, a first-frame asset descriptor for image-to-video, and a Qwen text-to-image / image-edit toggle; C2PA gains a `Verify Asset` operation that returns a Content Credentials verdict for a public HTTPS URL.\n- `0.2.3`: KLEY and PLASTINKA capability operations on the pinned FFmpeg 8.1.2 build — stabilize, scene list, QC report, split screen, slow motion, denoise, HDR→SDR, animated loop, mezzanine master; analyze, spectrogram, waveform image, fingerprint, enhance dialogue, stereo tools, plus ALAC/Opus convert targets.\n- `0.2.0`: Full Make-parity wave — 20 new nodes (SUFLER, TextSticker, ORKESTR, JUPITER, MARS, SATURN, MOON, VENUS, X, MiniMax, DOLA, Alibaba, OMNI, KUSOK, MERCURY, NEPTUNE, PLUTO, ARIES, TITAN, Hot Coffe), Recraft/BRIA operations, Kling element/voice library in KUSOK, DELETE support, `billing_task_id` polling, and a standalone `scripts.test` rewrite in the public-mirror export.\n- `0.1.2`: Public-repo lint fix for hidden optional node parameters.\n- `0.1.1`: npm author email metadata.\n- `0.1.0`: First-wave package scaffold for HOLST, KLEY, PLASTINKA, VOLNA, and C2PA.\n","readmeFilename":"README.md"}