@contractspec/lib.image-gen 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.
- package/dist/browser/docs/generators.docblock.js +36 -0
- package/dist/browser/docs/image-gen.docblock.js +47 -0
- package/dist/browser/generators/image-generator.js +525 -0
- package/dist/browser/generators/index.js +527 -0
- package/dist/browser/generators/prompt-builder.js +93 -0
- package/dist/browser/generators/style-resolver.js +90 -0
- package/dist/browser/i18n/catalogs/en.js +85 -0
- package/dist/browser/i18n/catalogs/es.js +85 -0
- package/dist/browser/i18n/catalogs/fr.js +85 -0
- package/dist/browser/i18n/catalogs/index.js +253 -0
- package/dist/browser/i18n/index.js +309 -0
- package/dist/browser/i18n/keys.js +33 -0
- package/dist/browser/i18n/locale.js +13 -0
- package/dist/browser/i18n/messages.js +265 -0
- package/dist/browser/index.js +623 -0
- package/dist/browser/presets/index.js +99 -0
- package/dist/browser/presets/marketing.js +35 -0
- package/dist/browser/presets/social.js +45 -0
- package/dist/browser/presets/video.js +25 -0
- package/dist/browser/types.js +5 -0
- package/dist/docs/generators.docblock.d.ts +1 -0
- package/dist/docs/generators.docblock.js +37 -0
- package/dist/docs/image-gen.docblock.d.ts +1 -0
- package/dist/docs/image-gen.docblock.js +48 -0
- package/dist/generators/image-generator.d.ts +12 -0
- package/dist/generators/image-generator.js +526 -0
- package/dist/generators/image-generator.test.d.ts +1 -0
- package/dist/generators/index.d.ts +4 -0
- package/dist/generators/index.js +528 -0
- package/dist/generators/prompt-builder.d.ts +21 -0
- package/dist/generators/prompt-builder.js +94 -0
- package/dist/generators/prompt-builder.test.d.ts +1 -0
- package/dist/generators/style-resolver.d.ts +9 -0
- package/dist/generators/style-resolver.js +91 -0
- package/dist/generators/style-resolver.test.d.ts +1 -0
- package/dist/i18n/catalogs/en.d.ts +8 -0
- package/dist/i18n/catalogs/en.js +86 -0
- package/dist/i18n/catalogs/es.d.ts +6 -0
- package/dist/i18n/catalogs/es.js +86 -0
- package/dist/i18n/catalogs/fr.d.ts +6 -0
- package/dist/i18n/catalogs/fr.js +86 -0
- package/dist/i18n/catalogs/index.d.ts +3 -0
- package/dist/i18n/catalogs/index.js +254 -0
- package/dist/i18n/i18n.test.d.ts +1 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.js +310 -0
- package/dist/i18n/keys.d.ts +78 -0
- package/dist/i18n/keys.js +34 -0
- package/dist/i18n/locale.d.ts +8 -0
- package/dist/i18n/locale.js +14 -0
- package/dist/i18n/messages.d.ts +14 -0
- package/dist/i18n/messages.js +266 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +624 -0
- package/dist/node/docs/generators.docblock.js +36 -0
- package/dist/node/docs/image-gen.docblock.js +47 -0
- package/dist/node/generators/image-generator.js +525 -0
- package/dist/node/generators/index.js +527 -0
- package/dist/node/generators/prompt-builder.js +93 -0
- package/dist/node/generators/style-resolver.js +90 -0
- package/dist/node/i18n/catalogs/en.js +85 -0
- package/dist/node/i18n/catalogs/es.js +85 -0
- package/dist/node/i18n/catalogs/fr.js +85 -0
- package/dist/node/i18n/catalogs/index.js +253 -0
- package/dist/node/i18n/index.js +309 -0
- package/dist/node/i18n/keys.js +33 -0
- package/dist/node/i18n/locale.js +13 -0
- package/dist/node/i18n/messages.js +265 -0
- package/dist/node/index.js +623 -0
- package/dist/node/presets/index.js +99 -0
- package/dist/node/presets/marketing.js +35 -0
- package/dist/node/presets/social.js +45 -0
- package/dist/node/presets/video.js +25 -0
- package/dist/node/types.js +5 -0
- package/dist/presets/index.d.ts +3 -0
- package/dist/presets/index.js +100 -0
- package/dist/presets/marketing.d.ts +8 -0
- package/dist/presets/marketing.js +36 -0
- package/dist/presets/presets.test.d.ts +1 -0
- package/dist/presets/social.d.ts +10 -0
- package/dist/presets/social.js +46 -0
- package/dist/presets/video.d.ts +6 -0
- package/dist/presets/video.js +26 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.js +6 -0
- package/package.json +394 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { IMAGE_PRESETS } from "@contractspec/lib.contracts-integrations/integrations/providers/image";
|
|
3
|
+
// src/presets/social.ts
|
|
4
|
+
function ogImageBrief(content) {
|
|
5
|
+
return {
|
|
6
|
+
content,
|
|
7
|
+
purpose: "social-og",
|
|
8
|
+
dimensions: IMAGE_PRESETS.ogImage,
|
|
9
|
+
format: "png",
|
|
10
|
+
style: "photorealistic"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function twitterCardBrief(content) {
|
|
14
|
+
return {
|
|
15
|
+
content,
|
|
16
|
+
purpose: "social-twitter",
|
|
17
|
+
dimensions: IMAGE_PRESETS.twitterCard,
|
|
18
|
+
format: "png",
|
|
19
|
+
style: "photorealistic"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function instagramSquareBrief(content) {
|
|
23
|
+
return {
|
|
24
|
+
content,
|
|
25
|
+
purpose: "social-instagram",
|
|
26
|
+
dimensions: IMAGE_PRESETS.instagramSquare,
|
|
27
|
+
format: "jpg",
|
|
28
|
+
style: "photorealistic"
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function instagramStoryBrief(content) {
|
|
32
|
+
return {
|
|
33
|
+
content,
|
|
34
|
+
purpose: "social-instagram",
|
|
35
|
+
dimensions: IMAGE_PRESETS.instagramStory,
|
|
36
|
+
format: "jpg",
|
|
37
|
+
style: "photorealistic"
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/presets/marketing.ts
|
|
42
|
+
function blogHeroBrief(content) {
|
|
43
|
+
return {
|
|
44
|
+
content,
|
|
45
|
+
purpose: "blog-hero",
|
|
46
|
+
dimensions: IMAGE_PRESETS.blogHero,
|
|
47
|
+
format: "webp",
|
|
48
|
+
style: "photorealistic"
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function landingHeroBrief(content) {
|
|
52
|
+
return {
|
|
53
|
+
content,
|
|
54
|
+
purpose: "landing-hero",
|
|
55
|
+
dimensions: IMAGE_PRESETS.blogHero,
|
|
56
|
+
format: "webp",
|
|
57
|
+
style: "photorealistic"
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function emailHeaderBrief(content) {
|
|
61
|
+
return {
|
|
62
|
+
content,
|
|
63
|
+
purpose: "email-header",
|
|
64
|
+
dimensions: IMAGE_PRESETS.emailHeader,
|
|
65
|
+
format: "png",
|
|
66
|
+
style: "flat-design"
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// src/presets/video.ts
|
|
71
|
+
function videoThumbnailBrief(content) {
|
|
72
|
+
return {
|
|
73
|
+
content,
|
|
74
|
+
purpose: "video-thumbnail",
|
|
75
|
+
dimensions: IMAGE_PRESETS.thumbnail,
|
|
76
|
+
format: "png",
|
|
77
|
+
style: "photorealistic"
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function videoThumbnailWideBrief(content) {
|
|
81
|
+
return {
|
|
82
|
+
content,
|
|
83
|
+
purpose: "video-thumbnail",
|
|
84
|
+
dimensions: { width: 1280, height: 720 },
|
|
85
|
+
format: "png",
|
|
86
|
+
style: "photorealistic"
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
videoThumbnailWideBrief,
|
|
91
|
+
videoThumbnailBrief,
|
|
92
|
+
twitterCardBrief,
|
|
93
|
+
ogImageBrief,
|
|
94
|
+
landingHeroBrief,
|
|
95
|
+
instagramStoryBrief,
|
|
96
|
+
instagramSquareBrief,
|
|
97
|
+
emailHeaderBrief,
|
|
98
|
+
blogHeroBrief
|
|
99
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { IMAGE_PRESETS } from "@contractspec/lib.contracts-integrations/integrations/providers/image";
|
|
3
|
+
// src/presets/marketing.ts
|
|
4
|
+
function blogHeroBrief(content) {
|
|
5
|
+
return {
|
|
6
|
+
content,
|
|
7
|
+
purpose: "blog-hero",
|
|
8
|
+
dimensions: IMAGE_PRESETS.blogHero,
|
|
9
|
+
format: "webp",
|
|
10
|
+
style: "photorealistic"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function landingHeroBrief(content) {
|
|
14
|
+
return {
|
|
15
|
+
content,
|
|
16
|
+
purpose: "landing-hero",
|
|
17
|
+
dimensions: IMAGE_PRESETS.blogHero,
|
|
18
|
+
format: "webp",
|
|
19
|
+
style: "photorealistic"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function emailHeaderBrief(content) {
|
|
23
|
+
return {
|
|
24
|
+
content,
|
|
25
|
+
purpose: "email-header",
|
|
26
|
+
dimensions: IMAGE_PRESETS.emailHeader,
|
|
27
|
+
format: "png",
|
|
28
|
+
style: "flat-design"
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
landingHeroBrief,
|
|
33
|
+
emailHeaderBrief,
|
|
34
|
+
blogHeroBrief
|
|
35
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { IMAGE_PRESETS } from "@contractspec/lib.contracts-integrations/integrations/providers/image";
|
|
3
|
+
// src/presets/social.ts
|
|
4
|
+
function ogImageBrief(content) {
|
|
5
|
+
return {
|
|
6
|
+
content,
|
|
7
|
+
purpose: "social-og",
|
|
8
|
+
dimensions: IMAGE_PRESETS.ogImage,
|
|
9
|
+
format: "png",
|
|
10
|
+
style: "photorealistic"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function twitterCardBrief(content) {
|
|
14
|
+
return {
|
|
15
|
+
content,
|
|
16
|
+
purpose: "social-twitter",
|
|
17
|
+
dimensions: IMAGE_PRESETS.twitterCard,
|
|
18
|
+
format: "png",
|
|
19
|
+
style: "photorealistic"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function instagramSquareBrief(content) {
|
|
23
|
+
return {
|
|
24
|
+
content,
|
|
25
|
+
purpose: "social-instagram",
|
|
26
|
+
dimensions: IMAGE_PRESETS.instagramSquare,
|
|
27
|
+
format: "jpg",
|
|
28
|
+
style: "photorealistic"
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function instagramStoryBrief(content) {
|
|
32
|
+
return {
|
|
33
|
+
content,
|
|
34
|
+
purpose: "social-instagram",
|
|
35
|
+
dimensions: IMAGE_PRESETS.instagramStory,
|
|
36
|
+
format: "jpg",
|
|
37
|
+
style: "photorealistic"
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
twitterCardBrief,
|
|
42
|
+
ogImageBrief,
|
|
43
|
+
instagramStoryBrief,
|
|
44
|
+
instagramSquareBrief
|
|
45
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
import { IMAGE_PRESETS } from "@contractspec/lib.contracts-integrations/integrations/providers/image";
|
|
3
|
+
// src/presets/video.ts
|
|
4
|
+
function videoThumbnailBrief(content) {
|
|
5
|
+
return {
|
|
6
|
+
content,
|
|
7
|
+
purpose: "video-thumbnail",
|
|
8
|
+
dimensions: IMAGE_PRESETS.thumbnail,
|
|
9
|
+
format: "png",
|
|
10
|
+
style: "photorealistic"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function videoThumbnailWideBrief(content) {
|
|
14
|
+
return {
|
|
15
|
+
content,
|
|
16
|
+
purpose: "video-thumbnail",
|
|
17
|
+
dimensions: { width: 1280, height: 720 },
|
|
18
|
+
format: "png",
|
|
19
|
+
style: "photorealistic"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
videoThumbnailWideBrief,
|
|
24
|
+
videoThumbnailBrief
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/docs/generators.docblock.ts
|
|
3
|
+
import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
|
|
4
|
+
var generatorDocBlocks = [
|
|
5
|
+
{
|
|
6
|
+
id: "docs.image-gen.generators",
|
|
7
|
+
title: "Image Generators",
|
|
8
|
+
summary: "Core generator classes: ImageGenerator, PromptBuilder, and StyleResolver.",
|
|
9
|
+
kind: "reference",
|
|
10
|
+
visibility: "public",
|
|
11
|
+
route: "/docs/image-gen/generators",
|
|
12
|
+
tags: ["image", "generator", "prompt", "style"],
|
|
13
|
+
owners: ["@contractspec/lib.image-gen"],
|
|
14
|
+
body: `# Image Generators
|
|
15
|
+
|
|
16
|
+
## ImageGenerator
|
|
17
|
+
|
|
18
|
+
The main orchestrator. Accepts an \`ImageBrief\` and produces an \`ImageProject\`.
|
|
19
|
+
|
|
20
|
+
1. **StyleResolver.resolve()** \u2014 resolves dimensions, style tokens, negative tokens
|
|
21
|
+
2. **PromptBuilder.build()** \u2014 constructs the image prompt (deterministic or LLM)
|
|
22
|
+
3. **ImageProvider.generate()** \u2014 calls the image generation provider (optional)
|
|
23
|
+
|
|
24
|
+
## PromptBuilder
|
|
25
|
+
|
|
26
|
+
Supports two modes:
|
|
27
|
+
- **Deterministic**: Assembles a prompt from brief fields and style tokens
|
|
28
|
+
- **LLM-enhanced**: Sends a system prompt + brief JSON to the LLM, falls back to deterministic
|
|
29
|
+
|
|
30
|
+
## StyleResolver
|
|
31
|
+
|
|
32
|
+
Maps \`ImagePurpose\` to default dimensions from \`IMAGE_PRESETS\`, and \`ImageStyle\` to
|
|
33
|
+
prompt tokens (e.g. "professional photography", "clean flat vector").
|
|
34
|
+
`
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
registerDocBlocks(generatorDocBlocks);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/docs/image-gen.docblock.ts
|
|
3
|
+
import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
|
|
4
|
+
var imageGenDocBlocks = [
|
|
5
|
+
{
|
|
6
|
+
id: "docs.image-gen.overview",
|
|
7
|
+
title: "Image Generation Library",
|
|
8
|
+
summary: "AI-powered image generation for hero, social, thumbnail, OG, and illustration assets.",
|
|
9
|
+
kind: "reference",
|
|
10
|
+
visibility: "public",
|
|
11
|
+
route: "/docs/image-gen/overview",
|
|
12
|
+
tags: ["image", "generation", "ai", "content"],
|
|
13
|
+
owners: ["@contractspec/lib.image-gen"],
|
|
14
|
+
body: `# Image Generation Library
|
|
15
|
+
|
|
16
|
+
\`@contractspec/lib.image-gen\` provides deterministic and LLM-enhanced image prompt generation
|
|
17
|
+
for content pipelines. It supports multiple purposes (blog hero, social OG, thumbnail, etc.)
|
|
18
|
+
and styles (photorealistic, illustration, flat-design, etc.).
|
|
19
|
+
|
|
20
|
+
## Key Features
|
|
21
|
+
|
|
22
|
+
- **Deterministic mode**: Generates structured prompts without an LLM
|
|
23
|
+
- **LLM-enhanced mode**: Uses an LLM to craft optimized image prompts
|
|
24
|
+
- **Style resolution**: Maps purposes to dimensions and style tokens
|
|
25
|
+
- **Preset briefs**: Ready-made brief constructors for common use cases
|
|
26
|
+
- **i18n support**: Localized strings for EN, FR, ES
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
\`\`\`typescript
|
|
31
|
+
import { ImageGenerator } from '@contractspec/lib.image-gen/generators';
|
|
32
|
+
import { blogHeroBrief } from '@contractspec/lib.image-gen/presets';
|
|
33
|
+
|
|
34
|
+
const generator = new ImageGenerator();
|
|
35
|
+
const brief = blogHeroBrief(contentBrief);
|
|
36
|
+
const project = await generator.generate(brief);
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
## Architecture
|
|
40
|
+
|
|
41
|
+
- **ImageGenerator** \u2014 orchestrates style resolution, prompt building, and provider calls
|
|
42
|
+
- **StyleResolver** \u2014 maps purpose + style to dimensions, tokens, and negative tokens
|
|
43
|
+
- **PromptBuilder** \u2014 constructs deterministic or LLM-enhanced image prompts
|
|
44
|
+
- **Presets** \u2014 convenience functions for social, marketing, and video thumbnails
|
|
45
|
+
`
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
registerDocBlocks(imageGenDocBlocks);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ImageBrief, ImageGeneratorOptions, ImageProject } from '../types';
|
|
2
|
+
export declare class ImageGenerator {
|
|
3
|
+
private readonly promptBuilder;
|
|
4
|
+
private readonly styleResolver;
|
|
5
|
+
private readonly options;
|
|
6
|
+
private readonly i18n;
|
|
7
|
+
private readonly clock;
|
|
8
|
+
constructor(options?: ImageGeneratorOptions);
|
|
9
|
+
generate(brief: ImageBrief): Promise<ImageProject>;
|
|
10
|
+
private generateId;
|
|
11
|
+
private mapStyleToProviderStyle;
|
|
12
|
+
}
|