app: description: This Chatflow allows users to input a URL and convert the full text of the webpage into a specified Tone writing style, while simultaneously outputting content for Instagram, X(Twitter), Threads, and RED(Xiaohongshu), leveraging Parallel Execution of Nodes to generate results super quickly icon: 📝 icon_background: '#D1E0FF' mode: advanced-chat name: URL-to-Cross-Platform-Copywriting use_icon_as_answer_icon: true kind: app version: 0.1.2 workflow: conversation_variables: - description: '' id: 80394c12-de45-43ba-b769-84044790d498 name: image_url value: [] value_type: array[string] environment_variables: - description: '' id: 41825486-0251-4f4b-8a91-39f075aa2821 name: strategy value: ' ' value_type: string features: file_upload: image: enabled: false number_limits: 3 transfer_methods: - local_file - remote_url opening_statement: '' retriever_resource: enabled: false sensitive_word_avoidance: enabled: false speech_to_text: enabled: false suggested_questions: [] suggested_questions_after_answer: enabled: false text_to_speech: enabled: false language: '' voice: '' graph: edges: - data: sourceType: llm targetType: answer id: llm-answer selected: false source: llm sourceHandle: source target: answer targetHandle: target type: custom - data: isInIteration: false sourceType: start targetType: tool id: 1725491707948-source-1725491755881-target selected: false source: '1725491707948' sourceHandle: source target: '1725491755881' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: llm targetType: answer id: 17254926745700-source-answer-target selected: false source: '17254926745700' sourceHandle: source target: answer targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: llm targetType: answer id: 17254918655260-source-answer-target selected: false source: '17254918655260' sourceHandle: source target: answer targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: llm targetType: answer id: 17254918390740-source-answer-target selected: false source: '17254918390740' sourceHandle: source target: answer targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: tool targetType: llm id: 1725491755881-source-1725492221199-target selected: false source: '1725491755881' sourceHandle: source target: '1725492221199' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: llm targetType: answer id: 1725492221199-source-1725493735888-target selected: false source: '1725492221199' sourceHandle: source target: '1725493735888' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: llm id: 1725493735888-source-17254918655260-target selected: false source: '1725493735888' sourceHandle: source target: '17254918655260' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: llm id: 1725493735888-source-17254926745700-target selected: false source: '1725493735888' sourceHandle: source target: '17254926745700' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: llm id: 1725493735888-source-llm-target selected: false source: '1725493735888' sourceHandle: source target: llm targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: llm id: 1725493735888-source-17254918390740-target selected: false source: '1725493735888' sourceHandle: source target: '17254918390740' targetHandle: target type: custom zIndex: 0 - data: isInIteration: true iteration_id: '1725495329493' sourceType: iteration-start targetType: llm id: 1725495329493start-source-1725495582624-target selected: false source: 1725495329493start sourceHandle: source target: '1725495582624' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: true iteration_id: '1725495329493' sourceType: llm targetType: tool id: 1725495582624-source-1725495571606-target selected: false source: '1725495582624' sourceHandle: source target: '1725495571606' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: false sourceType: code targetType: iteration id: 1725494974678-source-1725495329493-target source: '1725494974678' sourceHandle: source target: '1725495329493' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: code id: answer-source-1725496321173-target source: answer sourceHandle: source target: '1725496321173' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: code targetType: answer id: 1725496321173-source-1725495972272-target source: '1725496321173' sourceHandle: source target: '1725495972272' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: answer targetType: code id: 1725495972272-source-1725494974678-target source: '1725495972272' sourceHandle: source target: '1725494974678' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: iteration targetType: template-transform id: 1725495329493-source-1726043917944-target source: '1725495329493' sourceHandle: source target: '1726043917944' targetHandle: target type: custom zIndex: 0 - data: isInIteration: false sourceType: template-transform targetType: answer id: 1726043917944-source-1726043850335-target source: '1726043917944' sourceHandle: source target: '1726043850335' targetHandle: target type: custom zIndex: 0 - data: isInIteration: true iteration_id: '1725495329493' sourceType: tool targetType: code id: 1725495571606-source-1726045053985-target source: '1725495571606' sourceHandle: source target: '1726045053985' targetHandle: target type: custom zIndex: 1002 - data: isInIteration: true iteration_id: '1725495329493' sourceType: code targetType: assigner id: 1726045053985-source-1726043526969-target source: '1726045053985' sourceHandle: source target: '1726043526969' targetHandle: target type: custom zIndex: 1002 nodes: - data: desc: '' selected: false title: Start type: start variables: - label: link max_length: 8182 options: [] required: true type: paragraph variable: link - label: tone max_length: 48 options: - Academic/Scientific - Technical/Engineering - Business/Corporate - Legal - Medical - Journalistic - Casual/Conversational - Educational/Instructional - Empathetic/Supportive - Persuasive/Marketing - Humorous/Witty - Poetic/Literary required: false type: select variable: tone height: 116 id: '1725491707948' position: x: -700.8602234963607 y: 375.43229588766866 positionAbsolute: x: -700.8602234963607 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' memory: role_prefix: assistant: '' user: '' window: enabled: false size: 10 model: completion_params: temperature: 0.7 mode: chat name: gpt-4o provider: openai prompt_template: - id: 0efac3dc-daf5-43e1-bde6-5077774d2931 role: system text: 'You are tasked with creating a short, engaging Instagram caption based on a given text. Instagram captions are typically brief, attention-grabbing, and designed to encourage engagement from followers. Your goal is to distill the essence of the original text into a concise, appealing caption suitable for an Instagram post. Here is the original text you will be working with: {{#1725491755881.text#}} Follow these guidelines to create an effective Instagram caption: 1. Keep it brief: Instagram captions should ideally be between 1-3 sentences or 125 characters or less. 2. Capture the main idea: Identify the core message or most interesting aspect of the original text. 3. Use engaging language: Employ vivid words, questions, or calls-to-action to encourage interaction. 4. Consider using emojis: If appropriate, include 1-2 relevant emojis to add visual appeal. 5. Avoid hashtags: For this task, focus on the caption text only, without including hashtags. First, carefully read and analyze the original text. Identify its main theme, key points, or most captivating elements. Then, craft a short, engaging caption that encapsulates the essence of the text while adhering to the guidelines above. Provide your final Instagram caption within tags. Remember to keep it concise and impactful.' selected: false title: INSTAGRAM type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: llm position: x: 543.2951376960599 y: 503.1574889519667 positionAbsolute: x: 543.2951376960599 y: 503.1574889519667 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: answer: '## Instagram {{#llm.text#}} --- ## X(Twitter) / Threads {{#17254918390740.text#}} --- ## RED(Xiaohongshu) {{#17254918655260.text#}} --- ## Style Rewriting {{#17254926745700.text#}}' desc: '' selected: false title: Content integration type: answer variables: [] height: 210 id: answer position: x: 943.169157018426 y: 376.3405270030419 positionAbsolute: x: 943.169157018426 y: 376.3405270030419 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' provider_id: jina provider_name: jina provider_type: builtin selected: false title: JinaReader tool_configurations: gather_all_images_at_the_end: 1 gather_all_links_at_the_end: 0 image_caption: 1 max_retries: 3 no_cache: 0 proxy_server: null summary: 0 target_selector: null wait_for_selector: null tool_label: JinaReader tool_name: jina_reader tool_parameters: url: type: mixed value: '{{#1725491707948.link#}}' type: tool height: 298 id: '1725491755881' position: x: -396.7704599288535 y: 375.43229588766866 positionAbsolute: x: -396.7704599288535 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' memory: role_prefix: assistant: '' user: '' window: enabled: false size: 10 model: completion_params: temperature: 0.7 mode: chat name: gpt-4o provider: openai prompt_template: - id: 0efac3dc-daf5-43e1-bde6-5077774d2931 role: system text: 'You are tasked with creating a Twitter thread based on a given article. Your goal is to summarize the main points of the article in a series of tweets while maintaining the original style and avoiding marketing language. Here''s how to approach this task: First, carefully read the following original text: {{#1725491755881.text#}} Now, follow these instructions to create the Twitter thread: 1. Analyze the text and identify the main points and key ideas. 2. Break down the content into a series of concise tweets. Each tweet should be self-contained and convey a complete thought or idea. 3. Aim for 5-8 tweets in total, depending on the length and complexity of the original text. 4. Keep each tweet within the 280-character limit. 5. Number each tweet at the end, indicating its position in the thread. For example, "2/8" for the second tweet in a thread of eight tweets. Place this number on a new line at the end of each tweet. 6. Maintain the style and tone of the original text. Do not use marketing language or try to sensationalize the content. 7. For the first tweet, create an engaging opening that encourages users to read the entire thread. End this tweet with "Here are the details 👇🧵" to indicate that more information follows. 8. In the last tweet, provide a brief conclusion or summary of the main takeaway from the article. When you''re ready to present the Twitter thread, format your response as follows: [Content of first tweet] 1/[total number of tweets] [Content of second tweet] 2/[total number of tweets] [Continue with remaining tweets] [Content of last tweet] [n]/[total number of tweets] Remember to maintain the original style and avoid marketing language throughout the thread. Focus on accurately conveying the information from the original text in a concise and engaging manner.' selected: false title: Twitter / Threads type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '17254918390740' position: x: 543.2951376960599 y: 632.4200845404172 positionAbsolute: x: 543.2951376960599 y: 632.4200845404172 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' memory: query_prompt_template: '' role_prefix: assistant: '' user: '' window: enabled: false size: 10 model: completion_params: temperature: 0.7 mode: chat name: claude-3-5-sonnet-20240620 provider: anthropic prompt_template: - id: 0efac3dc-daf5-43e1-bde6-5077774d2931 role: system text: "You are a Xiaohongshu (小红书) content creation expert with extensive\ \ experience in social media writing and marketing. Your goal is to create\ \ engaging, attention-grabbing content that resonates with the Xiaohongshu\ \ audience. Follow these instructions to create a compelling post based\ \ on the given input:\n\nInput variables:\n\n{{#1725491755881.text#}}\n\ \n\nContent Creation Guidelines:\n\n1. Writing Style:\n\ \ - Use a warm, friendly, and enthusiastic tone\n - Start with addressing\ \ a pain point or common issue\n - Structure the content as a step-by-step\ \ guide\n - Incorporate conversational phrases and colloquialisms\n\ \ - Use \"explosive words\" that evoke strong emotions and resonate\ \ with users\n - Keep it brief: Instagram captions should ideally be\ \ between 1-3 sentences or 125 characters or less.\n - Capture the main\ \ idea: Identify the core message or most interesting aspect of the original\ \ text.\n\n2. Structure:\n - Begin with an attention-grabbing opening\ \ line\n - Divide the content into short, easy-to-read paragraphs\n\ \ - Use bullet points or numbered lists for clarity when appropriate\n\ \ - End with a call-to-action or question to encourage engagement\n\n\ 3. Emoji Usage:\n - Include relevant emojis at the beginning and end\ \ of each paragraph\n - Insert emojis within sentences to emphasize\ \ key points\n - Use a variety of emojis that relate to the content,\ \ avoiding repetition\n - Examples: ⭐️, \U0001F525, \U0001F4A1, \U0001F389\ , \U0001F440, \U0001F4AA, \U0001F308, \U0001F680, \U0001F64C, \U0001F496\ \n\n4. SEO Tags:\n - Create 5-8 relevant hashtags at the end of the\ \ post\n - Include a mix of core keywords, related keywords, high-conversion\ \ words, and trending topics\n - Format tags with the # symbol (e.g.,\ \ #小红书爆款)\n\nOutput Format:\n- Write the entire post in Chinese (Simplified)\n\ - Do not include any explanations or meta-commentary\n- Use natural, conversational\ \ language throughout\n- Incorporate friendly, relatable expressions (e.g.,\ \ \"姐妹们听我说!\", \"我直接震惊了!\", \"兄弟们,这个太绝了!\")\n- Avoid obvious marketing\ \ language like \"我直接冲啊!!\"\n- Use the following structure for your post:\n\ \n\n[Attention-grabbing title with emojis]\n\n[Opening paragraph\ \ with emojis]\n\n[Main content with step-by-step explanation, using emojis\ \ throughout]\n\n[Closing paragraph with call-to-action or question]\n\ \n[SEO tags]\n\n\nFinal Reminders:\n- Strictly adhere to ethical\ \ guidelines and avoid any content related to illegal activities\n- Focus\ \ on creating value for the reader while maintaining an engaging and relatable\ \ tone\n- Ensure all emojis and hashtags are relevant to the content and\ \ target audience\n\nNow, create a Xiaohongshu post based on the provided\ \ topic, target audience, and tone. Remember to make it engaging, informative,\ \ and shareable!\n\nPlease output in Chinese." selected: false title: RED type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '17254918655260' position: x: 543.2951376960599 y: 376.3405270030419 positionAbsolute: x: 543.2951376960599 y: 376.3405270030419 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' memory: query_prompt_template: '' role_prefix: assistant: '' user: '' window: enabled: false size: 50 model: completion_params: max_tokens: 8192 temperature: 0.7 mode: chat name: claude-3-5-sonnet-20240620 provider: anthropic prompt_template: - id: 188f7130-1cfb-48bd-ac77-2acdd27a034c role: system text: "You are an expert writing coach tasked with providing detailed strategies\ \ for writing in a specific tone. Your goal is to offer concrete, actionable\ \ advice that goes beyond general concepts, tailored to both the given\ \ tone and the original text provided.\n\nFirst, carefully read and analyze\ \ the following original text:\n\n\n{{#1725491755881.text#}}\n\ \n\nNow, consider the following specific tone:\n\n\ \n{{#1725491707948.tone#}}\n\n\nBased on this tone and the\ \ original text, please provide the following:\n\n1. Generate at least\ \ 5 specific writing strategies that are unique to this tone and relevant\ \ to the original text. These strategies should be detailed and actionable,\ \ avoiding vague concepts. Instead, provide specific techniques, sentence\ \ structures, word choices, or rhetorical devices that are characteristic\ \ of the given tone and would improve the original text.\n\n2. List 10\ \ commonly used phrases or expressions that are typical of this tone and\ \ could be incorporated into the original text. These should be specific\ \ examples that a writer could use to enhance the desired tone.\n\n3.\ \ Provide at least 3 concrete examples of sentences or short paragraphs\ \ from the original text, rewritten in the specified tone. These examples\ \ should clearly demonstrate the strategies and phrases you've mentioned,\ \ showing how the original text could be improved to better match the\ \ desired tone.\n\nPresent your detailed writing strategies, commonly\ \ used phrases, and concrete examples within tags. Ensure\ \ that your advice is specific, actionable, and clearly demonstrates how\ \ to adapt the original text to the unique characteristics of the given\ \ tone.\n\nYour response should follow this structure:\n\n\ Strategies:\n1. [Strategy 1]\n2. [Strategy 2]\n3. [Strategy 3]\n4. [Strategy\ \ 4]\n5. [Strategy 5]\n\nCommonly Used Phrases:\n1. [Phrase 1]\n2. [Phrase\ \ 2]\n...\n10. [Phrase 10]\n\nRewritten Examples:\n1. Original: [Original\ \ sentence or paragraph]\n Rewritten: [Sentence or paragraph rewritten\ \ in the specified tone]\n\n2. Original: [Original sentence or paragraph]\n\ \ Rewritten: [Sentence or paragraph rewritten in the specified tone]\n\ \n3. Original: [Original sentence or paragraph]\n Rewritten: [Sentence\ \ or paragraph rewritten in the specified tone]\n\n\n\ Remember to tailor your advice specifically to improving the original\ \ text in the direction of the specified tone." selected: false title: Basic strategy type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '1725492221199' position: x: -89.90273663479309 y: 375.43229588766866 positionAbsolute: x: -89.90273663479309 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: context: enabled: false variable_selector: [] desc: '' memory: role_prefix: assistant: '' user: '' window: enabled: false size: 10 model: completion_params: temperature: 0.7 mode: chat name: claude-3-5-sonnet-20240620 provider: anthropic prompt_template: - id: 0efac3dc-daf5-43e1-bde6-5077774d2931 role: system text: "You are tasked with rewriting a given text to make it more academic\ \ and scientific in tone. You will be provided with an output strategy\ \ and the original text. Your goal is to apply the strategy to transform\ \ the text while maintaining its core meaning and key information.\n\n\ First, review the output strategy:\n\n{{#1725492221199.text#}}\n\ \n\nNow, here is the original text that needs to be\ \ rewritten:\n\n{{#1725491755881.text#}}\n\n\ \nTo rewrite the text:\n1. Present your rewritten text within \ \ tags. \n2. Rewrite the whole article without any other explanations.\n\ 3. Strictly follow the above" selected: false title: Style rewriting type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '17254926745700' position: x: 543.2951376960599 y: 239.4225602105007 positionAbsolute: x: 543.2951376960599 y: 239.4225602105007 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: answer: '⚡️ Bibibi...Exploring the strategy of rewriting the original text.. 🛸 📖 Give me 15 seconds to digest the original content and write down the strategy... 👀 --- ## My Basic Stratgey for Full-text Rewriting: {{#1725492221199.text#}} --- ' desc: '' selected: false title: Placeholder buffer - 1 type: answer variables: [] height: 203 id: '1725493735888' position: x: 214.0972633652069 y: 375.43229588766866 positionAbsolute: x: 214.0972633652069 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: author: Lyson Ober desc: '' height: 140 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 1:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"We use the very useful JinaReader tool in Dify to directly convert the Link into LLM-Friendly Input","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 140 id: '1725494054729' position: x: -396.7704599288535 y: 217.68295383801438 positionAbsolute: x: -396.7704599288535 y: 217.68295383801438 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Lyson Ober desc: '' height: 259 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 2:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Generate a complete Rewriting strategy for the subsequent \"Style Rewriting\" node''s full-text rewriting strategy. It will not only provide the phrases that should be used under the tone selected in the Start step, but also provide example sentences to guide the generation of more accurate text in the subsequent steps.","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 241 height: 259 id: '1725494098985' position: x: -89.90273663479309 y: 101.5542010251107 positionAbsolute: x: -89.90273663479309 y: 101.5542010251107 selected: false sourcePosition: right targetPosition: left type: custom-note width: 241 - data: author: Lyson Ober desc: '' height: 180 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 3:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Don''t forget to add an interesting \"Reply Placeholder Buffer\" after the LLM Node, especially when the generation time is longer, as this can reduce the unease and anxiety caused by waiting","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 180 id: '1725494233341' position: x: 214.0972633652069 y: 178.43546369825984 positionAbsolute: x: 214.0972633652069 y: 178.43546369825984 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: Lyson Ober desc: '' height: 515 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 0:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Hi everyone, I''m","type":"text","version":1},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"「Lyson Ober」","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"link","version":1,"rel":"noreferrer","target":null,"title":null,"url":"https://x.com/lyson_ober"},{"detail":0,"format":0,"mode":"normal","style":"","text":", using this Simple URL-to-cross-platform copywriting, you can use it to help you learn Dify''s Parallel Execution of Nodes in the simplest and most direct way.","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"🙏 Thank you to my friend","type":"text","version":1},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"「Evan」","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"link","version":1,"rel":"noreferrer","target":null,"title":null,"url":"https://x.com/XchenEvan"},{"detail":0,"format":0,"mode":"normal","style":"","text":"for helping review and polish the DSL file.","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"☝️ For example, you can directly experience an N times increase in generation speed! ","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"🤩 Let''s take a look together ~","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"---","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Demo Video Link: https://dify101.com/market/url-to-cross-platform-copywriting","type":"text","version":1},{"type":"linebreak","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"---","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"You need:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"JInaReader API KEY","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"listitem","version":1,"value":1},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"TEXT2IMAGE Node API KEY (getimg.ai)","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"listitem","version":1,"value":2},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"LLM KEY (E.g., Claude)","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"listitem","version":1,"value":3}],"direction":"ltr","format":"","indent":0,"type":"list","version":1,"listType":"bullet","start":1,"tag":"ul"},{"children":[],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"---","type":"text","version":1}],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"type":"linebreak","version":1},{"detail":0,"format":0,"mode":"normal","style":"","text":"📱 X(Twitter): https://x.com/lyson_ober","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📺 Youtube: https://www.youtube.com/@lysonober","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📖 Dify101: https://dify101.com/","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 245 height: 515 id: '1725494298000' position: x: -700.8602234963607 y: 511.4400447867939 positionAbsolute: x: -700.8602234963607 y: 511.4400447867939 selected: true sourcePosition: right targetPosition: left type: custom-note width: 245 - data: author: Lyson Ober desc: '' height: 248 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 4:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[],"direction":null,"format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Parallel generation of copywriting, I have chosen to put the faster generation in front, and the longer generated text in the backStep 4:\r\rParallel generation of copywriting, I have chosen to put the faster generation in front, and the longer generated text in the back","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 242 height: 248 id: '1725494542855' position: x: 543.2951376960599 y: -22.761271971982964 positionAbsolute: x: 543.2951376960599 y: -22.761271971982964 selected: false sourcePosition: right targetPosition: left type: custom-note width: 242 - data: author: Lyson Ober desc: '' height: 92 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 5:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"The final integrated copy ~","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 92 id: '1725494585314' position: x: 943.169157018426 y: 251.99338302599892 positionAbsolute: x: 943.169157018426 y: 251.99338302599892 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: code: "import re\n\ndef main(arg1: str) -> dict:\n start_tag = \"\"\ \n end_tag = \"\"\n \n start_index = arg1.index(start_tag)\ \ + len(start_tag)\n end_index = arg1.index(end_tag)\n \n twitter_thread_content\ \ = arg1[start_index:end_index].strip()\n \n tweet_pattern = r'(.*?)'\n tweets = re.findall(tweet_pattern, twitter_thread_content,\ \ re.DOTALL)\n \n result = [tweet.strip() for tweet in tweets]\n \ \ \n return {\"result\": result}" code_language: python3 desc: '' outputs: result: children: null type: array[string] selected: false title: Tweet extraction type: code variables: - value_selector: - '17254918390740' - text variable: arg1 height: 54 id: '1725494974678' position: x: 1839.797448663658 y: 375.43229588766866 positionAbsolute: x: 1839.797448663658 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' height: 438 iterator_selector: - '1725494974678' - result output_selector: - '1725495571606' - text output_type: array[string] selected: false start_node_id: 1725495329493start title: Iteration type: iteration width: 1381.9565735078072 height: 438 id: '1725495329493' position: x: 2134.669093500347 y: 375.43229588766866 positionAbsolute: x: 2134.669093500347 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 1382 zIndex: 1 - data: desc: '' isInIteration: true selected: false title: '' type: iteration-start draggable: false height: 44 id: 1725495329493start parentId: '1725495329493' position: x: 24 y: 68 positionAbsolute: x: 2158.669093500347 y: 443.43229588766866 selectable: false sourcePosition: right targetPosition: left type: custom-iteration-start width: 44 zIndex: 1002 - data: desc: '' isInIteration: true iteration_id: '1725495329493' provider_id: getimgai provider_name: getimgai provider_type: builtin selected: false title: text2image tool_configurations: aspect_ratio: '7:4' height: null mode: essential-v2 model: null negative_prompt: null output_format: png prompt_2: null response_format: url steps: null style: anime width: null tool_label: text2image tool_name: text2image tool_parameters: prompt: type: mixed value: '{{#1725495582624.text#}}' type: tool height: 350 id: '1725495571606' parentId: '1725495329493' position: x: 425.29184639462346 y: 66.16510851830685 positionAbsolute: x: 2559.9609398949706 y: 441.5974044059755 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: context: enabled: false variable_selector: [] desc: '' isInIteration: true iteration_id: '1725495329493' memory: query_prompt_template: '' role_prefix: assistant: '' user: '' window: enabled: false size: 50 model: completion_params: temperature: 0.7 mode: chat name: gpt-4o provider: openai prompt_template: - id: cfbf90a8-f765-4126-b65c-3486f56df31d role: system text: 'You are tasked with creating a brief text-to-image prompt based on an input text. Your goal is to generate a vivid and concise image description that captures the essence of the text while incorporating specific visual elements. Here is the input text to base your image description on: {{#1725495329493.item#}} Your task is to create an image description that includes the following elements: 1. Lighting effects 2. Environmental details 3. Overall style When crafting your description, follow these guidelines: 1. Keep the description concise, ideally within 2-3 sentences. 2. Focus on the most important visual elements from the input text. 3. Use vivid and descriptive language to create a clear mental image. 4. Incorporate the specified style seamlessly into the description. 5. Ensure that lighting effects, environmental details, and overall style are clearly addressed. Please provide your image description within tags. Your description should be ready to use as a prompt for a text-to-image AI system.' selected: false title: Image Text Generation type: llm variables: [] vision: configs: detail: high enabled: true height: 98 id: '1725495582624' parentId: '1725495329493' position: x: 136.41897130797815 y: 65 positionAbsolute: x: 2271.0880648083253 y: 440.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: answer: '--- ⚡️ Bibibi...Striving to generate images for every Tweet... 👇 You can first look at the original image {{#1725496321173.result#}} --- ' desc: '' selected: false title: Placeholder buffer - 2 type: answer variables: [] height: 155 id: '1725495972272' position: x: 1548.8032593941275 y: 375.43229588766866 positionAbsolute: x: 1548.8032593941275 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: code: "import json\n\ndef main(arg1: str) -> dict:\n # Parse the JSON string\n\ \ data = json.loads(arg1)\n \n # Extract the images dictionary\n\ \ images = data['data']['images']\n \n # Create Markdown formatted\ \ output\n result = []\n for image_name, image_url in images.items():\n\ \ markdown_line = f\"[{image_name}]({image_url})\"\n result.append(markdown_line)\n\ \ \n # Join the Markdown lines with newline characters\n markdown_output\ \ = \"\\n\".join(result)\n \n return {\"result\": markdown_output}" code_language: python3 desc: '' outputs: result: children: null type: string selected: false title: Image URL extraction type: code variables: - value_selector: - '1725491755881' - text variable: arg1 height: 54 id: '1725496321173' position: x: 1233.5700507638262 y: 375.43229588766866 positionAbsolute: x: 1233.5700507638262 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: author: Lyson Ober desc: '' height: 203 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 STEP 7:","type":"text","version":1}],"direction":"ltr","format":"start","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"The TEXT2IMAGE is used to generate images for each TWEET. You can delete them, they are optional, and are provided here only as a teaching case.","type":"text","version":1}],"direction":"ltr","format":"start","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[],"direction":"ltr","format":"start","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Additionally, if after filling in the KEY you are prompted with \"Failed to invoke tool: 402 Client Error: Payment Required for url: https://api.getimg.ai/v1/essential-v2/text-to-image\", it means your TEXT2IMAGE account does not have a payment method provided.","type":"text","version":1}],"direction":"ltr","format":"start","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: yellow title: '' type: '' width: 531 height: 203 id: '1725497290516' position: x: 1548.8032593941275 y: 140.36727376229896 positionAbsolute: x: 1548.8032593941275 y: 140.36727376229896 selected: false sourcePosition: right targetPosition: left type: custom-note width: 531 - data: author: Lyson Ober desc: '' height: 167 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 Step 6:","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0},{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Extract the final Image URL organized in JinaReader, and output all images in Markdown format, for the convenience of subsequent operations.","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 167 id: '1725497375571' position: x: 1233.5700507638262 y: 178.43546369825984 positionAbsolute: x: 1233.5700507638262 y: 178.43546369825984 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: assigned_variable_selector: - conversation - image_url desc: '' input_variable_selector: - '1726045053985' - url isInIteration: true iteration_id: '1725495329493' selected: false title: Variable Assigner type: assigner write_mode: append height: 132 id: '1726043526969' parentId: '1725495329493' position: x: 1121.9565735078072 y: 65 positionAbsolute: x: 3256.6256670081543 y: 440.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: answer: ' ## Images {{#1726043917944.output#}}' desc: '' selected: false title: Images type: answer variables: [] height: 107 id: '1726043850335' position: x: 3875.063610368256 y: 375.43229588766866 positionAbsolute: x: 3875.063610368256 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: desc: '' selected: false template: '{{ arg1 }}' title: Modify type: template-transform variables: - value_selector: - conversation - image_url variable: arg1 height: 54 id: '1726043917944' position: x: 3581.3441405257995 y: 375.43229588766866 positionAbsolute: x: 3581.3441405257995 y: 375.43229588766866 selected: false sourcePosition: right targetPosition: left type: custom width: 244 - data: author: lysonober desc: '' height: 136 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Please note: There may be some Rates API_KEY limits, you can choose to use different models or multiple keys in parallel","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 136 id: '1726044053525' position: x: 548.1185817596496 y: 767.242002979766 positionAbsolute: x: 548.1185817596496 y: 767.242002979766 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: lysonober desc: '' height: 157 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"🤔 Why do we need the Template Node? Because Reply cannot directly reply to Conversation Variables of type Array[String]","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 157 id: '1726045003501' position: x: 3581.3441405257995 y: 475.0045785975044 positionAbsolute: x: 3581.3441405257995 y: 475.0045785975044 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 - data: code: "def main(arg1: str) -> dict:\n # 查找 \"url\": 后面的内容\n start_index\ \ = arg1.find('\"url\": \"') + 8\n if start_index == 7: # 如果没找到 \"url\"\ : \n return {\"error\": \"URL not found in input\"}\n \n #\ \ 从 \"url\": 后面开始查找结束的引号\n end_index = arg1.find('\"', start_index)\n\ \ if end_index == -1:\n return {\"error\": \"Invalid URL format\"\ }\n \n # 提取URL\n url = arg1[start_index:end_index]\n \n return\ \ {\"url\": url}" code_language: python3 desc: '' isInIteration: true iteration_id: '1725495329493' outputs: url: children: null type: string selected: false title: URL extract type: code variables: - value_selector: - '1725495571606' - text variable: arg1 height: 54 id: '1726045053985' parentId: '1725495329493' position: x: 783.7845955282314 y: 66.15672660544169 positionAbsolute: x: 2918.4536890285785 y: 441.58902249311035 selected: false sourcePosition: right targetPosition: left type: custom width: 244 zIndex: 1002 - data: author: lysonober desc: '' height: 88 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"👇 Remember to authorize it","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: blue title: '' type: '' width: 240 height: 88 id: '1726045563380' position: x: 2560.409166409681 y: 252.5314885578114 positionAbsolute: x: 2560.409166409681 y: 252.5314885578114 sourcePosition: right targetPosition: left type: custom-note width: 240 - data: author: lysonober desc: '' height: 201 selected: false showAuthor: true text: '{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"📌 A small tip: Click on “Features” in the top right corner -> Enable the “Conversation Starter” function -> Enter the English text “When you’re ready, click the Start button below 👇”, then set the default response to just “Start”. This way, it will appear similar to a “Start button”.","type":"text","version":1}],"direction":"ltr","format":"","indent":0,"type":"paragraph","version":1,"textFormat":0}],"direction":"ltr","format":"","indent":0,"type":"root","version":1}}' theme: yellow title: '' type: '' width: 240 height: 201 id: '1726045584771' position: x: -700.8602234963607 y: 146.3326653753984 positionAbsolute: x: -700.8602234963607 y: 146.3326653753984 selected: false sourcePosition: right targetPosition: left type: custom-note width: 240 viewport: x: -3381.7799759834716 y: -266.50799234024817 zoom: 1.1422232687729554