n8n-nodes-smartprofiling 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 (37) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +283 -0
  3. package/dist/credentials/SmartProfilingApi.credentials.d.ts +10 -0
  4. package/dist/credentials/SmartProfilingApi.credentials.js +48 -0
  5. package/dist/credentials/SmartProfilingApi.credentials.js.map +1 -0
  6. package/dist/credentials/smartprofiling.svg +10 -0
  7. package/dist/icons/smartprofiling.dark.svg +10 -0
  8. package/dist/icons/smartprofiling.svg +10 -0
  9. package/dist/nodes/SmartProfiling/SmartProfiling.node.d.ts +4 -0
  10. package/dist/nodes/SmartProfiling/SmartProfiling.node.js +90 -0
  11. package/dist/nodes/SmartProfiling/SmartProfiling.node.js.map +1 -0
  12. package/dist/nodes/SmartProfiling/resources/channel/index.d.ts +2 -0
  13. package/dist/nodes/SmartProfiling/resources/channel/index.js +96 -0
  14. package/dist/nodes/SmartProfiling/resources/channel/index.js.map +1 -0
  15. package/dist/nodes/SmartProfiling/resources/chapters/index.d.ts +2 -0
  16. package/dist/nodes/SmartProfiling/resources/chapters/index.js +97 -0
  17. package/dist/nodes/SmartProfiling/resources/chapters/index.js.map +1 -0
  18. package/dist/nodes/SmartProfiling/resources/chat/index.d.ts +2 -0
  19. package/dist/nodes/SmartProfiling/resources/chat/index.js +88 -0
  20. package/dist/nodes/SmartProfiling/resources/chat/index.js.map +1 -0
  21. package/dist/nodes/SmartProfiling/resources/playlist/index.d.ts +2 -0
  22. package/dist/nodes/SmartProfiling/resources/playlist/index.js +58 -0
  23. package/dist/nodes/SmartProfiling/resources/playlist/index.js.map +1 -0
  24. package/dist/nodes/SmartProfiling/resources/summarize/index.d.ts +2 -0
  25. package/dist/nodes/SmartProfiling/resources/summarize/index.js +135 -0
  26. package/dist/nodes/SmartProfiling/resources/summarize/index.js.map +1 -0
  27. package/dist/nodes/SmartProfiling/resources/transcript/index.d.ts +2 -0
  28. package/dist/nodes/SmartProfiling/resources/transcript/index.js +130 -0
  29. package/dist/nodes/SmartProfiling/resources/transcript/index.js.map +1 -0
  30. package/dist/nodes/SmartProfiling/shared/descriptions.d.ts +9 -0
  31. package/dist/nodes/SmartProfiling/shared/descriptions.js +99 -0
  32. package/dist/nodes/SmartProfiling/shared/descriptions.js.map +1 -0
  33. package/dist/nodes/SmartProfiling/smartprofiling.dark.svg +10 -0
  34. package/dist/nodes/SmartProfiling/smartprofiling.svg +10 -0
  35. package/dist/package.json +57 -0
  36. package/dist/tsconfig.tsbuildinfo +1 -0
  37. package/package.json +57 -0
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Smart Profiling
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,283 @@
1
+ # n8n-nodes-smartprofiling
2
+
3
+ > **Extract YouTube transcripts, generate AI summaries, and chat with videos** - all directly in your n8n workflows.
4
+
5
+ [![npm version](https://badge.fury.io/js/n8n-nodes-smartprofiling.svg)](https://www.npmjs.com/package/n8n-nodes-smartprofiling)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ---
9
+
10
+ ## Quick Start (2 minutes)
11
+
12
+ ### Step 1: Install the Node
13
+
14
+ 1. Open your n8n instance
15
+ 2. Go to **Settings** (gear icon) → **Community Nodes**
16
+ 3. Click **Install a community node**
17
+ 4. Paste: `n8n-nodes-smartprofiling`
18
+ 5. Click **Install**
19
+
20
+ ### Step 2: Get Your API Key
21
+
22
+ 1. Go to [yttapi.com/signup](https://yttapi.com/signup)
23
+ 2. Create a free account
24
+ 3. Go to **Dashboard** → **API Keys**
25
+ 4. Click **Create API Key**
26
+ 5. Copy your key (starts with `ytt_`)
27
+
28
+ ### Step 3: Add Credentials in n8n
29
+
30
+ 1. In n8n, go to **Credentials** → **Add Credential**
31
+ 2. Search for **Smart Profiling API**
32
+ 3. Paste your API key
33
+ 4. Click **Save**
34
+
35
+ **Done!** You're ready to use the node.
36
+
37
+ ---
38
+
39
+ ## What Can You Do?
40
+
41
+ | Feature | Description | Use Case |
42
+ |---------|-------------|----------|
43
+ | **Transcripts** | Extract captions from any YouTube video | Content repurposing, SEO |
44
+ | **Summarize** | AI-powered video summaries | Newsletter digests, research |
45
+ | **Chat** | Ask questions about video content | Customer support, Q&A bots |
46
+ | **Chapters** | Auto-generate timestamps | YouTube descriptions |
47
+ | **Channel** | Get all videos from a channel | Bulk processing, monitoring |
48
+ | **Playlist** | Get videos from a playlist | Course processing, archives |
49
+
50
+ ---
51
+
52
+ ## Step-by-Step Examples
53
+
54
+ ### Example 1: Extract a Transcript
55
+
56
+ **Goal:** Get the transcript of a YouTube video
57
+
58
+ 1. Add a **Smart Profiling** node to your workflow
59
+ 2. Set **Resource** → `Transcript`
60
+ 3. Set **Operation** → `Get Single`
61
+ 4. Enter the **Video ID**: `dQw4w9WgXcQ` (or paste full URL)
62
+ 5. Choose **Format**: `text` or `json`
63
+ 6. Execute!
64
+
65
+ **Output:**
66
+ ```json
67
+ {
68
+ "transcript": "Never gonna give you up, never gonna let you down...",
69
+ "videoId": "dQw4w9WgXcQ",
70
+ "language": "en"
71
+ }
72
+ ```
73
+
74
+ ---
75
+
76
+ ### Example 2: Summarize a Video
77
+
78
+ **Goal:** Get an AI summary of a video
79
+
80
+ 1. Add a **Smart Profiling** node
81
+ 2. Set **Resource** → `Summarize`
82
+ 3. Set **Operation** → `Generate Summary`
83
+ 4. Enter the **Video ID**
84
+ 5. Choose **Summary Type**:
85
+ - `brief` - 2-3 sentences
86
+ - `detailed` - Full analysis with key points
87
+ - `bullets` - Bullet point list
88
+ - `takeaways` - Key learnings
89
+
90
+ **Output:**
91
+ ```json
92
+ {
93
+ "summary": "This video explains the basics of...",
94
+ "videoId": "abc123",
95
+ "type": "brief"
96
+ }
97
+ ```
98
+
99
+ ---
100
+
101
+ ### Example 3: Chat with a Video
102
+
103
+ **Goal:** Ask questions about video content
104
+
105
+ 1. Add a **Smart Profiling** node
106
+ 2. Set **Resource** → `Chat`
107
+ 3. Set **Operation** → `Ask Question`
108
+ 4. Enter the **Video ID**
109
+ 5. Type your **Question**: "What are the main topics discussed?"
110
+
111
+ **Output:**
112
+ ```json
113
+ {
114
+ "answer": "The main topics discussed are...",
115
+ "videoId": "abc123"
116
+ }
117
+ ```
118
+
119
+ ---
120
+
121
+ ### Example 4: Get Channel Videos
122
+
123
+ **Goal:** Get all videos from a YouTube channel
124
+
125
+ 1. Add a **Smart Profiling** node
126
+ 2. Set **Resource** → `Channel`
127
+ 3. Set **Operation** → `Get Videos`
128
+ 4. Enter the **Channel ID or Handle**: `@mkbhd` or `UCBJycsmduvYEL83R_U4JriQ`
129
+ 5. Set **Limit**: `50` (max videos to return)
130
+
131
+ **Output:** Array of video objects with IDs, titles, thumbnails, etc.
132
+
133
+ ---
134
+
135
+ ## Workflow Templates
136
+
137
+ ### Template 1: Daily YouTube Digest
138
+
139
+ ```
140
+ Schedule Trigger (Daily)
141
+ ↓
142
+ Smart Profiling (Channel → Get Videos)
143
+ ↓
144
+ Smart Profiling (Summarize each video)
145
+ ↓
146
+ Send Email / Slack / Notion
147
+ ```
148
+
149
+ ### Template 2: Video Q&A Bot
150
+
151
+ ```
152
+ Webhook (receives question)
153
+ ↓
154
+ Smart Profiling (Chat → Ask Question)
155
+ ↓
156
+ Respond to Webhook
157
+ ```
158
+
159
+ ### Template 3: Bulk Transcript Export
160
+
161
+ ```
162
+ Smart Profiling (Playlist → Get Videos)
163
+ ↓
164
+ Loop Over Items
165
+ ↓
166
+ Smart Profiling (Transcript → Get Single)
167
+ ↓
168
+ Google Sheets / Airtable / Database
169
+ ```
170
+
171
+ ---
172
+
173
+ ## API Reference
174
+
175
+ ### Resources & Operations
176
+
177
+ #### Transcript
178
+ | Operation | Description |
179
+ |-----------|-------------|
180
+ | Get Single | Extract transcript from one video |
181
+ | Get Bulk | Extract transcripts from multiple videos |
182
+
183
+ #### Summarize
184
+ | Operation | Description |
185
+ |-----------|-------------|
186
+ | Generate Summary | AI summary (brief/detailed/bullets/takeaways) |
187
+
188
+ #### Chat
189
+ | Operation | Description |
190
+ |-----------|-------------|
191
+ | Ask Question | Ask a question about video content |
192
+
193
+ #### Chapter
194
+ | Operation | Description |
195
+ |-----------|-------------|
196
+ | Generate Chapters | Auto-generate timestamps |
197
+
198
+ #### Channel
199
+ | Operation | Description |
200
+ |-----------|-------------|
201
+ | Get Videos | Get all videos from channel |
202
+ | Get Shorts | Get shorts from channel |
203
+ | Get Playlists | Get playlists from channel |
204
+
205
+ #### Playlist
206
+ | Operation | Description |
207
+ |-----------|-------------|
208
+ | Get Videos | Get all videos in a playlist |
209
+
210
+ ---
211
+
212
+ ## Supported Formats
213
+
214
+ ### Transcript Formats
215
+ - `json` - Structured JSON with timestamps
216
+ - `text` - Plain text
217
+ - `srt` - SubRip subtitle format
218
+ - `vtt` - WebVTT subtitle format
219
+
220
+ ### Summary Types
221
+ - `brief` - 2-3 sentence summary
222
+ - `detailed` - Comprehensive with key points
223
+ - `bullets` - Bullet point list
224
+ - `takeaways` - Key learnings and action items
225
+
226
+ ### Chapter Formats
227
+ - `json` - Structured data
228
+ - `youtube` - Ready for YouTube description
229
+ - `markdown` - Markdown formatted
230
+
231
+ ---
232
+
233
+ ## Troubleshooting
234
+
235
+ ### "Node not appearing in search"
236
+
237
+ 1. Go to **Settings** → **Community Nodes**
238
+ 2. Check if `n8n-nodes-smartprofiling` shows version `0.1.0`
239
+ 3. If not, click **Update** or uninstall/reinstall
240
+ 4. Hard refresh browser: `Ctrl+Shift+R` (Windows) or `Cmd+Shift+R` (Mac)
241
+
242
+ ### "Invalid API Key"
243
+
244
+ 1. Make sure your key starts with `ytt_`
245
+ 2. Check for extra spaces when copying
246
+ 3. Verify key is active at [yttapi.com/dashboard](https://yttapi.com/dashboard)
247
+
248
+ ### "Video not found"
249
+
250
+ 1. Check if video is public (not private/unlisted)
251
+ 2. Verify the video ID is correct
252
+ 3. Try pasting the full YouTube URL instead
253
+
254
+ ### "Rate limit exceeded"
255
+
256
+ 1. Check your usage at [yttapi.com/dashboard](https://yttapi.com/dashboard)
257
+ 2. Upgrade your plan if needed
258
+ 3. Add delays between requests in bulk operations
259
+
260
+ ---
261
+
262
+ ## Pricing
263
+
264
+ | Plan | Credits/Month | Best For |
265
+ |------|---------------|----------|
266
+ | Free | 100 | Testing & small projects |
267
+ | Pro | 10,000 | Regular workflows |
268
+ | Business | 100,000 | High-volume automation |
269
+
270
+ Get your API key at [yttapi.com](https://yttapi.com)
271
+
272
+ ---
273
+
274
+ ## Support
275
+
276
+ - **Documentation:** [yttapi.com/api-docs](https://yttapi.com/api-docs)
277
+ - **Email:** support@yttapi.com
278
+
279
+ ---
280
+
281
+ ## License
282
+
283
+ [MIT](LICENSE.md) - Use freely in personal and commercial projects.
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class SmartProfilingApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: "file:smartprofiling.svg";
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SmartProfilingApi = void 0;
4
+ class SmartProfilingApi {
5
+ constructor() {
6
+ this.name = 'smartProfilingApi';
7
+ this.displayName = 'Smart Profiling API';
8
+ this.icon = 'file:smartprofiling.svg';
9
+ this.documentationUrl = 'https://yttapi.com/api-docs';
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ description: 'Your Smart Profiling API key. Get one at https://yttapi.com/dashboard',
18
+ },
19
+ {
20
+ displayName: 'Base URL',
21
+ name: 'baseUrl',
22
+ type: 'string',
23
+ default: 'https://yttapi.com',
24
+ description: 'The base URL of the Smart Profiling API (change only for self-hosted instances)',
25
+ },
26
+ ];
27
+ this.authenticate = {
28
+ type: 'generic',
29
+ properties: {
30
+ headers: {
31
+ Authorization: '=Bearer {{$credentials?.apiKey}}',
32
+ },
33
+ },
34
+ };
35
+ this.test = {
36
+ request: {
37
+ baseURL: '={{$credentials?.baseUrl}}',
38
+ url: '/api/v1/transcripts',
39
+ method: 'GET',
40
+ qs: {
41
+ id: 'dQw4w9WgXcQ',
42
+ },
43
+ },
44
+ };
45
+ }
46
+ }
47
+ exports.SmartProfilingApi = SmartProfilingApi;
48
+ //# sourceMappingURL=SmartProfilingApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartProfilingApi.credentials.js","sourceRoot":"","sources":["../../credentials/SmartProfilingApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,iBAAiB;IAA9B;QACC,SAAI,GAAG,mBAAmB,CAAC;QAE3B,gBAAW,GAAG,qBAAqB,CAAC;QAEpC,SAAI,GAAG,yBAAkC,CAAC;QAE1C,qBAAgB,GAAG,6BAA6B,CAAC;QAEjD,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,WAAW,EAAE,uEAAuE;aACpF;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oBAAoB;gBAC7B,WAAW,EAAE,iFAAiF;aAC9F;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,4BAA4B;gBACrC,GAAG,EAAE,qBAAqB;gBAC1B,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE;oBACH,EAAE,EAAE,aAAa;iBACjB;aACD;SACD,CAAC;IACH,CAAC;CAAA;AA9CD,8CA8CC"}
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
2
+ <!-- Background circle for better visibility on both light/dark modes -->
3
+ <circle cx="112.5" cy="112.5" r="105" fill="#2a2a2a"/>
4
+ <!-- Left wing - light gray fill with subtle stroke -->
5
+ <path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
6
+ <!-- Right wing - light gray fill with subtle stroke -->
7
+ <path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
8
+ <!-- Lightning bolt - brand red color -->
9
+ <path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
2
+ <!-- Background circle - lighter for dark mode UI -->
3
+ <circle cx="112.5" cy="112.5" r="105" fill="#f5f5f5"/>
4
+ <!-- Left wing - dark fill for dark mode -->
5
+ <path fill="#2a2a2a" stroke="#444444" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
6
+ <!-- Right wing - dark fill for dark mode -->
7
+ <path fill="#2a2a2a" stroke="#444444" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
8
+ <!-- Lightning bolt - brand red color -->
9
+ <path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 225 225">
2
+ <!-- Background circle for better visibility on both light/dark modes -->
3
+ <circle cx="112.5" cy="112.5" r="105" fill="#2a2a2a"/>
4
+ <!-- Left wing - light gray fill with subtle stroke -->
5
+ <path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 109.039062 64.859375 C 109.371094 74.886719 110.269531 162.460938 109.253906 168.550781 C 108.339844 174.035156 104.832031 183.945312 98.136719 184.984375 C 91.4375 186.023438 87.09375 180.988281 85.082031 180.328125 C 83.074219 179.671875 77.519531 183.070312 73.125 180.066406 C 68.734375 177.0625 69.695312 169.203125 68.46875 167.867188 C 67.246094 166.535156 60.445312 168.109375 57.1875 163.609375 C 53.929688 159.109375 56.761719 154.296875 55.730469 152.992188 C 54.699219 151.6875 44.65625 150.511719 43.238281 139.996094 C 41.621094 127.929688 51.296875 125.570312 51.246094 123.691406 C 51.191406 121.816406 43.222656 111.550781 47.257812 98.933594 C 51.289062 86.316406 61.90625 84.964844 62.527344 83.832031 C 63.148438 82.699219 58.289062 75.746094 64.683594 65.722656 C 71.078125 55.695312 80.304688 58.40625 81.613281 57.511719 C 82.925781 56.621094 81.390625 52.671875 85.835938 47.074219 C 89.941406 41.90625 97.792969 40.636719 103.464844 43.902344 C 108.609375 46.898438 108.703125 54.835938 109.039062 64.859375 Z"/>
6
+ <!-- Right wing - light gray fill with subtle stroke -->
7
+ <path fill="#e8e8e8" stroke="#888888" stroke-width="4" d="M 115.875 62.804688 C 115.355469 72.890625 114.414062 160.898438 115.332031 167.039062 C 116.152344 172.5625 117.65625 178.753906 125.875 182.742188 C 132.082031 185.753906 137.996094 180.859375 139.945312 180.222656 C 141.890625 179.585938 146.546875 180.429688 151.054688 177.480469 C 155.5625 174.535156 157.527344 167.9375 158.753906 167.246094 C 159.980469 166.558594 165.914062 167.152344 169.304688 162.675781 C 172.695312 158.199219 169.925781 153.527344 170.3125 152.070312 C 170.703125 150.609375 179.5625 148.886719 181.222656 139.320312 C 183.273438 127.550781 173.683594 124.375 173.417969 122.785156 C 173.15625 121.195312 180.617188 115.617188 178.300781 104.511719 C 175.761719 92.382812 167.910156 90.941406 167.3125 89.441406 C 166.714844 87.945312 171.316406 84.113281 168.925781 77.183594 C 166.535156 70.253906 160.390625 70.410156 159.488281 68.910156 C 158.589844 67.414062 160.785156 63.640625 157.023438 58.984375 C 153.105469 54.136719 145.148438 56.589844 143.832031 55.882812 C 142.511719 55.175781 142.542969 50.335938 137.988281 45.507812 C 134.417969 41.730469 126.636719 39.773438 121.46875 44.164062 C 116.882812 48.046875 116.425781 52.730469 115.875 62.804688 Z"/>
8
+ <!-- Lightning bolt - brand red color -->
9
+ <path fill="#e63b2e" d="M 131.292969 72.253906 C 127.800781 69.8125 91.121094 107.046875 92.300781 110.097656 C 93.480469 113.148438 105.4375 112.96875 107.042969 114.824219 C 108.648438 116.679688 94.054688 149.332031 96.761719 151.449219 C 98.792969 153 135.425781 117.128906 134.882812 113.910156 C 134.339844 110.6875 124.519531 111.292969 122.367188 109.253906 C 120.21875 107.210938 133.789062 74.015625 131.292969 72.253906 Z"/>
10
+ </svg>
@@ -0,0 +1,4 @@
1
+ import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class SmartProfiling implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SmartProfiling = void 0;
4
+ const transcript_1 = require("./resources/transcript");
5
+ const summarize_1 = require("./resources/summarize");
6
+ const chat_1 = require("./resources/chat");
7
+ const chapters_1 = require("./resources/chapters");
8
+ const channel_1 = require("./resources/channel");
9
+ const playlist_1 = require("./resources/playlist");
10
+ class SmartProfiling {
11
+ constructor() {
12
+ this.description = {
13
+ displayName: 'Smart Profiling',
14
+ name: 'smartProfiling',
15
+ icon: 'file:smartprofiling.svg',
16
+ group: ['transform'],
17
+ version: 1,
18
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
19
+ description: 'Extract transcripts, generate AI summaries, and chat with YouTube videos',
20
+ defaults: {
21
+ name: 'Smart Profiling',
22
+ },
23
+ usableAsTool: true,
24
+ inputs: ['main'],
25
+ outputs: ['main'],
26
+ credentials: [
27
+ {
28
+ name: 'smartProfilingApi',
29
+ required: true,
30
+ },
31
+ ],
32
+ requestDefaults: {
33
+ baseURL: '={{$credentials?.baseUrl || "https://yttapi.com"}}',
34
+ headers: {
35
+ Accept: 'application/json',
36
+ 'Content-Type': 'application/json',
37
+ },
38
+ },
39
+ properties: [
40
+ {
41
+ displayName: 'Resource',
42
+ name: 'resource',
43
+ type: 'options',
44
+ noDataExpression: true,
45
+ options: [
46
+ {
47
+ name: 'Channel',
48
+ value: 'channel',
49
+ description: 'Get videos, shorts, or playlists from a channel',
50
+ },
51
+ {
52
+ name: 'Chapter',
53
+ value: 'chapters',
54
+ description: 'Auto-generate video chapters with timestamps',
55
+ },
56
+ {
57
+ name: 'Chat',
58
+ value: 'chat',
59
+ description: 'Chat with video content using AI',
60
+ },
61
+ {
62
+ name: 'Playlist',
63
+ value: 'playlist',
64
+ description: 'Get videos from a playlist',
65
+ },
66
+ {
67
+ name: 'Summarize',
68
+ value: 'summarize',
69
+ description: 'Generate AI-powered video summaries',
70
+ },
71
+ {
72
+ name: 'Transcript',
73
+ value: 'transcript',
74
+ description: 'Extract transcripts from YouTube videos',
75
+ },
76
+ ],
77
+ default: 'transcript',
78
+ },
79
+ ...transcript_1.transcriptDescription,
80
+ ...summarize_1.summarizeDescription,
81
+ ...chat_1.chatDescription,
82
+ ...chapters_1.chaptersDescription,
83
+ ...channel_1.channelDescription,
84
+ ...playlist_1.playlistDescription,
85
+ ],
86
+ };
87
+ }
88
+ }
89
+ exports.SmartProfiling = SmartProfiling;
90
+ //# sourceMappingURL=SmartProfiling.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartProfiling.node.js","sourceRoot":"","sources":["../../../nodes/SmartProfiling/SmartProfiling.node.ts"],"names":[],"mappings":";;;AACA,uDAA+D;AAC/D,qDAA6D;AAC7D,2CAAmD;AACnD,mDAA2D;AAC3D,iDAAyD;AACzD,mDAA2D;AAE3D,MAAa,cAAc;IAA3B;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,0EAA0E;YACvF,QAAQ,EAAE;gBACT,IAAI,EAAE,iBAAiB;aACvB;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,mBAAmB;oBACzB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,oDAAoD;gBAC7D,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,WAAW,EAAE,iDAAiD;yBAC9D;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,8CAA8C;yBAC3D;wBACD;4BACC,IAAI,EAAE,MAAM;4BACZ,KAAK,EAAE,MAAM;4BACb,WAAW,EAAE,kCAAkC;yBAC/C;wBACD;4BACC,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,4BAA4B;yBACzC;wBACD;4BACC,IAAI,EAAE,WAAW;4BACjB,KAAK,EAAE,WAAW;4BAClB,WAAW,EAAE,qCAAqC;yBAClD;wBACD;4BACC,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,YAAY;4BACnB,WAAW,EAAE,yCAAyC;yBACtD;qBACD;oBACD,OAAO,EAAE,YAAY;iBACrB;gBACD,GAAG,kCAAqB;gBACxB,GAAG,gCAAoB;gBACvB,GAAG,sBAAe;gBAClB,GAAG,8BAAmB;gBACtB,GAAG,4BAAkB;gBACrB,GAAG,8BAAmB;aACtB;SACD,CAAC;IACH,CAAC;CAAA;AA5ED,wCA4EC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const channelDescription: INodeProperties[];
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.channelDescription = void 0;
4
+ const descriptions_1 = require("../../shared/descriptions");
5
+ const showOnlyForChannel = {
6
+ resource: ['channel'],
7
+ };
8
+ exports.channelDescription = [
9
+ {
10
+ displayName: 'Operation',
11
+ name: 'operation',
12
+ type: 'options',
13
+ noDataExpression: true,
14
+ displayOptions: {
15
+ show: showOnlyForChannel,
16
+ },
17
+ options: [
18
+ {
19
+ name: 'Get Videos',
20
+ value: 'getVideos',
21
+ action: 'Get channel videos',
22
+ description: 'Get list of videos from a YouTube channel',
23
+ routing: {
24
+ request: {
25
+ method: 'GET',
26
+ url: '/api/v1/channels',
27
+ qs: {
28
+ id: '={{$parameter.channelId}}',
29
+ content: 'videos',
30
+ },
31
+ },
32
+ },
33
+ },
34
+ {
35
+ name: 'Get Shorts',
36
+ value: 'getShorts',
37
+ action: 'Get channel shorts',
38
+ description: 'Get list of shorts from a YouTube channel',
39
+ routing: {
40
+ request: {
41
+ method: 'GET',
42
+ url: '/api/v1/channels',
43
+ qs: {
44
+ id: '={{$parameter.channelId}}',
45
+ content: 'shorts',
46
+ },
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: 'Get Playlists',
52
+ value: 'getPlaylists',
53
+ action: 'Get channel playlists',
54
+ description: 'Get list of playlists from a YouTube channel',
55
+ routing: {
56
+ request: {
57
+ method: 'GET',
58
+ url: '/api/v1/channels',
59
+ qs: {
60
+ id: '={{$parameter.channelId}}',
61
+ content: 'playlists',
62
+ },
63
+ },
64
+ },
65
+ },
66
+ ],
67
+ default: 'getVideos',
68
+ },
69
+ {
70
+ ...descriptions_1.channelIdField,
71
+ displayOptions: {
72
+ show: showOnlyForChannel,
73
+ },
74
+ },
75
+ {
76
+ displayName: 'Additional Options',
77
+ name: 'additionalOptions',
78
+ type: 'collection',
79
+ placeholder: 'Add Option',
80
+ default: {},
81
+ displayOptions: {
82
+ show: showOnlyForChannel,
83
+ },
84
+ options: [
85
+ {
86
+ displayName: 'Continuation Token',
87
+ name: 'continuationToken',
88
+ type: 'string',
89
+ typeOptions: { password: true },
90
+ default: '',
91
+ description: 'Token for pagination (from previous response)',
92
+ },
93
+ ],
94
+ },
95
+ ];
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/SmartProfiling/resources/channel/index.ts"],"names":[],"mappings":";;;AACA,4DAA2D;AAE3D,MAAM,kBAAkB,GAAG;IAC1B,QAAQ,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEW,QAAA,kBAAkB,GAAsB;IACpD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,QAAQ;yBACjB;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,2CAA2C;gBACxD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,QAAQ;yBACjB;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,uBAAuB;gBAC/B,WAAW,EAAE,8CAA8C;gBAC3D,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,kBAAkB;wBACvB,EAAE,EAAE;4BACH,EAAE,EAAE,2BAA2B;4BAC/B,OAAO,EAAE,WAAW;yBACpB;qBACD;iBACD;aACD;SACD;QACD,OAAO,EAAE,WAAW;KACpB;IACD;QACC,GAAG,6BAAc;QACjB,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;KACD;IACD;QACC,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,YAAY;QACzB,OAAO,EAAE,EAAE;QACX,cAAc,EAAE;YACf,IAAI,EAAE,kBAAkB;SACxB;QACD,OAAO,EAAE;YACR;gBACC,WAAW,EAAE,oBAAoB;gBACjC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,+CAA+C;aAC5D;SACD;KACD;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const chaptersDescription: INodeProperties[];