AI DJ:LinkupとGPT4を活用したテキストからSpotifyプレイリスト生成ツール
上級
これはContent Creation, Multimodal AI分野の自動化ワークフローで、17個のノードを含みます。主にSet, Form, Spotify, SplitOut, FormTriggerなどのノードを使用。 AI DJ:LinkupとGPT4を活用したテキストからSpotifyプレイリスト生成ツール
前提条件
- •ターゲットAPIの認証情報が必要な場合あり
- •OpenAI API Key
使用ノード (17)
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"nodes": [
{
"id": "cad152e6-b878-4ecc-9d6c-c35cd456881c",
"name": "トラックIDを取得",
"type": "n8n-nodes-base.set",
"position": [
2464,
1072
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a35cb340-5917-4981-9627-6c6189a0a0f4",
"name": "Track ID",
"type": "string",
"value": "={{ $json.id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "fa700f73-8477-46fe-b037-0eddd4634977",
"name": "プレイリストを作成",
"type": "n8n-nodes-base.spotify",
"notes": "Create a blank playlist with the chosen name.",
"position": [
1568,
1072
],
"parameters": {
"name": "={{ $json.output.playlistName }}",
"resource": "playlist",
"operation": "create",
"additionalFields": {
"public": true
}
},
"credentials": {
"spotifyOAuth2Api": {
"id": "cF3ccMo4DndHdIe1",
"name": "Spotify account"
}
},
"notesInFlow": true,
"retryOnFail": true,
"typeVersion": 1
},
{
"id": "9a95a7c1-b655-4078-88ba-1cc5eefd9fbe",
"name": "トラックを分割",
"type": "n8n-nodes-base.splitOut",
"position": [
2016,
1072
],
"parameters": {
"options": {},
"fieldToSplitOut": "Tracks"
},
"typeVersion": 1
},
{
"id": "f8503606-eaf1-484f-9bf4-260f1dbce716",
"name": "トラック配列を取得",
"type": "n8n-nodes-base.set",
"position": [
1792,
1072
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c03ede2c-3d1a-4b94-ba72-d9ac518300d3",
"name": "Tracks",
"type": "array",
"value": "={{ $('Ideate playlist').item.json.output.tracks }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5462894f-ddfe-4e80-a5af-07d57b39d9dd",
"name": "プレイリストにトラックを追加",
"type": "n8n-nodes-base.spotify",
"position": [
2688,
1072
],
"parameters": {
"id": "=spotify:playlist:{{ $('Create playlist').first().json.id }}",
"trackID": "=spotify:track:{{ $json[\"Track ID\"] }}",
"resource": "playlist",
"additionalFields": {}
},
"credentials": {
"spotifyOAuth2Api": {
"id": "cF3ccMo4DndHdIe1",
"name": "Spotify account"
}
},
"retryOnFail": true,
"typeVersion": 1
},
{
"id": "8363b3a8-710f-42a6-b977-7ba7b4fc3076",
"name": "最終プレイリストを取得",
"type": "n8n-nodes-base.spotify",
"position": [
2256,
1360
],
"parameters": {
"id": "=spotify:playlist:{{ $('Create playlist').item.json.id }}",
"resource": "playlist",
"operation": "get"
},
"credentials": {
"spotifyOAuth2Api": {
"id": "cF3ccMo4DndHdIe1",
"name": "Spotify account"
}
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "660044f8-d9e3-4b7a-b5ec-9100d315d87f",
"name": "トラックを検索",
"type": "n8n-nodes-base.spotify",
"position": [
2240,
1072
],
"parameters": {
"limit": 1,
"query": "={{ $json.artist }} - {{ $json.title }}",
"filters": {},
"resource": "track",
"operation": "search"
},
"credentials": {
"spotifyOAuth2Api": {
"id": "cF3ccMo4DndHdIe1",
"name": "Spotify account"
}
},
"retryOnFail": true,
"typeVersion": 1
},
{
"id": "749dd63f-a0cc-449f-9289-c3628bfdcbbf",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
912
],
"parameters": {
"color": 5,
"width": 652,
"height": 756,
"content": "## AI agent to plan the playlist\n\nThis agent uses the AI web-search API Linkup to search for the perfect tracks and returns a structured output containing the playlist title and all tracks to include."
},
"typeVersion": 1
},
{
"id": "0bcc422d-d223-409b-b13c-e4be95f4dc0e",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1984,
912
],
"parameters": {
"color": 7,
"width": 840,
"height": 320,
"content": "## For each track\nEach track gets searched in Spotify to get their specific IDs to then add them one by one to the playlist."
},
"typeVersion": 1
},
{
"id": "f63a650e-3612-4bc0-bb4a-94d804d86459",
"name": "フォーム送信時",
"type": "n8n-nodes-base.formTrigger",
"position": [
640,
1072
],
"webhookId": "440aeb02-ea99-4b63-be29-c093786684ce",
"parameters": {
"options": {
"path": "spotify-playlist-generator",
"customCss": ":root {\n /* Fonts */\n --font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n --font-weight-normal: 400;\n --font-weight-bold: 700;\n\n /* Font sizes */\n --font-size-body: 14px;\n --font-size-label: 16px;\n --font-size-test-notice: 14px;\n --font-size-input: 16px;\n --font-size-header: 24px;\n --font-size-paragraph: 16px;\n --font-size-link: 14px;\n --font-size-error: 14px;\n --font-size-html-h1: 36px;\n --font-size-html-h2: 28px;\n --font-size-html-h3: 22px;\n --font-size-html-h4: 18px;\n --font-size-html-h5: 16px;\n --font-size-html-h6: 14px;\n --font-size-subheader: 18px;\n\n /* Colours – Dark Theme */\n --color-background: #191414; /* Spotify dark background */\n --color-card-bg: #212121; /* Dark card background */\n --color-card-border: #2a2a2a;\n --color-card-shadow: rgba(0, 0, 0, 0.6);\n\n --color-header: #FFFFFF;\n --color-label: #EAEAEA;\n --color-input-bg: #212121; /* ✅ Dark background for inputs */\n --color-input-text: #FFFFFF; /* ✅ White text */\n --color-input-border: #444444;\n --color-focus-border: #1DB954;\n\n --color-link: #1DB954;\n --color-link-hover: #1AA34A;\n --color-header-subtext: #B3B3B3;\n\n --color-submit-btn-bg: #1DB954;\n --color-submit-btn-text: #FFFFFF;\n --color-submit-btn-hover: #1AA34A;\n\n --color-clear-button-bg: #333333;\n --color-clear-button-text: #FFFFFF;\n\n --color-test-notice-text: #FFFFFF;\n --color-test-notice-bg: #2a2a2a;\n --color-test-notice-border: #3a3a3a;\n\n --color-error: #E22134;\n --color-required: #1DB954;\n\n --color-html-text: #EAEAEA;\n --color-html-link: #1DB954;\n\n /* Border Radii */\n --border-radius-card: 8px;\n --border-radius-input: 4px;\n --border-radius-clear-btn: 50%;\n --card-border-radius: 8px;\n\n /* Spacing */\n --padding-container-top: 32px;\n --padding-card: 24px;\n --padding-test-notice-vertical: 16px;\n --padding-test-notice-horizontal: 24px;\n --margin-bottom-card: 24px;\n --padding-form-input: 12px;\n --card-padding: 24px;\n --card-margin-bottom: 24px;\n\n /* Dimensions */\n --container-width: 480px;\n --submit-btn-height: 48px;\n --checkbox-size: 20px;\n\n /* Other visuals */\n --box-shadow-card: 0px 4px 16px rgba(0, 0, 0, 0.6);\n --opacity-placeholder: 0.8;\n}\n\n/* Inputs */\ninput, textarea {\n background-color: var(--color-input-bg);\n color: var(--color-input-text);\n border: 1px solid var(--color-input-border);\n border-radius: var(--border-radius-input);\n padding: var(--padding-form-input);\n}\n\ninput:focus, textarea:focus {\n outline: none;\n border-color: var(--color-focus-border);\n box-shadow: 0 0 0 2px rgba(29, 185, 84, 0.3); /* Spotify green glow */\n}\n\n/* Placeholder styling */\n::placeholder {\n font-family: system-ui, sans-serif;\n font-size: 0.9em;\n font-weight: 400;\n color: #B3B3B3; /* ✅ More readable grey */\n opacity: 1;\n}",
"buttonLabel": "Generate the playlist",
"appendAttribution": false
},
"formTitle": "Spotify playlist AI generator",
"formFields": {
"values": [
{
"fieldType": "textarea",
"fieldLabel": "Playlist request",
"placeholder": "=Describe the playlist you'd like, its style, artists, mood, anything",
"requiredField": true
},
{
"fieldType": "number",
"fieldLabel": "Number of tracks",
"placeholder": "How many tracks to include",
"requiredField": true
}
]
},
"responseMode": "lastNode"
},
"typeVersion": 2.3
},
{
"id": "32bcb9a6-89d3-4aa6-a38f-459cbef72398",
"name": "OpenAI チャットモデル",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
896,
1296
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "dMiSy27YCK6c6rra",
"name": "Duv's OpenAI"
}
},
"typeVersion": 1.2
},
{
"id": "5ae73327-327c-4add-8068-f0e202101577",
"name": "トラックを見つけるためのWebクエリ",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
1136,
1312
],
"parameters": {
"url": "https://api.linkup.so/v1/search",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "q",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `The tracks research query.\n(e.g. \"12 tracks released in 2010 in Spain on the topic of passionate love, RNB style\" or \"10 most famous Daft Punk tracks\" ...)`, 'string') }}"
},
{
"name": "depth",
"value": "deep"
},
{
"name": "outputType",
"value": "structured"
},
{
"name": "structuredOutputSchema",
"value": "={\n \"type\": \"object\",\n \"properties\": {\n \"tracks\": {\n \"type\": \"array\",\n \"description\": \"A list of music tracks included in the selection\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"The title of the track\"\n },\n \"artist\": {\n \"type\": \"string\",\n \"description\": \"The artist or group who performed the track\"\n },\n \"explanation\": {\n \"type\": \"string\",\n \"description\": \"A 1-line explanation of why this track was chosen\"\n }\n }\n }\n }\n }\n}"
},
{
"name": "includeImages",
"value": "false"
}
]
},
"genericAuthType": "httpBearerAuth",
"toolDescription": "=Call this tool with a specific query to get a list of recommended tracks to include in the playlist."
},
"credentials": {
"httpBearerAuth": {
"id": "W7AgeoVOv60DlvyS",
"name": "Linkup - web search AI"
}
},
"typeVersion": 4.2
},
{
"id": "4733dee8-34fd-4e20-b91a-e5f5a16abb42",
"name": "プレイリストを考案",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1056,
1072
],
"parameters": {
"text": "=# Playlist guidelines\n\n{{ $json['Playlist request'] }}\n\n\n# Number of songs to include\n\n{{ $json['Number of tracks'] }}",
"options": {
"systemMessage": "=# Role\n\nYou are a very experienced DJ and your task is to create a playlist of {{ $json['Number of tracks'] }} tracks and give it a name, based on the user message which contains the playlist instructions and number of tracks to include. \n\n# How to find the {{ $json['Number of tracks'] }} tracks to include within a playlist\n\nYou'll recommend an interesting and relevant mix of tracks, exactly {{ $json['Number of tracks'] }} tracks - ideally not from the same artist (except if the instructions tell so), nailing implementing the instructions given by the user message.\n\nTo achieve that, you'll call the tool \"Web query to find tracks\" with a query you'll craft - this tool has web access and knows all tracks so you can pass queries and it will return track suggestions. Run this tool only once.\nYou'll then be able to make your selection based on those recommendations.\n\nFor each track you will (and this will be detailed later) provide the artist name and the title of the track.\n\n\n# How to craft the playlist title\n\nBased on the user message and the songs to fit into the playlist, the playlist name should be between 5 and 9 words and perfectly fit for a playlist name.\nIt is possible that the user message contains more direct instructions for the title.\n\n# Strict output format:\n\nHere's an example of your output so you have a good idea of the schema of the JSON output and a little idea of how the values can look like in the case of a 5-track playlist (but adapt the values to the user message!):\n\n\n{\n \"playlistName\":\"Summer dancing with a Spritz and attitude\",\n \"tracks\":[\n {\n \"artist\":\"David Guetta, Sia\",\n \"title\":\"Beautiful People\"\n },\n {\n \"artist\":\"Ed Sheeran\",\n \"title\":\"Azizam\"\n },\n {\n \"artist\":\"Doechii\",\n \"title\":\"Anxiety\"\n },\n {\n \"artist\":\"OneRepublic\",\n \"title\":\"Nobody (from Kaiju No.8)\"\n },\n {\n \"artist\":\"The Weeknd\",\n \"title\":\"Cry For Me\"\n }\n ]\n}\n\n\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "d370dbad-7b59-4e88-ab36-5058112af9ab",
"name": "構造化出力パーサー",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1360,
1312
],
"parameters": {
"jsonSchemaExample": "{\n \"playlistName\":\"Summer dancing with a Spritz and attitude\",\n \"tracks\":[\n {\n \"artist\":\"David Guetta, Sia\",\n \"title\":\"Beautiful People\"\n },\n {\n \"artist\":\"Ed Sheeran\",\n \"title\":\"Azizam\"\n },\n {\n \"artist\":\"Doechii\",\n \"title\":\"Anxiety\"\n },\n {\n \"artist\":\"OneRepublic\",\n \"title\":\"Nobody (from Kaiju No.8)\"\n },\n {\n \"artist\":\"The Weeknd\",\n \"title\":\"Cry For Me\"\n }\n ]\n}\n"
},
"typeVersion": 1.3
},
{
"id": "90f4b20f-4e85-4069-9d1e-e54c41778ac7",
"name": "プレイリストを開く",
"type": "n8n-nodes-base.form",
"position": [
2464,
1360
],
"webhookId": "d417cf9e-4774-4400-a5b1-93369a236547",
"parameters": {
"options": {},
"operation": "completion",
"redirectUrl": "={{ $json.external_urls.spotify }}",
"respondWith": "redirect"
},
"typeVersion": 2.3
},
{
"id": "277b77d3-8f2f-462c-9dd0-71704acd4256",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
1056,
1280
],
"parameters": {
"color": 6,
"height": 368,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## AI web-search with Linkup\nConnect your Linkup.so credentials"
},
"typeVersion": 1
},
{
"id": "3f440854-0af9-4676-93c8-1674255c5d66",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
720
],
"parameters": {
"width": 528,
"height": 960,
"content": "\n\n# AI DJ: Prompt-to-Playlist Generator\n\nThis workflow uses an AI Agent as a \"DJ\" to turn any text prompt into a Spotify playlist. It's smart, fast, and creates a seamless experience from start to finish.\n\n## **How it works**\n1. It takes your playlist idea from the **web form**.\n2. An AI Agent uses **Linkup** to search the web for the latest and most relevant tracks.\n3. The agent curates a final list and the workflow automatically builds the playlist in your **Spotify** account.\n4. Finally, it **redirects you** straight to your new playlist!\n\n**How to use**\n1. **Connect your accounts:** Add your credentials for **Spotify**, **Linkup**, and an **AI provider** (like OpenAI) to the relevant nodes.\n2. **Activate the workflow.**\n3. **Open the Form URL** from the trigger node and describe your perfect playlist.\n\n@[youtube](EgvaD7j4c1A)\n\n\n\n*A template developed by Guillaume Duvernay*"
},
"typeVersion": 1
}
],
"connections": {
"cad152e6-b878-4ecc-9d6c-c35cd456881c": {
"main": [
[
{
"node": "5462894f-ddfe-4e80-a5af-07d57b39d9dd",
"type": "main",
"index": 0
}
]
]
},
"fa700f73-8477-46fe-b037-0eddd4634977": {
"main": [
[
{
"node": "f8503606-eaf1-484f-9bf4-260f1dbce716",
"type": "main",
"index": 0
}
]
]
},
"4733dee8-34fd-4e20-b91a-e5f5a16abb42": {
"main": [
[
{
"node": "fa700f73-8477-46fe-b037-0eddd4634977",
"type": "main",
"index": 0
}
]
]
},
"f8503606-eaf1-484f-9bf4-260f1dbce716": {
"main": [
[
{
"node": "9a95a7c1-b655-4078-88ba-1cc5eefd9fbe",
"type": "main",
"index": 0
}
]
]
},
"660044f8-d9e3-4b7a-b5ec-9100d315d87f": {
"main": [
[
{
"node": "cad152e6-b878-4ecc-9d6c-c35cd456881c",
"type": "main",
"index": 0
}
]
]
},
"9a95a7c1-b655-4078-88ba-1cc5eefd9fbe": {
"main": [
[
{
"node": "660044f8-d9e3-4b7a-b5ec-9100d315d87f",
"type": "main",
"index": 0
}
]
]
},
"32bcb9a6-89d3-4aa6-a38f-459cbef72398": {
"ai_languageModel": [
[
{
"node": "4733dee8-34fd-4e20-b91a-e5f5a16abb42",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"f63a650e-3612-4bc0-bb4a-94d804d86459": {
"main": [
[
{
"node": "4733dee8-34fd-4e20-b91a-e5f5a16abb42",
"type": "main",
"index": 0
}
]
]
},
"5462894f-ddfe-4e80-a5af-07d57b39d9dd": {
"main": [
[
{
"node": "8363b3a8-710f-42a6-b977-7ba7b4fc3076",
"type": "main",
"index": 0
}
]
]
},
"8363b3a8-710f-42a6-b977-7ba7b4fc3076": {
"main": [
[
{
"node": "90f4b20f-4e85-4069-9d1e-e54c41778ac7",
"type": "main",
"index": 0
}
]
]
},
"d370dbad-7b59-4e88-ab36-5058112af9ab": {
"ai_outputParser": [
[
{
"node": "4733dee8-34fd-4e20-b91a-e5f5a16abb42",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"5ae73327-327c-4add-8068-f0e202101577": {
"ai_tool": [
[
{
"node": "4733dee8-34fd-4e20-b91a-e5f5a16abb42",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
LookioとOpenAI GPTを使用して知識源から事実に基づく記事を作成
Lookio と OpenAI GPT を使って、知识源から基礎のな記事を作成する
Set
Split Out
Aggregate
+
Set
Split Out
Aggregate
19 ノードGuillaume Duvernay
コンテンツ作成
AIによる計画、Linkup検索、GPT-5を使って研究支援記事を作成
AIによる計画、Linkup検索、GPT-5を使って研究支援記事を作成
Set
Split Out
Aggregate
+
Set
Split Out
Aggregate
19 ノードGuillaume Duvernay
コンテンツ作成
長いドキュメントを生成する
GPT-5とGoogle Docsで簡単な見出しから長文書を生成
Set
Form
Split Out
+
Set
Form
Split Out
14 ノードNghia Nguyen
コンテンツ作成
WordPressブログの自動化プロフェッショナル版(先端研究)v2.1マーケットプラグイン
GPT-4o、Perplexity AI、そして多言語対応を使ったSEO最適化ブログ作成の自動化
If
Set
Xml
+
If
Set
Xml
125 ノードDaniel Ng
コンテンツ作成
OpenAIとFirecrawlを使って製品URLからAI生成のMeta広告キャンペーンを作成する
OpenAI と Firecrawl を使って製品 URL から AI 生成の Meta 広告キャンペーンを作成
If
Set
Code
+
If
Set
Code
40 ノードAdam Crafts
コンテンツ作成
Super RAGとGPT-5を使用して知識源から事実に基づく記事を作成
Super RAG と GPT-5 を使って、知识源から基礎のな記事を作成する
Set
Split Out
Aggregate
+
Set
Split Out
Aggregate
19 ノードGuillaume Duvernay
AI RAG検索拡張