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