@aicopycoders/exodus 2026.7.200-beta.3 → 2026.7.200-beta.5

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.
@@ -0,0 +1,6 @@
1
+ export declare const BRAND_IMAGE_MAX_BYTES: number;
2
+ export interface SniffedImageType {
3
+ ext: "png" | "jpg" | "webp";
4
+ mime: "image/png" | "image/jpeg" | "image/webp";
5
+ }
6
+ export declare function sniffImageType(buf: Uint8Array): SniffedImageType | null;
@@ -0,0 +1,18 @@
1
+ export const BRAND_IMAGE_MAX_BYTES = 15 * 1024 * 1024;
2
+ export function sniffImageType(buf) {
3
+ if (buf.length >= 8) {
4
+ const png = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
5
+ if (png.every((b, i) => buf[i] === b)) {
6
+ return { ext: "png", mime: "image/png" };
7
+ }
8
+ }
9
+ if (buf.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff) {
10
+ return { ext: "jpg", mime: "image/jpeg" };
11
+ }
12
+ if (buf.length >= 12 &&
13
+ buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 &&
14
+ buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50) {
15
+ return { ext: "webp", mime: "image/webp" };
16
+ }
17
+ return null;
18
+ }
@@ -1,4 +1,4 @@
1
- export declare const AD_TYPES: readonly ["before-after", "native-news", "testimonial", "bold", "meme", "screenshot", "hero", "holding-sign", "handwritten", "comment", "breaking-news", "lofi", "comparison", "infographic", "headline", "collage", "product-breakdown", "scientific", "animation", "founder-note", "carousel", "statistics", "post-it-notes", "happy-avatar", "problem-solution", "writing-on-body", "multi-testimonial", "receipt", "step-by-step", "sale-promotional-offer", "cost-of-inaction", "ugc", "quiz-interactive", "action-figure", "at-home-routine", "billboard", "black-and-white", "blurred", "choose", "cutout", "drawing", "facetime", "marker", "notes", "photo", "quadrant", "search", "thumbnail", "xray", "zoom-bubble"];
1
+ export declare const AD_TYPES: readonly ["before-after", "native-news", "testimonial", "bold", "meme", "screenshot", "hero", "holding-sign", "handwritten", "comment", "breaking-news", "lofi", "comparison", "infographic", "headline", "collage", "product-breakdown", "scientific", "animation", "founder-note", "carousel", "statistics", "post-it-notes", "happy-avatar", "problem-solution", "writing-on-body", "multi-testimonial", "receipt", "step-by-step", "sale-promotional-offer", "cost-of-inaction", "ugc", "quiz-interactive", "action-figure", "at-home-routine", "billboard", "black-and-white", "blurred", "choose", "cutout", "drawing", "facetime", "marker", "notes", "photo", "quadrant", "search", "thumbnail", "xray", "zoom-bubble", "advice-cacophony", "annotated-testimonial", "body-morph", "body-portal", "bundle-showcase", "clay-world", "colossus-product", "cost-receipt", "cultural-icon-dressup", "effect-field", "fine-art-intervention", "flavor-story", "giant-tiny", "half-face-reveal", "hero-vs-villain", "horror-illustration", "horror-object-interior", "illustrated-cutaway", "impossible-physics", "ingredient-warrior", "lifestyle-colorway-array", "material-state", "mirror-reveal", "object-launch", "organ-buddy", "polaroid-sticky", "pop-art-comic", "product-as-body", "product-as-hero", "retro-game-screen", "sequential-state-strip", "sketch-equation", "spotlight-hero", "stat-surround-flatlay", "stat-surround-hero", "street-find", "street-poster", "stuffed-container", "surrogate-character", "symbol-swap", "symptom-collage", "threat-map", "tiny-universe", "tiny-world", "toxic-assemblage", "toxic-emanation", "trophy-moment", "villain-pour", "vintage-reframe", "whiteboard", "zipper-reveal"];
2
2
  export type AdType = (typeof AD_TYPES)[number];
3
3
  export declare const AD_TYPE_NAMES: Record<AdType, string>;
4
4
  export declare const REPTILE_TRIGGERS: readonly ["ultra-real", "bizarre", "voyeur", "suffering", "gory", "sexual", "primal-fear", "odd-contrast", "inside-joke", "time-warp", "victory-lap", "selfie", "uncanny-objects"];
@@ -49,6 +49,57 @@ export const AD_TYPES = [
49
49
  "thumbnail",
50
50
  "xray",
51
51
  "zoom-bubble",
52
+ "advice-cacophony",
53
+ "annotated-testimonial",
54
+ "body-morph",
55
+ "body-portal",
56
+ "bundle-showcase",
57
+ "clay-world",
58
+ "colossus-product",
59
+ "cost-receipt",
60
+ "cultural-icon-dressup",
61
+ "effect-field",
62
+ "fine-art-intervention",
63
+ "flavor-story",
64
+ "giant-tiny",
65
+ "half-face-reveal",
66
+ "hero-vs-villain",
67
+ "horror-illustration",
68
+ "horror-object-interior",
69
+ "illustrated-cutaway",
70
+ "impossible-physics",
71
+ "ingredient-warrior",
72
+ "lifestyle-colorway-array",
73
+ "material-state",
74
+ "mirror-reveal",
75
+ "object-launch",
76
+ "organ-buddy",
77
+ "polaroid-sticky",
78
+ "pop-art-comic",
79
+ "product-as-body",
80
+ "product-as-hero",
81
+ "retro-game-screen",
82
+ "sequential-state-strip",
83
+ "sketch-equation",
84
+ "spotlight-hero",
85
+ "stat-surround-flatlay",
86
+ "stat-surround-hero",
87
+ "street-find",
88
+ "street-poster",
89
+ "stuffed-container",
90
+ "surrogate-character",
91
+ "symbol-swap",
92
+ "symptom-collage",
93
+ "threat-map",
94
+ "tiny-universe",
95
+ "tiny-world",
96
+ "toxic-assemblage",
97
+ "toxic-emanation",
98
+ "trophy-moment",
99
+ "villain-pour",
100
+ "vintage-reframe",
101
+ "whiteboard",
102
+ "zipper-reveal",
52
103
  ];
53
104
  export const AD_TYPE_NAMES = {
54
105
  "before-after": "Before / After",
@@ -101,6 +152,57 @@ export const AD_TYPE_NAMES = {
101
152
  thumbnail: "Thumbnail",
102
153
  xray: "X-ray",
103
154
  "zoom-bubble": "Zoom Bubble",
155
+ "advice-cacophony": "Advice Cacophony",
156
+ "annotated-testimonial": "Highlighted / Annotated Testimonial",
157
+ "body-morph": "Body Morph",
158
+ "body-portal": "Body Portal",
159
+ "bundle-showcase": "Bundle Showcase + Benefit Bar",
160
+ "clay-world": "Clay World",
161
+ "colossus-product": "Colossus Product",
162
+ "cost-receipt": "Cost Receipt",
163
+ "cultural-icon-dressup": "Cultural Icon Dress-Up",
164
+ "effect-field": "Effect Field",
165
+ "fine-art-intervention": "Fine Art Intervention",
166
+ "flavor-story": "Flavor Story / Tastes Like",
167
+ "giant-tiny": "Giant / Tiny",
168
+ "half-face-reveal": "Half-Face Reveal",
169
+ "hero-vs-villain": "Hero vs Villain",
170
+ "horror-illustration": "Horror Illustration",
171
+ "horror-object-interior": "Horror Object Interior",
172
+ "illustrated-cutaway": "Illustrated Cutaway",
173
+ "impossible-physics": "Impossible Physics",
174
+ "ingredient-warrior": "Ingredient Warrior",
175
+ "lifestyle-colorway-array": "Lifestyle Action + Product Colorway Array",
176
+ "material-state": "Material State",
177
+ "mirror-reveal": "Mirror Reveal",
178
+ "object-launch": "Object Launch",
179
+ "organ-buddy": "Organ Buddy",
180
+ "polaroid-sticky": "Polaroid + Sticky",
181
+ "pop-art-comic": "Pop Art / Comic",
182
+ "product-as-body": "Product as Body",
183
+ "product-as-hero": "Product as Hero",
184
+ "retro-game-screen": "Retro Game Screen",
185
+ "sequential-state-strip": "Sequential State Strip",
186
+ "sketch-equation": "Sketch Equation",
187
+ "spotlight-hero": "Spotlight Hero",
188
+ "stat-surround-flatlay": "Stat Surround / Callout Radial (Lifestyle Flatlay)",
189
+ "stat-surround-hero": "Stat Surround / Callout Radial (Product Hero)",
190
+ "street-find": "Street Find",
191
+ "street-poster": "Street Poster",
192
+ "stuffed-container": "Stuffed Container",
193
+ "surrogate-character": "Surrogate Character",
194
+ "symbol-swap": "Symbol Swap",
195
+ "symptom-collage": "Symptom Collage",
196
+ "threat-map": "Threat Map",
197
+ "tiny-universe": "Tiny Universe",
198
+ "tiny-world": "Tiny World",
199
+ "toxic-assemblage": "Toxic Assemblage",
200
+ "toxic-emanation": "Toxic Emanation",
201
+ "trophy-moment": "Trophy Moment",
202
+ "villain-pour": "Villain Pour",
203
+ "vintage-reframe": "Vintage Reframe",
204
+ "whiteboard": "Whiteboard",
205
+ "zipper-reveal": "Zipper Reveal",
104
206
  };
105
207
  export const REPTILE_TRIGGERS = [
106
208
  "ultra-real",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aicopycoders/exodus",
3
- "version": "2026.7.200-beta.3",
3
+ "version": "2026.7.200-beta.5",
4
4
  "description": "CLI + Claude Code skills for the Copycoders Exodus ad pipeline",
5
5
  "repository": {
6
6
  "type": "git",