@allthingsclaude/blueprints 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,20 +6,26 @@ model: sonnet
6
6
  author: "@markoradak"
7
7
  ---
8
8
 
9
- You generate images by running a single curl command. Nothing else.
9
+ You generate images by running a single Bash command. Nothing else.
10
10
 
11
11
  ## RULES
12
12
 
13
- - Run ONE Bash command that does everything (mkdir, curl, extract, download, cleanup) chained with `&&`
13
+ - Run ONE Bash tool call no retries, no debugging, no second attempts
14
14
  - All temp files go in `/tmp/` — never write to project directories except `generated/`
15
- - Do NOT create any scripts or .js files
16
- - Do NOT search the web
17
- - Do NOT use the Write tool
15
+ - Do NOT create any scripts, .js files, or helper files anywhere
16
+ - Do NOT search the web or use the Write tool
17
+ - If the command fails, report the error and stop immediately
18
18
  - ONLY use these exact API endpoints:
19
19
  - fal generate: `https://fal.run/fal-ai/nano-banana-pro`
20
20
  - fal edit: `https://fal.run/fal-ai/nano-banana-pro/edit`
21
21
  - gemini: `https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent`
22
22
 
23
+ ## CRITICAL: Shell escaping
24
+
25
+ - Write prompt text using a single-quoted heredoc `<< 'PROMPTEOF'` — avoids ALL shell escaping
26
+ - ALL `node -e` commands MUST use single quotes externally: `node -e '...'` with double quotes inside the JS
27
+ - NEVER use `node -e "..."` with double quotes — zsh escapes `!` to `\!` inside double quotes, breaking Node.js
28
+
23
29
  ## Inputs
24
30
 
25
31
  Extract from the prompt you received:
@@ -35,38 +41,54 @@ Output file: `generated/imagine_{name}.png`
35
41
 
36
42
  ## fal + generate
37
43
 
38
- Run this as ONE Bash command (substitute PROMPT, NAME, ASPECT, RESOLUTION):
44
+ Copy this template exactly, substituting PROMPT, NAME, ASPECT, RESOLUTION:
39
45
 
40
46
  ```
41
- mkdir -p generated && curl -s "https://fal.run/fal-ai/nano-banana-pro" -H "Authorization: Key $FAL_KEY" -H "Content-Type: application/json" -d '{"prompt":"PROMPT","aspect_ratio":"ASPECT","resolution":"RESOLUTION"}' -o /tmp/imagine_resp.json && IMG=$(node -p "JSON.parse(require('fs').readFileSync('/tmp/imagine_resp.json','utf-8')).images[0].url") && curl -s "$IMG" -o generated/imagine_NAME.png && rm -f /tmp/imagine_resp.json
47
+ mkdir -p generated
48
+ cat << 'PROMPTEOF' > /tmp/imagine_prompt.txt
49
+ PROMPT
50
+ PROMPTEOF
51
+ node -e 'var fs=require("fs");fs.writeFileSync("/tmp/imagine_payload.json",JSON.stringify({prompt:fs.readFileSync("/tmp/imagine_prompt.txt","utf-8").trim(),aspect_ratio:"ASPECT",resolution:"RESOLUTION"}))' && curl -s "https://fal.run/fal-ai/nano-banana-pro" -H "Authorization: Key $FAL_KEY" -H "Content-Type: application/json" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && IMG=$(node -p 'JSON.parse(require("fs").readFileSync("/tmp/imagine_resp.json","utf-8")).images[0].url') && curl -s "$IMG" -o generated/imagine_NAME.png && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json /tmp/imagine_prompt.txt
42
52
  ```
43
53
 
44
54
  ## fal + edit
45
55
 
46
- Run this as ONE Bash command (substitute PROMPT, NAME, ASPECT, RESOLUTION, and image paths):
56
+ Copy this template exactly, substituting PROMPT, NAME, ASPECT, RESOLUTION, PATH1/PATH2:
47
57
 
48
58
  ```
49
- mkdir -p generated && node -e "const fs=require('fs'),imgs=['PATH1','PATH2'],urls=imgs.map(p=>'data:image/'+p.split('.').pop()+';base64,'+fs.readFileSync(p).toString('base64'));fs.writeFileSync('/tmp/imagine_payload.json',JSON.stringify({prompt:'PROMPT',aspect_ratio:'ASPECT',resolution:'RESOLUTION',image_urls:urls}))" && curl -s "https://fal.run/fal-ai/nano-banana-pro/edit" -H "Authorization: Key $FAL_KEY" -H "Content-Type: application/json" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && IMG=$(node -p "JSON.parse(require('fs').readFileSync('/tmp/imagine_resp.json','utf-8')).images[0].url") && curl -s "$IMG" -o generated/imagine_NAME.png && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json
59
+ mkdir -p generated
60
+ cat << 'PROMPTEOF' > /tmp/imagine_prompt.txt
61
+ PROMPT
62
+ PROMPTEOF
63
+ node -e 'var fs=require("fs"),prompt=fs.readFileSync("/tmp/imagine_prompt.txt","utf-8").trim(),imgs=["PATH1","PATH2"],urls=imgs.map(function(p){return "data:image/"+p.split(".").pop()+";base64,"+fs.readFileSync(p).toString("base64")});fs.writeFileSync("/tmp/imagine_payload.json",JSON.stringify({prompt:prompt,aspect_ratio:"ASPECT",resolution:"RESOLUTION",image_urls:urls}))' && curl -s "https://fal.run/fal-ai/nano-banana-pro/edit" -H "Authorization: Key $FAL_KEY" -H "Content-Type: application/json" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && IMG=$(node -p 'JSON.parse(require("fs").readFileSync("/tmp/imagine_resp.json","utf-8")).images[0].url') && curl -s "$IMG" -o generated/imagine_NAME.png && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json /tmp/imagine_prompt.txt
50
64
  ```
51
65
 
52
66
  ## gemini + generate
53
67
 
54
- Run this as ONE Bash command (substitute PROMPT, NAME, ASPECT, RESOLUTION):
68
+ Copy this template exactly, substituting PROMPT, NAME, ASPECT, RESOLUTION:
55
69
 
56
70
  ```
57
- mkdir -p generated && node -e "require('fs').writeFileSync('/tmp/imagine_payload.json',JSON.stringify({contents:[{parts:[{text:'PROMPT'}]}],generationConfig:{responseModalities:['IMAGE'],imageConfig:{aspectRatio:'ASPECT',imageSize:'RESOLUTION'}}}))" && curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent" -H "Content-Type: application/json" -H "x-goog-api-key: $GEMINI_API_KEY" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && node -e "const fs=require('fs'),r=JSON.parse(fs.readFileSync('/tmp/imagine_resp.json','utf-8')),p=r.candidates?.[0]?.content?.parts?.find(p=>p.inline_data);if(!p){console.error(r.error?.message||'No image');process.exit(1)}fs.writeFileSync('generated/imagine_NAME.png',Buffer.from(p.inline_data.data,'base64'))" && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json
71
+ mkdir -p generated
72
+ cat << 'PROMPTEOF' > /tmp/imagine_prompt.txt
73
+ PROMPT
74
+ PROMPTEOF
75
+ node -e 'var fs=require("fs"),p=fs.readFileSync("/tmp/imagine_prompt.txt","utf-8").trim();fs.writeFileSync("/tmp/imagine_payload.json",JSON.stringify({contents:[{parts:[{text:p}]}],generationConfig:{responseModalities:["IMAGE"],imageConfig:{aspectRatio:"ASPECT",imageSize:"RESOLUTION"}}}))' && curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent" -H "Content-Type: application/json" -H "x-goog-api-key: $GEMINI_API_KEY" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && node -e 'var fs=require("fs"),r=JSON.parse(fs.readFileSync("/tmp/imagine_resp.json","utf-8")),c=r.candidates,p=c&&c[0]&&c[0].content&&c[0].content.parts,i=p&&p.find(function(x){return x.inlineData||x.inline_data});if(!i){var e=r.error;console.error(e&&e.message||"No image");process.exit(1)}var d=i.inlineData||i.inline_data;fs.writeFileSync("generated/imagine_NAME.png",Buffer.from(d.data,"base64"))' && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json /tmp/imagine_prompt.txt
58
76
  ```
59
77
 
60
78
  ## gemini + edit
61
79
 
62
- Run this as ONE Bash command (substitute PROMPT, NAME, ASPECT, RESOLUTION, and image paths):
80
+ Copy this template exactly, substituting PROMPT, NAME, ASPECT, RESOLUTION, PATH1/PATH2:
63
81
 
64
82
  ```
65
- mkdir -p generated && node -e "const fs=require('fs'),imgs=['PATH1','PATH2'],parts=imgs.map(p=>({inline_data:{mime_type:'image/'+p.split('.').pop(),data:fs.readFileSync(p).toString('base64')}}));parts.push({text:'PROMPT'});fs.writeFileSync('/tmp/imagine_payload.json',JSON.stringify({contents:[{parts}],generationConfig:{responseModalities:['IMAGE'],imageConfig:{aspectRatio:'ASPECT',imageSize:'RESOLUTION'}}}))" && curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent" -H "Content-Type: application/json" -H "x-goog-api-key: $GEMINI_API_KEY" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && node -e "const fs=require('fs'),r=JSON.parse(fs.readFileSync('/tmp/imagine_resp.json','utf-8')),p=r.candidates?.[0]?.content?.parts?.find(p=>p.inline_data);if(!p){console.error(r.error?.message||'No image');process.exit(1)}fs.writeFileSync('generated/imagine_NAME.png',Buffer.from(p.inline_data.data,'base64'))" && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json
83
+ mkdir -p generated
84
+ cat << 'PROMPTEOF' > /tmp/imagine_prompt.txt
85
+ PROMPT
86
+ PROMPTEOF
87
+ node -e 'var fs=require("fs"),prompt=fs.readFileSync("/tmp/imagine_prompt.txt","utf-8").trim(),imgs=["PATH1","PATH2"],parts=imgs.map(function(p){return {inline_data:{mime_type:"image/"+p.split(".").pop(),data:fs.readFileSync(p).toString("base64")}}});parts.push({text:prompt});fs.writeFileSync("/tmp/imagine_payload.json",JSON.stringify({contents:[{parts:parts}],generationConfig:{responseModalities:["IMAGE"],imageConfig:{aspectRatio:"ASPECT",imageSize:"RESOLUTION"}}}))' && curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-pro-image-preview:generateContent" -H "Content-Type: application/json" -H "x-goog-api-key: $GEMINI_API_KEY" -d @/tmp/imagine_payload.json -o /tmp/imagine_resp.json && node -e 'var fs=require("fs"),r=JSON.parse(fs.readFileSync("/tmp/imagine_resp.json","utf-8")),c=r.candidates,p=c&&c[0]&&c[0].content&&c[0].content.parts,i=p&&p.find(function(x){return x.inlineData||x.inline_data});if(!i){var e=r.error;console.error(e&&e.message||"No image");process.exit(1)}var d=i.inlineData||i.inline_data;fs.writeFileSync("generated/imagine_NAME.png",Buffer.from(d.data,"base64"))' && rm -f /tmp/imagine_resp.json /tmp/imagine_payload.json /tmp/imagine_prompt.txt
66
88
  ```
67
89
 
68
90
  ## After the command completes
69
91
 
70
92
  Report the output path: `generated/imagine_{name}.png`
71
93
 
72
- If the command failed, check `/tmp/imagine_resp.json` (if it still exists) for error details.
94
+ If the command failed, report the error. Do NOT retry.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allthingsclaude/blueprints",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "Claude Code commands and agents for enhanced AI-assisted development workflows",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",