@nodetool-ai/websocket 0.8.4-a24.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/example-workflows.d.ts +2 -0
  3. package/dist/example-workflows.d.ts.map +1 -1
  4. package/dist/example-workflows.js +16 -4
  5. package/dist/example-workflows.js.map +1 -1
  6. package/dist/examples/nodetool-base/A Campaign Concept from a Brief.json +135 -0
  7. package/dist/examples/nodetool-base/A Gradient Card as PNG.json +128 -0
  8. package/dist/examples/nodetool-base/A Poster in Portrait.json +129 -0
  9. package/dist/examples/nodetool-base/A Repeating Texture Tile.json +129 -0
  10. package/dist/examples/nodetool-base/A Run Button for Any Job.json +152 -0
  11. package/dist/examples/nodetool-base/A Webhook That Answers.json +170 -0
  12. package/dist/examples/nodetool-base/AI Spokesperson.json +328 -0
  13. package/dist/examples/nodetool-base/Action Items from a Meeting Recording.json +198 -0
  14. package/dist/examples/nodetool-base/Ad Copy in Three Registers.json +135 -0
  15. package/dist/examples/nodetool-base/Ad Loop from a Product Photo.json +277 -0
  16. package/dist/examples/nodetool-base/Add Reverb to a Voice.json +125 -0
  17. package/dist/examples/nodetool-base/Album Art from a Mood.json +129 -0
  18. package/dist/examples/nodetool-base/Assemble a UGC Product Video.json +158 -0
  19. package/dist/examples/nodetool-base/Audio To Image.json +184 -0
  20. package/dist/examples/nodetool-base/B-Roll Reel from a Brief.json +339 -0
  21. package/dist/examples/nodetool-base/Batch a List.json +171 -0
  22. package/dist/examples/nodetool-base/Black and White, Hard.json +147 -0
  23. package/dist/examples/nodetool-base/Blog Post to Social Thread.json +135 -0
  24. package/dist/examples/nodetool-base/Blur a Channel.json +205 -0
  25. package/dist/examples/nodetool-base/Blur an Image.json +179 -0
  26. package/dist/examples/nodetool-base/Boost Saturation.json +178 -0
  27. package/dist/examples/nodetool-base/Brand Asset Generator.json +585 -0
  28. package/dist/examples/nodetool-base/Brand a UGC Product Video.json +402 -0
  29. package/dist/examples/nodetool-base/Bring a Still to Life.json +250 -0
  30. package/dist/examples/nodetool-base/Bullet Points to Press Release.json +135 -0
  31. package/dist/examples/nodetool-base/Chapter Markers for a Long Recording.json +198 -0
  32. package/dist/examples/nodetool-base/Chat With Your Documents.json +569 -0
  33. package/dist/examples/nodetool-base/Chunk a Transcript for Indexing.json +202 -0
  34. package/dist/examples/nodetool-base/Circles and Lines.json +126 -0
  35. package/dist/examples/nodetool-base/Clean Up a Rough Voice Recording.json +208 -0
  36. package/dist/examples/nodetool-base/Clip on Kie.json +173 -0
  37. package/dist/examples/nodetool-base/Cold Outreach Co-Pilot.json +423 -0
  38. package/dist/examples/nodetool-base/Color Boost Video.json +250 -0
  39. package/dist/examples/nodetool-base/Compose Directed Campaign Formats.json +764 -0
  40. package/dist/examples/nodetool-base/Concept Art Iteration Board.json +439 -0
  41. package/dist/examples/nodetool-base/Concept Art, Then a Moving Version.json +173 -0
  42. package/dist/examples/nodetool-base/Conditional Logic Engine.json +535 -0
  43. package/dist/examples/nodetool-base/Count a List.json +168 -0
  44. package/dist/examples/nodetool-base/Count to Three with a Loop.json +157 -0
  45. package/dist/examples/nodetool-base/Crop an Image.json +181 -0
  46. package/dist/examples/nodetool-base/Crop then Fit.json +208 -0
  47. package/dist/examples/nodetool-base/Crush It to 8 Bits.json +123 -0
  48. package/dist/examples/nodetool-base/Cut Out the Subject.json +184 -0
  49. package/dist/examples/nodetool-base/Cut a Landscape Clip for Vertical.json +123 -0
  50. package/dist/examples/nodetool-base/Cut a Product Out of Its Background.json +238 -0
  51. package/dist/examples/nodetool-base/Data Generator.json +216 -0
  52. package/dist/examples/nodetool-base/Denoise Footage.json +178 -0
  53. package/dist/examples/nodetool-base/Direct a Short Film.json +305 -0
  54. package/dist/examples/nodetool-base/Directed Film to Timeline.json +385 -0
  55. package/dist/examples/nodetool-base/Does This Text Mention the Deadline.json +130 -0
  56. package/dist/examples/nodetool-base/Draft Answers for an FAQ.json +135 -0
  57. package/dist/examples/nodetool-base/Draw a Badge in SVG.json +126 -0
  58. package/dist/examples/nodetool-base/Drop Duplicates.json +170 -0
  59. package/dist/examples/nodetool-base/Drop the First Few.json +148 -0
  60. package/dist/examples/nodetool-base/Dungeon and Ruins Starter Pack.json +786 -0
  61. package/dist/examples/nodetool-base/Edit a Still with Words.json +284 -0
  62. package/dist/examples/nodetool-base/Editorial Still from a Line.json +197 -0
  63. package/dist/examples/nodetool-base/Emboss a Still.json +120 -0
  64. package/dist/examples/nodetool-base/Every Combination.json +225 -0
  65. package/dist/examples/nodetool-base/Every Hour, On the Hour.json +162 -0
  66. package/dist/examples/nodetool-base/Executive Summary of a Long Document.json +135 -0
  67. package/dist/examples/nodetool-base/Explainer Clip from a Paragraph.json +244 -0
  68. package/dist/examples/nodetool-base/Extract the Claims Worth Checking.json +135 -0
  69. package/dist/examples/nodetool-base/Fade Audio In and Out.json +203 -0
  70. package/dist/examples/nodetool-base/Fade Audio Out.json +202 -0
  71. package/dist/examples/nodetool-base/Fill a Template.json +149 -0
  72. package/dist/examples/nodetool-base/Find Every Number in a Sentence.json +127 -0
  73. package/dist/examples/nodetool-base/Find and Replace.json +224 -0
  74. package/dist/examples/nodetool-base/Find the Edges.json +123 -0
  75. package/dist/examples/nodetool-base/Fit an Image.json +179 -0
  76. package/dist/examples/nodetool-base/Five Headlines for a Landing Page.json +135 -0
  77. package/dist/examples/nodetool-base/Flashcard Generator.json +297 -0
  78. package/dist/examples/nodetool-base/Gate Out the Room Noise.json +124 -0
  79. package/dist/examples/nodetool-base/Generate a Native-Audio UGC Testimonial.json +276 -0
  80. package/dist/examples/nodetool-base/Generate a Silent Bed.json +126 -0
  81. package/dist/examples/nodetool-base/Generate then Upscale a Poster.json +164 -0
  82. package/dist/examples/nodetool-base/Hacker News Agent.json +183 -0
  83. package/dist/examples/nodetool-base/Hook & Thumbnail Factory.json +498 -0
  84. package/dist/examples/nodetool-base/How Long Is This Transcript.json +185 -0
  85. package/dist/examples/nodetool-base/Image Enhance.json +272 -0
  86. package/dist/examples/nodetool-base/Image To Audio Story.json +180 -0
  87. package/dist/examples/nodetool-base/Image to Video Animation.json +346 -0
  88. package/dist/examples/nodetool-base/Inspect a Clip's Audio.json +187 -0
  89. package/dist/examples/nodetool-base/Inspect a Clip.json +163 -0
  90. package/dist/examples/nodetool-base/Invert a Still.json +120 -0
  91. package/dist/examples/nodetool-base/Keep Only the Long Lines.json +220 -0
  92. package/dist/examples/nodetool-base/Keep Only the Matches.json +148 -0
  93. package/dist/examples/nodetool-base/Key Out a Green Screen.json +124 -0
  94. package/dist/examples/nodetool-base/Last One Wins.json +144 -0
  95. package/dist/examples/nodetool-base/Lip-sync a Clip to a Voice Track.json +313 -0
  96. package/dist/examples/nodetool-base/Localise a Product Listing.json +135 -0
  97. package/dist/examples/nodetool-base/Localise a Script and Revoice It.json +242 -0
  98. package/dist/examples/nodetool-base/Localized Explainer.json +430 -0
  99. package/dist/examples/nodetool-base/Low-poly Adventure Starter Pack.json +786 -0
  100. package/dist/examples/nodetool-base/Low-poly Seaside Starter Pack.json +786 -0
  101. package/dist/examples/nodetool-base/Master a Voice Track.json +180 -0
  102. package/dist/examples/nodetool-base/Meeting Transcript Summarizer.json +524 -0
  103. package/dist/examples/nodetool-base/Model Arena.json +550 -0
  104. package/dist/examples/nodetool-base/Moodboard Frame from a Theme.json +129 -0
  105. package/dist/examples/nodetool-base/Movie Posters.json +660 -0
  106. package/dist/examples/nodetool-base/Movie Trailer Generator.json +418 -0
  107. package/dist/examples/nodetool-base/Music Video Visualizer.json +720 -0
  108. package/dist/examples/nodetool-base/Name a File from Its Narration.json +231 -0
  109. package/dist/examples/nodetool-base/Narrate a Script.json +169 -0
  110. package/dist/examples/nodetool-base/Narration with a Music Bed.json +360 -0
  111. package/dist/examples/nodetool-base/Normalize a Clip's Audio.json +201 -0
  112. package/dist/examples/nodetool-base/One Tagline, Six Markets.json +135 -0
  113. package/dist/examples/nodetool-base/Pad a Canvas.json +188 -0
  114. package/dist/examples/nodetool-base/Per-SKU Ad Factory.json +511 -0
  115. package/dist/examples/nodetool-base/Photo Enhancement Suite.json +417 -0
  116. package/dist/examples/nodetool-base/Picture in Picture.json +231 -0
  117. package/dist/examples/nodetool-base/Pitch a Voice Up.json +122 -0
  118. package/dist/examples/nodetool-base/Pixelate a Still.json +122 -0
  119. package/dist/examples/nodetool-base/Platformer Playground Starter Pack.json +786 -0
  120. package/dist/examples/nodetool-base/Podcast Episode to Show Notes.json +198 -0
  121. package/dist/examples/nodetool-base/Podcast Repurposing Studio.json +745 -0
  122. package/dist/examples/nodetool-base/Pokemon Maker.json +282 -0
  123. package/dist/examples/nodetool-base/Poster on Kie.json +172 -0
  124. package/dist/examples/nodetool-base/Posterize to Four Bits.json +122 -0
  125. package/dist/examples/nodetool-base/Private Assistant.json +236 -0
  126. package/dist/examples/nodetool-base/Product Mockup Generator.json +608 -0
  127. package/dist/examples/nodetool-base/Product Spot from Text.json +330 -0
  128. package/dist/examples/nodetool-base/Product Video Generator.json +344 -0
  129. package/dist/examples/nodetool-base/Prompt Template.json +221 -0
  130. package/dist/examples/nodetool-base/Propose Three Campaign Directions.json +614 -0
  131. package/dist/examples/nodetool-base/Pull a Field out of JSON Text.json +128 -0
  132. package/dist/examples/nodetool-base/Pull a Still from a Clip.json +179 -0
  133. package/dist/examples/nodetool-base/Pull the Quotable Lines Out of an Interview.json +198 -0
  134. package/dist/examples/nodetool-base/Put a Product on a Studio Backdrop.json +252 -0
  135. package/dist/examples/nodetool-base/Put a Voice Over a Music Bed.json +358 -0
  136. package/dist/examples/nodetool-base/README_EXAMPLES.md +59 -0
  137. package/dist/examples/nodetool-base/Re-delimit a List.json +199 -0
  138. package/dist/examples/nodetool-base/Read a Clip's Frame Rate.json +120 -0
  139. package/dist/examples/nodetool-base/Redact Email Addresses.json +129 -0
  140. package/dist/examples/nodetool-base/Redact and Tidy a Log Line.json +266 -0
  141. package/dist/examples/nodetool-base/Relight a Product for a Seasonal Campaign.json +131 -0
  142. package/dist/examples/nodetool-base/Render a Directed Campaign Hero.json +338 -0
  143. package/dist/examples/nodetool-base/Reopen a Directed Campaign.json +1748 -0
  144. package/dist/examples/nodetool-base/Research Agent.json +231 -0
  145. package/dist/examples/nodetool-base/Research a Brand from Its Website.json +445 -0
  146. package/dist/examples/nodetool-base/Restyle a Photo as an Illustration.json +136 -0
  147. package/dist/examples/nodetool-base/Reverse Audio.json +201 -0
  148. package/dist/examples/nodetool-base/Reverse a Clip.json +176 -0
  149. package/dist/examples/nodetool-base/Revise an Accepted Campaign Hero.json +486 -0
  150. package/dist/examples/nodetool-base/Rewrite This So a Customer Understands It.json +135 -0
  151. package/dist/examples/nodetool-base/Rotate Footage.json +178 -0
  152. package/dist/examples/nodetool-base/SEO Content Engine.json +708 -0
  153. package/dist/examples/nodetool-base/SEO Title and Meta Description.json +135 -0
  154. package/dist/examples/nodetool-base/Sci-fi Game Model Starter Pack.json +693 -0
  155. package/dist/examples/nodetool-base/Sci-fi Outpost Expansion.json +601 -0
  156. package/dist/examples/nodetool-base/Score a Clip from Its Own Mood.json +229 -0
  157. package/dist/examples/nodetool-base/Score a Silent Clip.json +382 -0
  158. package/dist/examples/nodetool-base/Script to Narrated Clip.json +224 -0
  159. package/dist/examples/nodetool-base/Script to Screen.json +940 -0
  160. package/dist/examples/nodetool-base/Sharpen Footage.json +179 -0
  161. package/dist/examples/nodetool-base/Shot List from a Synopsis.json +136 -0
  162. package/dist/examples/nodetool-base/Single Shot from a Line.json +199 -0
  163. package/dist/examples/nodetool-base/Slice Text.json +159 -0
  164. package/dist/examples/nodetool-base/Slow a Clip Without Dropping Pitch.json +122 -0
  165. package/dist/examples/nodetool-base/Soften a Plate.json +178 -0
  166. package/dist/examples/nodetool-base/Solarize a Still.json +122 -0
  167. package/dist/examples/nodetool-base/Speak a Line, Then Trim the Silence.json +157 -0
  168. package/dist/examples/nodetool-base/Spin a Packshot into a Turntable Clip.json +137 -0
  169. package/dist/examples/nodetool-base/Split a Channel.json +178 -0
  170. package/dist/examples/nodetool-base/Split a Log into Records.json +128 -0
  171. package/dist/examples/nodetool-base/Stabilize Handheld.json +179 -0
  172. package/dist/examples/nodetool-base/Still on Replicate.json +172 -0
  173. package/dist/examples/nodetool-base/Subject Lines Worth Testing.json +135 -0
  174. package/dist/examples/nodetool-base/Subtitle Lines from a Script.json +170 -0
  175. package/dist/examples/nodetool-base/Subtitle Text from a Recording.json +198 -0
  176. package/dist/examples/nodetool-base/Summarise a Recorded Call.json +198 -0
  177. package/dist/examples/nodetool-base/Swirl and Echo.json +154 -0
  178. package/dist/examples/nodetool-base/Take While the Numbers Are Small.json +148 -0
  179. package/dist/examples/nodetool-base/Take a Product Shot to Print Resolution.json +209 -0
  180. package/dist/examples/nodetool-base/Take the First Few Seconds of a Bed.json +127 -0
  181. package/dist/examples/nodetool-base/Take the First Few.json +170 -0
  182. package/dist/examples/nodetool-base/Telephone Voice.json +174 -0
  183. package/dist/examples/nodetool-base/Themes Across Customer Feedback.json +135 -0
  184. package/dist/examples/nodetool-base/Three Ratios.json +315 -0
  185. package/dist/examples/nodetool-base/Tidy Up Messy Text.json +199 -0
  186. package/dist/examples/nodetool-base/Top-down Native Asset Pack.json +955 -0
  187. package/dist/examples/nodetool-base/Trailer Beats from a Premise.json +136 -0
  188. package/dist/examples/nodetool-base/Transcribe Audio.json +138 -0
  189. package/dist/examples/nodetool-base/Transcribe a Clip.json +198 -0
  190. package/dist/examples/nodetool-base/Translate Marketing Copy to German.json +135 -0
  191. package/dist/examples/nodetool-base/Translate a Script for Dubbing.json +224 -0
  192. package/dist/examples/nodetool-base/Trim Audio to a Range.json +203 -0
  193. package/dist/examples/nodetool-base/Trim a Blurb to Length.json +128 -0
  194. package/dist/examples/nodetool-base/Trim a Clip.json +180 -0
  195. package/dist/examples/nodetool-base/Turn Research Notes into a Comparison Table.json +136 -0
  196. package/dist/examples/nodetool-base/Turn Specs into Product Copy.json +135 -0
  197. package/dist/examples/nodetool-base/Turn a Changelog into Release Notes.json +135 -0
  198. package/dist/examples/nodetool-base/Turn a Logo into Print-Ready Vector.json +126 -0
  199. package/dist/examples/nodetool-base/Turn a Support Thread into a Bug Report.json +135 -0
  200. package/dist/examples/nodetool-base/Turn a Talk into a Blog Post.json +198 -0
  201. package/dist/examples/nodetool-base/Upscale a Still.json +186 -0
  202. package/dist/examples/nodetool-base/Vectorize a Generated Logo.json +162 -0
  203. package/dist/examples/nodetool-base/Video Restyle Studio.json +281 -0
  204. package/dist/examples/nodetool-base/Vignette a Portrait.json +124 -0
  205. package/dist/examples/nodetool-base/Voice a Script in Two Voices.json +217 -0
  206. package/dist/examples/nodetool-base/Warm Up a Cold Clip.json +124 -0
  207. package/dist/examples/nodetool-base/Watch a Folder, Act on What Lands.json +177 -0
  208. package/dist/examples/nodetool-base/Widen a Mono Voice.json +151 -0
  209. package/dist/examples/nodetool-base/Workflow As A Tool.json +257 -0
  210. package/dist/examples/nodetool-base/Write a Listing from the Product Photo.json +139 -0
  211. package/dist/examples/nodetool-base/Write the Prompt, Then Make the Image.json +200 -0
  212. package/dist/examples/nodetool-base/gallery_thumbnail_generator.ts +384 -0
  213. package/dist/fake-runtime.d.ts.map +1 -1
  214. package/dist/fake-runtime.js +5 -1
  215. package/dist/fake-runtime.js.map +1 -1
  216. package/dist/http-api.d.ts.map +1 -1
  217. package/dist/http-api.js +20 -3
  218. package/dist/http-api.js.map +1 -1
  219. package/dist/lib/openverse.d.ts +47 -0
  220. package/dist/lib/openverse.d.ts.map +1 -0
  221. package/dist/lib/openverse.js +255 -0
  222. package/dist/lib/openverse.js.map +1 -0
  223. package/dist/model-execution-availability.d.ts.map +1 -1
  224. package/dist/model-execution-availability.js +7 -2
  225. package/dist/model-execution-availability.js.map +1 -1
  226. package/dist/screenshot-server.js +87 -49
  227. package/dist/screenshot-server.js.map +1 -1
  228. package/dist/trpc/router.d.ts +2 -0
  229. package/dist/trpc/router.d.ts.map +1 -1
  230. package/dist/trpc/router.js +2 -0
  231. package/dist/trpc/router.js.map +1 -1
  232. package/dist/trpc/routers/games.d.ts +179 -0
  233. package/dist/trpc/routers/games.d.ts.map +1 -1
  234. package/dist/trpc/routers/games.js +1 -1
  235. package/dist/trpc/routers/games.js.map +1 -1
  236. package/dist/trpc/routers/models.d.ts +270 -0
  237. package/dist/trpc/routers/models.d.ts.map +1 -1
  238. package/dist/trpc/routers/models.js +37 -19
  239. package/dist/trpc/routers/models.js.map +1 -1
  240. package/dist/trpc/routers/openverse.d.ts +91 -0
  241. package/dist/trpc/routers/openverse.d.ts.map +1 -0
  242. package/dist/trpc/routers/openverse.js +98 -0
  243. package/dist/trpc/routers/openverse.js.map +1 -0
  244. package/dist/trpc/sandbox-coverage.d.ts.map +1 -1
  245. package/dist/trpc/sandbox-coverage.js +11 -0
  246. package/dist/trpc/sandbox-coverage.js.map +1 -1
  247. package/dist/websocket-client-session.d.ts +8 -0
  248. package/dist/websocket-client-session.d.ts.map +1 -1
  249. package/dist/websocket-client-session.js +31 -1
  250. package/dist/websocket-client-session.js.map +1 -1
  251. package/package.json +27 -28
@@ -0,0 +1,257 @@
1
+ {
2
+ "id": "b098b88d-614a-4f74-8023-57a392fed616",
3
+ "access": "public",
4
+ "created_at": "2026-07-17T09:00:00.000Z",
5
+ "updated_at": "2026-07-17T09:00:00.000Z",
6
+ "name": "Workflow As A Tool",
7
+ "tool_name": null,
8
+ "description": "Composition demo: an orchestrator agent delegates to two specialist sub-agents wired in as callable tools via control edges — Research gathers the facts, Copy Editor polishes the draft, and the manager decides when to call each. Shows how a self-contained unit of work becomes a tool another agent can invoke, all inside one graph.",
9
+ "tags": [
10
+ "agents",
11
+ "composition",
12
+ "tools",
13
+ "orchestration"
14
+ ],
15
+ "thumbnail": null,
16
+ "thumbnail_url": null,
17
+ "graph": {
18
+ "nodes": [
19
+ {
20
+ "id": "comment-intro",
21
+ "parent_id": null,
22
+ "type": "nodetool.workflows.base_node.Comment",
23
+ "data": {
24
+ "comment": "# 🧩 Workflow As A Tool\n\nShows how one agent can call other agents as tools inside a single graph. Use this shape when a manager should decide whether and in what order specialists run, instead of a fixed pipeline.\n\n**How it works:** \"Topic\" fills \"Objective\", which asks for a 250 to 350 word explainer and tells the orchestrator to research, draft, then edit. \"Orchestrator\" receives it as its prompt. Control edges from its __control__ port into \"Tool: Research\" and \"Tool: Copy Editor\" turn those agents into tools it calls by name with a task string. The research agent returns a bulleted fact brief. The copy editor returns a tightened draft. The orchestrator's text goes to \"Final article\". Each agent uses your default language model, or the one you pick on the node.\n\n**Try this:** Change \"Topic\", or edit the orchestrator's system prompt to call only research_specialist and compare the unedited result."
25
+ },
26
+ "ui_properties": {
27
+ "selected": false,
28
+ "position": {
29
+ "x": 0,
30
+ "y": 0
31
+ },
32
+ "zIndex": 0,
33
+ "width": 560,
34
+ "height": 430,
35
+ "selectable": true
36
+ },
37
+ "dynamic_properties": {},
38
+ "dynamic_outputs": {}
39
+ },
40
+ {
41
+ "id": "topic_input",
42
+ "parent_id": null,
43
+ "type": "nodetool.input.StringInput",
44
+ "data": {
45
+ "name": "topic",
46
+ "value": "The economics of home solar batteries",
47
+ "description": "Subject the orchestrator should research and write a short explainer about."
48
+ },
49
+ "ui_properties": {
50
+ "selected": false,
51
+ "title": "1️⃣ Topic",
52
+ "position": {
53
+ "x": 0,
54
+ "y": 782
55
+ },
56
+ "zIndex": 0,
57
+ "width": 280,
58
+ "selectable": true
59
+ },
60
+ "dynamic_properties": {},
61
+ "dynamic_outputs": {}
62
+ },
63
+ {
64
+ "id": "brief",
65
+ "parent_id": null,
66
+ "type": "nodetool.text.Prompt",
67
+ "data": {
68
+ "prompt": "Write a concise, accurate explainer (250-350 words) about the following subject:\n\n{{ topic }}\n\nProcess:\n1. Call the research_specialist tool with a focused question about this subject to gather current facts, figures, and context.\n2. Draft the explainer yourself using those facts. Do not invent numbers — rely on what research returns.\n3. Call the copy_editor tool with your draft to tighten the prose and fix tone.\n4. Return the copy editor's polished version as the final answer, as Markdown."
69
+ },
70
+ "ui_properties": {
71
+ "selected": false,
72
+ "title": "2️⃣ Objective",
73
+ "position": {
74
+ "x": 380,
75
+ "y": 590
76
+ },
77
+ "zIndex": 0,
78
+ "width": 280,
79
+ "selectable": true
80
+ },
81
+ "dynamic_properties": {
82
+ "topic": null
83
+ },
84
+ "dynamic_outputs": {}
85
+ },
86
+ {
87
+ "id": "orchestrator",
88
+ "parent_id": null,
89
+ "type": "nodetool.agents.Agent",
90
+ "data": {
91
+ "model": {
92
+ "type": "language_model",
93
+ "provider": "",
94
+ "id": "",
95
+ "name": "",
96
+ "path": null,
97
+ "supported_tasks": []
98
+ },
99
+ "tools": [],
100
+ "max_tokens": 16000,
101
+ "prompt": "",
102
+ "system": "You are an editorial manager who coordinates specialists rather than doing everything yourself.\n\nYou have two tools, each a specialist agent:\n- research_specialist — give it a single, focused question. It returns facts, figures, and context. Use it before drafting; never invent data.\n- copy_editor — give it a full draft. It returns a tighter, cleaner version. Use it once, on your finished draft.\n\nProcess for every task:\n1. Read the objective and decide what to research.\n2. Call research_specialist with one clear question (pass only the `prompt` argument).\n3. Draft the piece yourself from the returned facts.\n4. Call copy_editor with your draft (pass only the `prompt` argument).\n5. Return the copy editor's polished text verbatim as your final answer.\n\nKeep the final answer in Markdown. Do not describe your tool calls in the answer — just deliver the finished piece."
103
+ },
104
+ "ui_properties": {
105
+ "selected": false,
106
+ "title": "3️⃣ Orchestrator",
107
+ "position": {
108
+ "x": 760,
109
+ "y": 762
110
+ },
111
+ "zIndex": 0,
112
+ "width": 300,
113
+ "selectable": true
114
+ },
115
+ "dynamic_properties": {},
116
+ "dynamic_outputs": {}
117
+ },
118
+ {
119
+ "id": "research_specialist",
120
+ "parent_id": null,
121
+ "type": "nodetool.agents.Agent",
122
+ "data": {
123
+ "model": {
124
+ "type": "language_model",
125
+ "provider": "",
126
+ "id": "",
127
+ "name": "",
128
+ "path": null,
129
+ "supported_tasks": []
130
+ },
131
+ "tools": [],
132
+ "max_tokens": 8000,
133
+ "prompt": "",
134
+ "system": "You are a research specialist. Given a question, return the most relevant facts, figures, comparisons, and context a writer would need — as a compact bulleted brief, not prose. State plainly when something is an estimate or varies by region. Do not write the final article; supply the raw material for it."
135
+ },
136
+ "ui_properties": {
137
+ "selected": false,
138
+ "title": "🔧 Tool: Research",
139
+ "position": {
140
+ "x": 1160,
141
+ "y": 510
142
+ },
143
+ "zIndex": 0,
144
+ "width": 300,
145
+ "selectable": true
146
+ },
147
+ "dynamic_properties": {},
148
+ "dynamic_outputs": {}
149
+ },
150
+ {
151
+ "id": "copy_editor",
152
+ "parent_id": null,
153
+ "type": "nodetool.agents.Agent",
154
+ "data": {
155
+ "model": {
156
+ "type": "language_model",
157
+ "provider": "",
158
+ "id": "",
159
+ "name": "",
160
+ "path": null,
161
+ "supported_tasks": []
162
+ },
163
+ "tools": [],
164
+ "max_tokens": 8000,
165
+ "prompt": "",
166
+ "system": "You are a copy editor. Given a draft, return a polished version: tighten wording, fix grammar and flow, remove hedging and filler, and keep the author's meaning and facts unchanged. Do not add new claims or numbers. Return only the edited text in Markdown, nothing else."
167
+ },
168
+ "ui_properties": {
169
+ "selected": false,
170
+ "title": "🔧 Tool: Copy Editor",
171
+ "position": {
172
+ "x": 1160,
173
+ "y": 773
174
+ },
175
+ "zIndex": 0,
176
+ "width": 300,
177
+ "selectable": true
178
+ },
179
+ "dynamic_properties": {},
180
+ "dynamic_outputs": {}
181
+ },
182
+ {
183
+ "id": "output-article",
184
+ "parent_id": null,
185
+ "type": "nodetool.output.Output",
186
+ "data": {
187
+ "name": "article"
188
+ },
189
+ "ui_properties": {
190
+ "selected": false,
191
+ "title": "4️⃣ Final article",
192
+ "position": {
193
+ "x": 1160,
194
+ "y": 1036
195
+ },
196
+ "zIndex": 0,
197
+ "width": 280,
198
+ "selectable": true
199
+ },
200
+ "dynamic_properties": {},
201
+ "dynamic_outputs": {}
202
+ }
203
+ ],
204
+ "edges": [
205
+ {
206
+ "id": "edge-topic-brief",
207
+ "source": "topic_input",
208
+ "sourceHandle": "output",
209
+ "target": "brief",
210
+ "targetHandle": "topic",
211
+ "ui_properties": null
212
+ },
213
+ {
214
+ "id": "edge-brief-orchestrator",
215
+ "source": "brief",
216
+ "sourceHandle": "output",
217
+ "target": "orchestrator",
218
+ "targetHandle": "prompt",
219
+ "ui_properties": null
220
+ },
221
+ {
222
+ "id": "edge-control-research",
223
+ "source": "orchestrator",
224
+ "sourceHandle": "__control__",
225
+ "target": "research_specialist",
226
+ "targetHandle": "__control__",
227
+ "edge_type": "control",
228
+ "ui_properties": null
229
+ },
230
+ {
231
+ "id": "edge-control-editor",
232
+ "source": "orchestrator",
233
+ "sourceHandle": "__control__",
234
+ "target": "copy_editor",
235
+ "targetHandle": "__control__",
236
+ "edge_type": "control",
237
+ "ui_properties": null
238
+ },
239
+ {
240
+ "id": "edge-orchestrator-output",
241
+ "source": "orchestrator",
242
+ "sourceHandle": "text",
243
+ "target": "output-article",
244
+ "targetHandle": "value",
245
+ "ui_properties": null
246
+ }
247
+ ]
248
+ },
249
+ "input_schema": null,
250
+ "output_schema": null,
251
+ "settings": null,
252
+ "package_name": "nodetool-base",
253
+ "path": null,
254
+ "run_mode": null,
255
+ "required_providers": null,
256
+ "required_models": null
257
+ }
@@ -0,0 +1,139 @@
1
+ {
2
+ "id": "",
3
+ "access": "private",
4
+ "created_at": "2026-07-30T16:00:00.000Z",
5
+ "updated_at": "2026-07-30T16:00:00.000Z",
6
+ "name": "Write a Listing from the Product Photo",
7
+ "tool_name": null,
8
+ "description": "Hand the model the photograph rather than a description of it. Marketplace copy written from the actual image catches details a spec sheet omits — finish, proportion, what it sits next to.",
9
+ "tags": [
10
+ "text",
11
+ "image",
12
+ "example"
13
+ ],
14
+ "thumbnail": null,
15
+ "thumbnail_url": null,
16
+ "graph": {
17
+ "nodes": [
18
+ {
19
+ "id": "intro-comment",
20
+ "type": "nodetool.workflows.base_node.Comment",
21
+ "data": {
22
+ "comment": "# Write a Listing from the Product Photo\n\nWrites a marketplace listing from the product photo itself. Working from the image catches details a spec sheet leaves out, such as finish and proportion.\n\n**How it works:** Drop the photo into \"1 Photo\". \"2 Copywriter\" looks at it and writes a title under 70 characters and a description of about 80 words, without superlatives or invented specs. \"3 Listing\" returns the text.\n\n**Try this:** Pick a vision-capable model on \"2 Copywriter\" and change its prompt to ask for five bullet points instead."
23
+ },
24
+ "ui_properties": {
25
+ "position": {
26
+ "x": 0,
27
+ "y": 0
28
+ },
29
+ "zIndex": 0,
30
+ "width": 560,
31
+ "selectable": true,
32
+ "height": 266
33
+ },
34
+ "dynamic_properties": {},
35
+ "dynamic_outputs": {}
36
+ },
37
+ {
38
+ "id": "in",
39
+ "type": "nodetool.input.ImageInput",
40
+ "data": {
41
+ "name": "photo",
42
+ "value": {
43
+ "type": "image",
44
+ "uri": "package://nodetool-base/recipe-inputs/coffee.jpg"
45
+ },
46
+ "description": "The product photo"
47
+ },
48
+ "ui_properties": {
49
+ "position": {
50
+ "x": 0,
51
+ "y": 370
52
+ },
53
+ "zIndex": 0,
54
+ "width": 300,
55
+ "selectable": true,
56
+ "title": "1 Photo"
57
+ },
58
+ "dynamic_properties": {},
59
+ "dynamic_outputs": {}
60
+ },
61
+ {
62
+ "id": "ag",
63
+ "type": "nodetool.agents.Agent",
64
+ "data": {
65
+ "model": {
66
+ "type": "language_model",
67
+ "provider": "",
68
+ "id": "",
69
+ "name": "",
70
+ "path": null,
71
+ "supported_tasks": []
72
+ },
73
+ "system": "You write marketplace listings. Lead with the concrete: material, size cues, finish. No superlatives, no invented specifications.",
74
+ "prompt": "Write a product title under 70 characters and a description of about 80 words for the product in this image.",
75
+ "tools": [],
76
+ "image": [],
77
+ "audio": [],
78
+ "history": [],
79
+ "thread_id": "",
80
+ "max_tokens": 16384,
81
+ "max_turns": 100
82
+ },
83
+ "ui_properties": {
84
+ "position": {
85
+ "x": 400,
86
+ "y": 346
87
+ },
88
+ "zIndex": 0,
89
+ "width": 300,
90
+ "selectable": true,
91
+ "title": "2 Copywriter"
92
+ },
93
+ "dynamic_properties": {},
94
+ "dynamic_outputs": {}
95
+ },
96
+ {
97
+ "id": "out",
98
+ "type": "nodetool.output.Output",
99
+ "data": {
100
+ "name": "listing"
101
+ },
102
+ "ui_properties": {
103
+ "position": {
104
+ "x": 800,
105
+ "y": 378
106
+ },
107
+ "zIndex": 0,
108
+ "width": 300,
109
+ "selectable": true,
110
+ "title": "3 Listing"
111
+ },
112
+ "dynamic_properties": {},
113
+ "dynamic_outputs": {}
114
+ }
115
+ ],
116
+ "edges": [
117
+ {
118
+ "id": "e1",
119
+ "source": "in",
120
+ "sourceHandle": "output",
121
+ "target": "ag",
122
+ "targetHandle": "image"
123
+ },
124
+ {
125
+ "id": "e2",
126
+ "source": "ag",
127
+ "sourceHandle": "text",
128
+ "target": "out",
129
+ "targetHandle": "value"
130
+ }
131
+ ]
132
+ },
133
+ "input_schema": null,
134
+ "output_schema": null,
135
+ "settings": null,
136
+ "package_name": "nodetool-base",
137
+ "path": null,
138
+ "run_mode": null
139
+ }
@@ -0,0 +1,200 @@
1
+ {
2
+ "id": "",
3
+ "access": "private",
4
+ "created_at": "2026-07-30T16:00:00.000Z",
5
+ "updated_at": "2026-07-30T16:00:00.000Z",
6
+ "name": "Write the Prompt, Then Make the Image",
7
+ "tool_name": null,
8
+ "description": "The model writes its own image prompt from a plain description. Useful when the person with the idea does not want to learn prompt craft — and the intermediate prompt stays visible, so it can be corrected rather than guessed at.",
9
+ "tags": [
10
+ "image",
11
+ "text",
12
+ "example"
13
+ ],
14
+ "thumbnail": null,
15
+ "thumbnail_url": null,
16
+ "graph": {
17
+ "nodes": [
18
+ {
19
+ "id": "intro-comment",
20
+ "type": "nodetool.workflows.base_node.Comment",
21
+ "data": {
22
+ "comment": "# Write the Prompt, Then Make the Image\n\nTurns a plain-language idea into an image prompt, then generates the image. The written prompt stays visible, so you can correct it instead of guessing.\n\n**How it works:** Type the idea into \"1 Idea\". \"2 Write the prompt\" writes one sentence naming subject, lighting, lens and palette. It goes to \"3 Generate\" for a square image and to \"4 Prompt used\", and the picture appears in \"5 Image\".\n\n**Try this:** Pick models on \"2 Write the prompt\" and \"3 Generate\", then change aspect_ratio on \"3 Generate\" to 16:9."
23
+ },
24
+ "ui_properties": {
25
+ "position": {
26
+ "x": 0,
27
+ "y": 0
28
+ },
29
+ "zIndex": 0,
30
+ "width": 560,
31
+ "selectable": true,
32
+ "height": 266
33
+ },
34
+ "dynamic_properties": {},
35
+ "dynamic_outputs": {}
36
+ },
37
+ {
38
+ "id": "in",
39
+ "type": "nodetool.input.StringInput",
40
+ "data": {
41
+ "name": "idea",
42
+ "value": "",
43
+ "description": "The idea, in plain words"
44
+ },
45
+ "ui_properties": {
46
+ "position": {
47
+ "x": 0,
48
+ "y": 463
49
+ },
50
+ "zIndex": 0,
51
+ "width": 300,
52
+ "selectable": true,
53
+ "title": "1 Idea"
54
+ },
55
+ "dynamic_properties": {},
56
+ "dynamic_outputs": {}
57
+ },
58
+ {
59
+ "id": "ag",
60
+ "type": "nodetool.agents.Agent",
61
+ "data": {
62
+ "model": {
63
+ "type": "language_model",
64
+ "provider": "",
65
+ "id": "",
66
+ "name": "",
67
+ "path": null,
68
+ "supported_tasks": []
69
+ },
70
+ "system": "You write prompts for an image generation model. One sentence. Name the subject, the lighting, the lens and the palette. No style-artist names, no quality boilerplate.",
71
+ "prompt": "",
72
+ "tools": [],
73
+ "image": [],
74
+ "audio": [],
75
+ "history": [],
76
+ "thread_id": "",
77
+ "max_tokens": 16384,
78
+ "max_turns": 100
79
+ },
80
+ "ui_properties": {
81
+ "position": {
82
+ "x": 400,
83
+ "y": 444
84
+ },
85
+ "zIndex": 0,
86
+ "width": 300,
87
+ "selectable": true,
88
+ "title": "2 Write the prompt"
89
+ },
90
+ "dynamic_properties": {},
91
+ "dynamic_outputs": {}
92
+ },
93
+ {
94
+ "id": "gen",
95
+ "type": "nodetool.image.TextToImage",
96
+ "data": {
97
+ "model": {
98
+ "type": "image_model",
99
+ "provider": "",
100
+ "id": "",
101
+ "name": "",
102
+ "path": null,
103
+ "supported_tasks": []
104
+ },
105
+ "prompt": "",
106
+ "negative_prompt": "",
107
+ "entities": [],
108
+ "aspect_ratio": "1:1",
109
+ "resolution": "1K"
110
+ },
111
+ "ui_properties": {
112
+ "position": {
113
+ "x": 800,
114
+ "y": 346
115
+ },
116
+ "zIndex": 0,
117
+ "width": 300,
118
+ "selectable": true,
119
+ "title": "3 Generate"
120
+ },
121
+ "dynamic_properties": {},
122
+ "dynamic_outputs": {}
123
+ },
124
+ {
125
+ "id": "op",
126
+ "type": "nodetool.output.Output",
127
+ "data": {
128
+ "name": "prompt_used"
129
+ },
130
+ "ui_properties": {
131
+ "position": {
132
+ "x": 800,
133
+ "y": 572
134
+ },
135
+ "zIndex": 0,
136
+ "width": 300,
137
+ "selectable": true,
138
+ "title": "4 Prompt used"
139
+ },
140
+ "dynamic_properties": {},
141
+ "dynamic_outputs": {}
142
+ },
143
+ {
144
+ "id": "out",
145
+ "type": "nodetool.output.Output",
146
+ "data": {
147
+ "name": "image"
148
+ },
149
+ "ui_properties": {
150
+ "position": {
151
+ "x": 1200,
152
+ "y": 378
153
+ },
154
+ "zIndex": 0,
155
+ "width": 300,
156
+ "selectable": true,
157
+ "title": "5 Image"
158
+ },
159
+ "dynamic_properties": {},
160
+ "dynamic_outputs": {}
161
+ }
162
+ ],
163
+ "edges": [
164
+ {
165
+ "id": "e1",
166
+ "source": "in",
167
+ "sourceHandle": "output",
168
+ "target": "ag",
169
+ "targetHandle": "prompt"
170
+ },
171
+ {
172
+ "id": "e2",
173
+ "source": "ag",
174
+ "sourceHandle": "text",
175
+ "target": "gen",
176
+ "targetHandle": "prompt"
177
+ },
178
+ {
179
+ "id": "e3",
180
+ "source": "ag",
181
+ "sourceHandle": "text",
182
+ "target": "op",
183
+ "targetHandle": "value"
184
+ },
185
+ {
186
+ "id": "e4",
187
+ "source": "gen",
188
+ "sourceHandle": "output",
189
+ "target": "out",
190
+ "targetHandle": "value"
191
+ }
192
+ ]
193
+ },
194
+ "input_schema": null,
195
+ "output_schema": null,
196
+ "settings": null,
197
+ "package_name": "nodetool-base",
198
+ "path": null,
199
+ "run_mode": null
200
+ }