n8n-nodes-eranol 0.1.2 → 0.2.3

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 (42) hide show
  1. package/dist/nodes/Eranol/Eranol.node.js +12 -0
  2. package/dist/nodes/Eranol/resources/audio/denoise.js +43 -2
  3. package/dist/nodes/Eranol/resources/audio/highlights.js +43 -2
  4. package/dist/nodes/Eranol/resources/audio/removeSilence.js +43 -2
  5. package/dist/nodes/Eranol/resources/compose/composeVideo.d.ts +2 -0
  6. package/dist/nodes/Eranol/resources/compose/composeVideo.js +129 -0
  7. package/dist/nodes/Eranol/resources/compose/concat.d.ts +2 -0
  8. package/dist/nodes/Eranol/resources/compose/concat.js +89 -0
  9. package/dist/nodes/Eranol/resources/compose/index.js +28 -0
  10. package/dist/nodes/Eranol/resources/compose/merge.js +50 -3
  11. package/dist/nodes/Eranol/resources/convert/audioToMp3.js +35 -0
  12. package/dist/nodes/Eranol/resources/convert/audioToWav.js +35 -0
  13. package/dist/nodes/Eranol/resources/convert/imageToJpg.js +35 -0
  14. package/dist/nodes/Eranol/resources/convert/imageToWebp.js +35 -0
  15. package/dist/nodes/Eranol/resources/convert/videoToMp4.js +35 -0
  16. package/dist/nodes/Eranol/resources/convert/videoToWebm.js +35 -0
  17. package/dist/nodes/Eranol/resources/image/generateImage.d.ts +2 -0
  18. package/dist/nodes/Eranol/resources/image/generateImage.js +129 -0
  19. package/dist/nodes/Eranol/resources/image/imageStatus.d.ts +2 -0
  20. package/dist/nodes/Eranol/resources/image/imageStatus.js +20 -0
  21. package/dist/nodes/Eranol/resources/image/index.d.ts +2 -0
  22. package/dist/nodes/Eranol/resources/image/index.js +47 -0
  23. package/dist/nodes/Eranol/resources/job/index.js +26 -12
  24. package/dist/nodes/Eranol/resources/job/verify.d.ts +2 -0
  25. package/dist/nodes/Eranol/resources/job/verify.js +4 -0
  26. package/dist/nodes/Eranol/resources/notify/index.d.ts +2 -0
  27. package/dist/nodes/Eranol/resources/notify/index.js +33 -0
  28. package/dist/nodes/Eranol/resources/notify/sendEmail.d.ts +2 -0
  29. package/dist/nodes/Eranol/resources/notify/sendEmail.js +106 -0
  30. package/dist/nodes/Eranol/resources/video/addIntro.js +43 -2
  31. package/dist/nodes/Eranol/resources/video/addOutro.js +43 -2
  32. package/dist/nodes/Eranol/resources/video/caption.js +43 -2
  33. package/dist/nodes/Eranol/resources/video/extractAudio.js +43 -2
  34. package/dist/nodes/Eranol/resources/video/extractImages.js +57 -4
  35. package/dist/nodes/Eranol/resources/video/generateGif.js +57 -4
  36. package/dist/nodes/Eranol/resources/video/overlay.js +43 -2
  37. package/dist/nodes/Eranol/resources/video/progressBar.js +43 -2
  38. package/dist/nodes/Eranol/resources/video/reframe.js +57 -4
  39. package/dist/nodes/Eranol/resources/video/thumbnail.js +43 -2
  40. package/dist/nodes/Eranol/resources/video/trim.js +50 -3
  41. package/dist/nodes/Eranol/resources/video/watermark.js +50 -3
  42. package/package.json +1 -1
@@ -7,6 +7,8 @@ const audio_1 = require("./resources/audio");
7
7
  const convert_1 = require("./resources/convert");
8
8
  const compose_1 = require("./resources/compose");
9
9
  const job_1 = require("./resources/job");
10
+ const image_1 = require("./resources/image");
11
+ const notify_1 = require("./resources/notify");
10
12
  class Eranol {
11
13
  constructor() {
12
14
  this.description = {
@@ -54,10 +56,18 @@ class Eranol {
54
56
  name: 'Convert',
55
57
  value: 'convert',
56
58
  },
59
+ {
60
+ name: 'Image',
61
+ value: 'image',
62
+ },
57
63
  {
58
64
  name: 'Job',
59
65
  value: 'job',
60
66
  },
67
+ {
68
+ name: 'Notify',
69
+ value: 'notify',
70
+ },
61
71
  {
62
72
  name: 'Video',
63
73
  value: 'video',
@@ -69,6 +79,8 @@ class Eranol {
69
79
  ...audio_1.audioDescription,
70
80
  ...convert_1.convertDescription,
71
81
  ...compose_1.composeDescription,
82
+ ...image_1.imageDescription,
83
+ ...notify_1.notifyDescription,
72
84
  ...job_1.jobDescription,
73
85
  ],
74
86
  usableAsTool: true,
@@ -8,13 +8,48 @@ const displayOptions = {
8
8
  },
9
9
  };
10
10
  exports.denoiseDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['audio'],
28
+ operation: ['denoise'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
11
40
  {
12
41
  displayName: 'Audio URL',
13
42
  name: 'url',
14
43
  type: 'string',
15
44
  required: true,
16
45
  default: '',
17
- displayOptions,
46
+ displayOptions: {
47
+ show: {
48
+ resource: ['audio'],
49
+ operation: ['denoise'],
50
+ useJsonBody: [false],
51
+ },
52
+ },
18
53
  description: 'URL of the audio file to denoise',
19
54
  routing: {
20
55
  send: {
@@ -29,7 +64,13 @@ exports.denoiseDescription = [
29
64
  type: 'collection',
30
65
  placeholder: 'Add Field',
31
66
  default: {},
32
- displayOptions,
67
+ displayOptions: {
68
+ show: {
69
+ resource: ['audio'],
70
+ operation: ['denoise'],
71
+ useJsonBody: [false],
72
+ },
73
+ },
33
74
  options: [
34
75
  {
35
76
  displayName: 'Method',
@@ -8,13 +8,48 @@ const displayOptions = {
8
8
  },
9
9
  };
10
10
  exports.highlightsDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['audio'],
28
+ operation: ['highlights'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
11
40
  {
12
41
  displayName: 'Audio URL',
13
42
  name: 'url',
14
43
  type: 'string',
15
44
  required: true,
16
45
  default: '',
17
- displayOptions,
46
+ displayOptions: {
47
+ show: {
48
+ resource: ['audio'],
49
+ operation: ['highlights'],
50
+ useJsonBody: [false],
51
+ },
52
+ },
18
53
  description: 'URL of the audio file to extract highlights from',
19
54
  routing: {
20
55
  send: {
@@ -29,7 +64,13 @@ exports.highlightsDescription = [
29
64
  type: 'collection',
30
65
  placeholder: 'Add Field',
31
66
  default: {},
32
- displayOptions,
67
+ displayOptions: {
68
+ show: {
69
+ resource: ['audio'],
70
+ operation: ['highlights'],
71
+ useJsonBody: [false],
72
+ },
73
+ },
33
74
  options: [
34
75
  {
35
76
  displayName: 'Top N',
@@ -8,13 +8,48 @@ const displayOptions = {
8
8
  },
9
9
  };
10
10
  exports.removeSilenceDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['audio'],
28
+ operation: ['removeSilence'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
11
40
  {
12
41
  displayName: 'Audio URL',
13
42
  name: 'url',
14
43
  type: 'string',
15
44
  required: true,
16
45
  default: '',
17
- displayOptions,
46
+ displayOptions: {
47
+ show: {
48
+ resource: ['audio'],
49
+ operation: ['removeSilence'],
50
+ useJsonBody: [false],
51
+ },
52
+ },
18
53
  description: 'URL of the audio file to process',
19
54
  routing: {
20
55
  send: {
@@ -29,7 +64,13 @@ exports.removeSilenceDescription = [
29
64
  type: 'collection',
30
65
  placeholder: 'Add Field',
31
66
  default: {},
32
- displayOptions,
67
+ displayOptions: {
68
+ show: {
69
+ resource: ['audio'],
70
+ operation: ['removeSilence'],
71
+ useJsonBody: [false],
72
+ },
73
+ },
33
74
  options: [
34
75
  {
35
76
  displayName: 'Silence Threshold (dB)',
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const composeVideoDescription: INodeProperties[];
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.composeVideoDescription = void 0;
4
+ const displayOptions = {
5
+ show: {
6
+ resource: ['compose'],
7
+ operation: ['composeVideo'],
8
+ },
9
+ };
10
+ exports.composeVideoDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['compose'],
28
+ operation: ['composeVideo'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
40
+ {
41
+ displayName: 'Main Video URL',
42
+ name: 'mainVideoUrl',
43
+ type: 'string',
44
+ required: true,
45
+ default: '',
46
+ displayOptions: {
47
+ show: {
48
+ resource: ['compose'],
49
+ operation: ['composeVideo'],
50
+ useJsonBody: [false],
51
+ },
52
+ },
53
+ description: 'URL of the main/base video',
54
+ routing: {
55
+ send: {
56
+ type: 'body',
57
+ property: 'main_video_url',
58
+ },
59
+ },
60
+ },
61
+ {
62
+ displayName: 'Overlays',
63
+ name: 'overlays',
64
+ type: 'fixedCollection',
65
+ typeOptions: {
66
+ multipleValues: true,
67
+ },
68
+ required: true,
69
+ default: {},
70
+ displayOptions: {
71
+ show: {
72
+ resource: ['compose'],
73
+ operation: ['composeVideo'],
74
+ useJsonBody: [false],
75
+ },
76
+ },
77
+ description: 'Video or image segments to overlay onto the main video at specific time ranges',
78
+ options: [
79
+ {
80
+ name: 'overlayValues',
81
+ displayName: 'Overlay',
82
+ values: [
83
+ {
84
+ displayName: 'URL',
85
+ name: 'url',
86
+ type: 'string',
87
+ default: '',
88
+ required: true,
89
+ description: 'URL of the video or image to overlay',
90
+ },
91
+ {
92
+ displayName: 'Type',
93
+ name: 'type',
94
+ type: 'options',
95
+ default: 'video',
96
+ options: [
97
+ { name: 'Video', value: 'video' },
98
+ { name: 'Image', value: 'image' },
99
+ ],
100
+ description: 'Type of the overlay media',
101
+ },
102
+ {
103
+ displayName: 'Start Time (Seconds)',
104
+ name: 'start_time',
105
+ type: 'number',
106
+ default: 0,
107
+ required: true,
108
+ description: 'When the overlay starts in the main video (seconds)',
109
+ },
110
+ {
111
+ displayName: 'End Time (Seconds)',
112
+ name: 'end_time',
113
+ type: 'number',
114
+ default: 5,
115
+ required: true,
116
+ description: 'When the overlay ends in the main video (seconds)',
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ routing: {
122
+ send: {
123
+ type: 'body',
124
+ property: 'overlays',
125
+ value: '={{$value.overlayValues}}',
126
+ },
127
+ },
128
+ },
129
+ ];
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const concatDescription: INodeProperties[];
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.concatDescription = void 0;
4
+ const displayOptions = {
5
+ show: {
6
+ resource: ['compose'],
7
+ operation: ['concat'],
8
+ },
9
+ };
10
+ exports.concatDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['compose'],
28
+ operation: ['concat'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
40
+ {
41
+ displayName: 'Clips',
42
+ name: 'clips',
43
+ type: 'fixedCollection',
44
+ typeOptions: {
45
+ multipleValues: true,
46
+ },
47
+ required: true,
48
+ default: {},
49
+ displayOptions: {
50
+ show: {
51
+ resource: ['compose'],
52
+ operation: ['concat'],
53
+ useJsonBody: [false],
54
+ },
55
+ },
56
+ description: 'Video clips to concatenate in order',
57
+ options: [
58
+ {
59
+ name: 'clipValues',
60
+ displayName: 'Clip',
61
+ values: [
62
+ {
63
+ displayName: 'Video URL',
64
+ name: 'url',
65
+ type: 'string',
66
+ default: '',
67
+ required: true,
68
+ description: 'URL of the video clip (mp4, webm, avi, mkv, mov, etc.)',
69
+ },
70
+ {
71
+ displayName: 'Order',
72
+ name: 'order',
73
+ type: 'number',
74
+ default: 1,
75
+ required: true,
76
+ description: 'Position of this clip in the final video (1 = first)',
77
+ },
78
+ ],
79
+ },
80
+ ],
81
+ routing: {
82
+ send: {
83
+ type: 'body',
84
+ property: 'clips',
85
+ value: '={{$value.clipValues}}',
86
+ },
87
+ },
88
+ },
89
+ ];
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.composeDescription = void 0;
4
4
  const merge_1 = require("./merge");
5
+ const concat_1 = require("./concat");
6
+ const composeVideo_1 = require("./composeVideo");
5
7
  exports.composeDescription = [
6
8
  {
7
9
  displayName: 'Operation',
@@ -14,6 +16,30 @@ exports.composeDescription = [
14
16
  },
15
17
  },
16
18
  options: [
19
+ {
20
+ name: 'Concat',
21
+ value: 'concat',
22
+ action: 'Concatenate videos',
23
+ description: 'Merge video clips in order into a single video',
24
+ routing: {
25
+ request: {
26
+ method: 'POST',
27
+ url: '/ffmpeg/video/concat',
28
+ },
29
+ },
30
+ },
31
+ {
32
+ name: 'Compose Video',
33
+ value: 'composeVideo',
34
+ action: 'Compose video with overlays',
35
+ description: 'Overlay video or image segments onto a main video at specific time ranges',
36
+ routing: {
37
+ request: {
38
+ method: 'POST',
39
+ url: '/ffmpeg/video/compose',
40
+ },
41
+ },
42
+ },
17
43
  {
18
44
  name: 'Merge',
19
45
  value: 'merge',
@@ -29,5 +55,7 @@ exports.composeDescription = [
29
55
  ],
30
56
  default: 'merge',
31
57
  },
58
+ ...concat_1.concatDescription,
59
+ ...composeVideo_1.composeVideoDescription,
32
60
  ...merge_1.mergeDescription,
33
61
  ];
@@ -8,6 +8,35 @@ const displayOptions = {
8
8
  },
9
9
  };
10
10
  exports.mergeDescription = [
11
+ {
12
+ displayName: 'Send as JSON',
13
+ name: 'useJsonBody',
14
+ type: 'boolean',
15
+ default: false,
16
+ displayOptions,
17
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
18
+ noDataExpression: true,
19
+ },
20
+ {
21
+ displayName: 'JSON Body',
22
+ name: 'jsonBody',
23
+ type: 'json',
24
+ default: '{}',
25
+ displayOptions: {
26
+ show: {
27
+ resource: ['compose'],
28
+ operation: ['merge'],
29
+ useJsonBody: [true],
30
+ },
31
+ },
32
+ description: 'The JSON body to send with the request',
33
+ routing: {
34
+ send: {
35
+ type: 'body',
36
+ value: '={{JSON.parse($value)}}',
37
+ },
38
+ },
39
+ },
11
40
  {
12
41
  displayName: 'Images',
13
42
  name: 'images',
@@ -17,7 +46,13 @@ exports.mergeDescription = [
17
46
  },
18
47
  required: true,
19
48
  default: {},
20
- displayOptions,
49
+ displayOptions: {
50
+ show: {
51
+ resource: ['compose'],
52
+ operation: ['merge'],
53
+ useJsonBody: [false],
54
+ },
55
+ },
21
56
  description: 'Image slides to combine into video',
22
57
  options: [
23
58
  {
@@ -57,7 +92,13 @@ exports.mergeDescription = [
57
92
  type: 'string',
58
93
  required: true,
59
94
  default: '',
60
- displayOptions,
95
+ displayOptions: {
96
+ show: {
97
+ resource: ['compose'],
98
+ operation: ['merge'],
99
+ useJsonBody: [false],
100
+ },
101
+ },
61
102
  description: 'URL of the audio track',
62
103
  routing: {
63
104
  send: {
@@ -72,7 +113,13 @@ exports.mergeDescription = [
72
113
  type: 'collection',
73
114
  placeholder: 'Add Field',
74
115
  default: {},
75
- displayOptions,
116
+ displayOptions: {
117
+ show: {
118
+ resource: ['compose'],
119
+ operation: ['merge'],
120
+ useJsonBody: [false],
121
+ },
122
+ },
76
123
  options: [
77
124
  {
78
125
  displayName: 'Audio Mode',
@@ -2,6 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.audioToMp3Description = void 0;
4
4
  exports.audioToMp3Description = [
5
+ {
6
+ displayName: 'Send as JSON',
7
+ name: 'useJsonBody',
8
+ type: 'boolean',
9
+ default: false,
10
+ displayOptions: {
11
+ show: {
12
+ resource: ['convert'],
13
+ operation: ['audioToMp3'],
14
+ },
15
+ },
16
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
17
+ noDataExpression: true,
18
+ },
19
+ {
20
+ displayName: 'JSON Body',
21
+ name: 'jsonBody',
22
+ type: 'json',
23
+ default: '{}',
24
+ displayOptions: {
25
+ show: {
26
+ resource: ['convert'],
27
+ operation: ['audioToMp3'],
28
+ useJsonBody: [true],
29
+ },
30
+ },
31
+ description: 'The JSON body to send with the request',
32
+ routing: {
33
+ send: {
34
+ type: 'body',
35
+ value: '={{JSON.parse($value)}}',
36
+ },
37
+ },
38
+ },
5
39
  {
6
40
  displayName: 'File URL',
7
41
  name: 'url',
@@ -12,6 +46,7 @@ exports.audioToMp3Description = [
12
46
  show: {
13
47
  resource: ['convert'],
14
48
  operation: ['audioToMp3'],
49
+ useJsonBody: [false],
15
50
  },
16
51
  },
17
52
  description: 'URL of the audio file to convert to MP3',
@@ -2,6 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.audioToWavDescription = void 0;
4
4
  exports.audioToWavDescription = [
5
+ {
6
+ displayName: 'Send as JSON',
7
+ name: 'useJsonBody',
8
+ type: 'boolean',
9
+ default: false,
10
+ displayOptions: {
11
+ show: {
12
+ resource: ['convert'],
13
+ operation: ['audioToWav'],
14
+ },
15
+ },
16
+ description: 'Whether to send the request body as raw JSON instead of using individual fields',
17
+ noDataExpression: true,
18
+ },
19
+ {
20
+ displayName: 'JSON Body',
21
+ name: 'jsonBody',
22
+ type: 'json',
23
+ default: '{}',
24
+ displayOptions: {
25
+ show: {
26
+ resource: ['convert'],
27
+ operation: ['audioToWav'],
28
+ useJsonBody: [true],
29
+ },
30
+ },
31
+ description: 'The JSON body to send with the request',
32
+ routing: {
33
+ send: {
34
+ type: 'body',
35
+ value: '={{JSON.parse($value)}}',
36
+ },
37
+ },
38
+ },
5
39
  {
6
40
  displayName: 'File URL',
7
41
  name: 'url',
@@ -12,6 +46,7 @@ exports.audioToWavDescription = [
12
46
  show: {
13
47
  resource: ['convert'],
14
48
  operation: ['audioToWav'],
49
+ useJsonBody: [false],
15
50
  },
16
51
  },
17
52
  description: 'URL of the audio file to convert to WAV',