@azerogluemin/ai-bootstrap 0.5.0 → 0.6.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/CHANGELOG.md +75 -0
- package/dist/applier/preset-definitions.d.ts +15 -0
- package/dist/applier/preset-definitions.js +225 -0
- package/dist/applier/preset-definitions.js.map +1 -0
- package/dist/applier/preset-scaffolder.d.ts +14 -0
- package/dist/applier/preset-scaffolder.js +526 -0
- package/dist/applier/preset-scaffolder.js.map +1 -0
- package/dist/commands/new.js +72 -137
- package/dist/commands/new.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/art-director/SKILL.md +209 -0
- package/templates/skills/backend-developer/SKILL.md +198 -0
- package/templates/skills/cinematographer/SKILL.md +233 -0
- package/templates/skills/colorist/SKILL.md +210 -0
- package/templates/skills/devops-developer/SKILL.md +263 -0
- package/templates/skills/editor/SKILL.md +166 -0
- package/templates/skills/frontend-developer/SKILL.md +147 -0
- package/templates/skills/mobile-developer/SKILL.md +227 -0
package/dist/commands/new.js
CHANGED
|
@@ -1,173 +1,108 @@
|
|
|
1
|
-
// ai-bootstrap new —
|
|
1
|
+
// ai-bootstrap new — preset-based project bootstrap (v0.6.0)
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// -
|
|
6
|
-
// -
|
|
3
|
+
// User picks a PRESET (SaaS / Social Page / AI Studio).
|
|
4
|
+
// Each preset:
|
|
5
|
+
// - Installs its skills + agents (symlinked from pool)
|
|
6
|
+
// - Suggests MCPs (user-scope; auto-add if not already configured)
|
|
7
|
+
// - Scaffolds folder structure
|
|
8
|
+
// - Writes CLAUDE.md with preset-specific rules
|
|
7
9
|
//
|
|
8
|
-
//
|
|
9
|
-
// 1) Project name (default: folder basename)
|
|
10
|
-
// 2) Bundles (multi-select checkbox)
|
|
11
|
-
// 3) Description (1-2 sentences for CLAUDE.md)
|
|
12
|
-
//
|
|
13
|
-
// Installation uses Pool+Symlink: skills/agents are symlinked from
|
|
14
|
-
// ~/.claude/skills-pool/ — no per-project duplication on disk.
|
|
10
|
+
// Bundles no longer surface in user-facing CLI — presets replace them.
|
|
15
11
|
import chalk from 'chalk';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { input,
|
|
12
|
+
import { basename, join } from 'node:path';
|
|
13
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
14
|
+
import { input, select, confirm } from '@inquirer/prompts';
|
|
19
15
|
import { installSkills } from '../applier/skills-installer.js';
|
|
20
16
|
import { installAgents } from '../applier/agents-installer.js';
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
{ id: 'creator', label: 'Creator', description: 'Video, Reel, sosial, brand (26 skill, 13 agent)' },
|
|
26
|
-
{ id: 'marketer', label: 'Marketer', description: 'SEO, SMM, copy, ads (24 skill, 29 agent)' },
|
|
27
|
-
{ id: 'founder', label: 'Founder', description: 'C-Level + product + marketing + coaching (35, 38)' },
|
|
28
|
-
{ id: 'full-stack', label: 'Full Stack', description: 'HƏR ŞEY — 85 skill, 78 agent' },
|
|
29
|
-
];
|
|
30
|
-
function projectClaudeMd(name, description, bundles) {
|
|
31
|
-
return `# CLAUDE.md — ${name}
|
|
32
|
-
|
|
33
|
-
Bu fayl bu layihə üçün xüsusi instruksiyalardır. Hər söhbətdə avtomatik yüklənir.
|
|
34
|
-
|
|
35
|
-
## Layihə haqqında
|
|
36
|
-
|
|
37
|
-
${description || '(təsvir verilməyib — buraya yaz)'}
|
|
38
|
-
|
|
39
|
-
## Bundle(lər)
|
|
40
|
-
|
|
41
|
-
${bundles.map((b) => '- `' + b + '`').join('\n')}
|
|
42
|
-
|
|
43
|
-
Skill + agent siyahısı: \`.claude/skills/\` və \`.claude/agents/\` qovluqlarında (symlinks).
|
|
44
|
-
Pool: \`~/.claude/skills-pool/\` — bütün skill-lər bir dəfə saxlanır, hər layihə link verir.
|
|
45
|
-
|
|
46
|
-
Əlavə skill/bundle əlavə etmək:
|
|
47
|
-
\`\`\`
|
|
48
|
-
ai-bootstrap add showrunner # tək skill
|
|
49
|
-
ai-bootstrap add --bundle marketer # bütün bundle
|
|
50
|
-
ai-bootstrap add # interaktiv siyahı
|
|
51
|
-
\`\`\`
|
|
52
|
-
|
|
53
|
-
## Custom rules (bu layihəyə xas)
|
|
54
|
-
|
|
55
|
-
<!-- Buraya layihə-spesifik qaydalar yaz. Misal:
|
|
56
|
-
1. AZ-də danış, RU sözləri qarışdırma
|
|
57
|
-
2. Bu layihədə Tailwind v4 istifadə olunur
|
|
58
|
-
3. Müştəri "Restoran X" şirkətidir, terminlərinə hörmət et
|
|
59
|
-
-->
|
|
60
|
-
`;
|
|
61
|
-
}
|
|
62
|
-
function projectGitignore() {
|
|
63
|
-
return [
|
|
64
|
-
'# ai-bootstrap project-scope installations',
|
|
65
|
-
'# Skills + agents qovluqlarını git-ə salmaq istəyirsənsə commentdə qoy:',
|
|
66
|
-
'# skills/',
|
|
67
|
-
'# agents/',
|
|
68
|
-
'',
|
|
69
|
-
'# Həmişə xaric:',
|
|
70
|
-
'*.log',
|
|
71
|
-
'.DS_Store',
|
|
72
|
-
'',
|
|
73
|
-
].join('\n');
|
|
74
|
-
}
|
|
17
|
+
import { writeMcpConfig } from '../applier/mcp-config.js';
|
|
18
|
+
import { listPresets, getPreset } from '../applier/preset-definitions.js';
|
|
19
|
+
import { scaffoldPreset } from '../applier/preset-scaffolder.js';
|
|
20
|
+
import { writeFileSync } from 'node:fs';
|
|
75
21
|
export async function runNewCommand(_args) {
|
|
76
22
|
const cwd = process.cwd();
|
|
77
23
|
const folderName = basename(cwd);
|
|
78
|
-
console.log(chalk.bold(`\nai-bootstrap new — layihə
|
|
79
|
-
console.log(chalk.dim(` Qovluq:
|
|
80
|
-
//
|
|
24
|
+
console.log(chalk.bold(`\nai-bootstrap new — layihə bootstrap\n`));
|
|
25
|
+
console.log(chalk.dim(` Qovluq: ${cwd}\n`));
|
|
26
|
+
// 1) Project name
|
|
81
27
|
const projectName = await input({
|
|
82
28
|
message: '1/3 — Layihə adı?',
|
|
83
29
|
default: folderName,
|
|
84
30
|
});
|
|
85
|
-
//
|
|
86
|
-
const
|
|
87
|
-
message: '2/3 —
|
|
88
|
-
choices:
|
|
89
|
-
name: `${
|
|
90
|
-
value:
|
|
91
|
-
disabled: b.id === 'foundation' ? '(artıq qlobalda)' : false,
|
|
31
|
+
// 2) Preset
|
|
32
|
+
const presetId = (await select({
|
|
33
|
+
message: '2/3 — Bu qovluqda nə qurmaq istəyirsən?',
|
|
34
|
+
choices: listPresets().map((p) => ({
|
|
35
|
+
name: `${chalk.cyan(p.label.padEnd(20))} ${chalk.dim(p.description)}`,
|
|
36
|
+
value: p.id,
|
|
92
37
|
})),
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
//
|
|
38
|
+
}));
|
|
39
|
+
const preset = getPreset(presetId);
|
|
40
|
+
// 3) Description
|
|
96
41
|
const description = await input({
|
|
97
42
|
message: '3/3 — Qısa təsvir (1-2 cümlə) — CLAUDE.md-yə yazılacaq:',
|
|
98
43
|
default: '',
|
|
99
44
|
});
|
|
100
|
-
// Install
|
|
45
|
+
// ════ Install ════
|
|
101
46
|
const projectClaudeDir = join(cwd, '.claude');
|
|
102
47
|
const projectSkillsDir = join(projectClaudeDir, 'skills');
|
|
103
48
|
const projectAgentsDir = join(projectClaudeDir, 'agents');
|
|
104
|
-
if (!existsSync(projectClaudeDir))
|
|
49
|
+
if (!existsSync(projectClaudeDir))
|
|
105
50
|
mkdirSync(projectClaudeDir, { recursive: true });
|
|
106
|
-
}
|
|
107
51
|
console.log('');
|
|
108
|
-
console.log(chalk.bold(`Quraşdırılır
|
|
109
|
-
console.log(chalk.dim(`
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
console.log(chalk.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
default: false,
|
|
137
|
-
});
|
|
138
|
-
if (overwrite) {
|
|
139
|
-
writeFileSync(claudeMdPath, projectClaudeMd(projectName, description, bundleIds), 'utf-8');
|
|
140
|
-
console.log(` ${chalk.green('✓')} CLAUDE.md yenilədi`);
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
console.log(` ${chalk.dim('−')} CLAUDE.md saxlandı (üstünə yazılmadı)`);
|
|
52
|
+
console.log(chalk.bold(`Quraşdırılır: ${chalk.cyan(preset.label)}`));
|
|
53
|
+
console.log(chalk.dim(` ${preset.skills.length} skill, ${preset.agents.length} agent, ${preset.mcps.length} MCP suggested\n`));
|
|
54
|
+
// Install skills
|
|
55
|
+
console.log(chalk.dim(` Skills (${preset.skills.length})...`));
|
|
56
|
+
const sr = installSkills(preset.skills, projectSkillsDir);
|
|
57
|
+
console.log(` ${chalk.green('✓')} ${sr.installed.length} installed` +
|
|
58
|
+
(sr.skipped.length > 0 ? `, ${chalk.dim(sr.skipped.length + ' skipped')}` : '') +
|
|
59
|
+
(sr.errors.length > 0 ? `, ${chalk.red(sr.errors.length + ' errors')}` : '') +
|
|
60
|
+
(sr.linkMode ? chalk.dim(` [${sr.linkMode}]`) : ''));
|
|
61
|
+
// Install agents
|
|
62
|
+
console.log(chalk.dim(` Agents (${preset.agents.length})...`));
|
|
63
|
+
const ar = installAgents(preset.agents, projectAgentsDir);
|
|
64
|
+
console.log(` ${chalk.green('✓')} ${ar.installed.length} installed` +
|
|
65
|
+
(ar.skipped.length > 0 ? `, ${chalk.dim(ar.skipped.length + ' skipped')}` : '') +
|
|
66
|
+
(ar.errors.length > 0 ? `, ${chalk.red(ar.errors.length + ' errors')}` : ''));
|
|
67
|
+
// MCPs — ask if user wants to auto-add suggested
|
|
68
|
+
console.log(chalk.dim(` MCPs (${preset.mcps.length} təklif olunur)...`));
|
|
69
|
+
const addMcps = await confirm({
|
|
70
|
+
message: ` ${preset.mcps.length} MCP təklif olunur — avtomatik konfiq edək? (credentials sonra)`,
|
|
71
|
+
default: true,
|
|
72
|
+
});
|
|
73
|
+
if (addMcps) {
|
|
74
|
+
const mcpResult = writeMcpConfig(preset.mcps);
|
|
75
|
+
console.log(` ${chalk.green('✓')} ${mcpResult.installed.length} yeni MCP` +
|
|
76
|
+
(mcpResult.skipped.length > 0 ? `, ${chalk.dim(mcpResult.skipped.length + ' artıq var')}` : '') +
|
|
77
|
+
(mcpResult.missingFromCatalog.length > 0 ? chalk.yellow(`, ${mcpResult.missingFromCatalog.length} kataloqda yox`) : ''));
|
|
78
|
+
if (mcpResult.credentialsRequired.length > 0) {
|
|
79
|
+
console.log(chalk.dim(` Credential gözləyən: ${mcpResult.credentialsRequired.length} — ${chalk.cyan('ai-bootstrap mcp credentials')}`));
|
|
144
80
|
}
|
|
145
81
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
writeFileSync(gitignorePath, projectGitignore(), 'utf-8');
|
|
154
|
-
}
|
|
155
|
-
// Project state
|
|
82
|
+
// Scaffold folder structure + CLAUDE.md + README + .gitignore
|
|
83
|
+
console.log('');
|
|
84
|
+
console.log(chalk.dim(' Folder strukturu + CLAUDE.md yazılır...'));
|
|
85
|
+
const scaffold = scaffoldPreset(presetId, { cwd, projectName, description });
|
|
86
|
+
console.log(` ${chalk.green('✓')} ${scaffold.foldersCreated.length} qovluq, ${scaffold.filesWritten.length} fayl yaradıldı` +
|
|
87
|
+
(scaffold.filesSkipped.length > 0 ? chalk.dim(`, ${scaffold.filesSkipped.length} skip (mövcud)`) : ''));
|
|
88
|
+
// Save project state
|
|
156
89
|
const projectStatePath = join(projectClaudeDir, 'ai-bootstrap-project.json');
|
|
157
90
|
writeFileSync(projectStatePath, JSON.stringify({
|
|
158
|
-
version: '
|
|
91
|
+
version: '2.0',
|
|
159
92
|
name: projectName,
|
|
160
|
-
|
|
93
|
+
preset: presetId,
|
|
161
94
|
description,
|
|
162
95
|
createdAt: new Date().toISOString(),
|
|
163
96
|
}, null, 2), 'utf-8');
|
|
97
|
+
// Final summary
|
|
164
98
|
console.log('');
|
|
165
99
|
console.log(chalk.bold.green('🎉 Layihə hazırdır.\n'));
|
|
166
100
|
console.log(chalk.dim('Növbəti:'));
|
|
167
|
-
console.log(` ${chalk.cyan('claude')}
|
|
168
|
-
console.log(` ${chalk.cyan('cat CLAUDE.md')}
|
|
169
|
-
console.log(` ${chalk.cyan('ai-bootstrap list')}
|
|
170
|
-
console.log(` ${chalk.cyan('ai-bootstrap add <skill>')}
|
|
101
|
+
console.log(` ${chalk.cyan('claude')} — sessiyanı başlat`);
|
|
102
|
+
console.log(` ${chalk.cyan('cat CLAUDE.md')} — preset qaydalarını yoxla`);
|
|
103
|
+
console.log(` ${chalk.cyan('ai-bootstrap list')} — quraşdırılanlar`);
|
|
104
|
+
console.log(` ${chalk.cyan('ai-bootstrap add <skill>')} — əlavə skill əlavə et`);
|
|
105
|
+
console.log(` ${chalk.cyan('ai-bootstrap mcp credentials')} — MCP token əlavə et`);
|
|
171
106
|
console.log('');
|
|
172
107
|
}
|
|
173
108
|
//# sourceMappingURL=new.js.map
|
package/dist/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azerogluemin/ai-bootstrap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Personal AI infrastructure bootstrap for Claude Code — interactive setup wizard with skills, agents, MCPs, and cross-project memory",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: art-director
|
|
3
|
+
description: Senior art director responsible for overall visual identity across a project — production design, color palette, costume, props, set dressing, era specificity. Activates on visual world-building, project visual language, mood board design, look/feel direction. Triggers on AZ phrases like "vizual dil", "atmosfer", "art direction", "mood board", "production design" and EN equivalents.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Art Director
|
|
8
|
+
|
|
9
|
+
Senior art director (bədii rejissor) who designs the visual world of a project — every choice that appears on screen.
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
|
|
13
|
+
- User asks for visual direction / mood / look of a project
|
|
14
|
+
- User wants mood board, reference deck, visual brief
|
|
15
|
+
- User asks about production design (sets, props, costumes, era)
|
|
16
|
+
- User mentions "world-building" for ad / film / video / brand
|
|
17
|
+
- User asks for visual coherence critique across project
|
|
18
|
+
|
|
19
|
+
## Core principles
|
|
20
|
+
|
|
21
|
+
1. **One world, many choices** — Every visible element (set, costume, prop, color, texture, lighting hint) reinforces the same world. A wrong prop breaks the spell.
|
|
22
|
+
2. **Era specificity** — If your story is set in 1973 Soviet Baku, the typography, fabric weave, ceramic glaze, and lighting fixtures all need to be 1973. Anachronisms destroy trust.
|
|
23
|
+
3. **Color tells story** — Color palette per scene/character planned in pre-production, not improvised on set.
|
|
24
|
+
4. **Subtraction over addition** — Best production design removes distractions, focuses eye on actor/subject.
|
|
25
|
+
5. **Reference, don't copy** — Borrow from real films/artists/photographers; never paste their look verbatim.
|
|
26
|
+
|
|
27
|
+
## Pre-production deliverables
|
|
28
|
+
|
|
29
|
+
### 1. Visual treatment (5-15 pages)
|
|
30
|
+
- Project synopsis (1 paragraph)
|
|
31
|
+
- Visual logline (1 sentence: "It looks like ___ meets ___")
|
|
32
|
+
- Mood board (8-20 reference images, grouped by theme)
|
|
33
|
+
- Color palette (5-8 swatches with hex codes + intended use)
|
|
34
|
+
- Lighting language (key + fill + back + ambient — described per location)
|
|
35
|
+
- Texture + material (3-5 dominant materials: brushed steel, raw linen, polished concrete)
|
|
36
|
+
- Costume notes per character
|
|
37
|
+
- Era + cultural reference notes
|
|
38
|
+
|
|
39
|
+
### 2. Mood board structure
|
|
40
|
+
|
|
41
|
+
Don't dump 50 random images. Curate:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Mood board sections:
|
|
45
|
+
├── Overall vibe (3-4 hero refs)
|
|
46
|
+
├── Color (5-6 swatches + sample frames)
|
|
47
|
+
├── Lighting (key looks per scene type)
|
|
48
|
+
├── Costume (per character/scene)
|
|
49
|
+
├── Set / location (3-5 per primary set)
|
|
50
|
+
├── Props (hero objects — 5-10)
|
|
51
|
+
└── Composition references (framing/depth/scale)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 3. Production bible
|
|
55
|
+
- Locked palettes per scene
|
|
56
|
+
- Costume continuity per character
|
|
57
|
+
- Hero prop list with sourcing notes
|
|
58
|
+
- Hand-drawn or 3D set sketches
|
|
59
|
+
- Visual continuity rules ("never see fluorescent lighting", "no plastic visible")
|
|
60
|
+
|
|
61
|
+
## Color palette design
|
|
62
|
+
|
|
63
|
+
### Approach: per-scene palette
|
|
64
|
+
Each scene has dominant + supporting + accent colors.
|
|
65
|
+
|
|
66
|
+
**Wes Anderson Hotel Budapest** (example):
|
|
67
|
+
- Lobby: Pink (#E8B4B8) + bronze (#B8956A) + cream (#F2EDDA)
|
|
68
|
+
- Confectionery: Pastel violet + sky blue + raspberry
|
|
69
|
+
- Prison: Olive + faded denim + steel
|
|
70
|
+
- Mountain: White + cobalt + spruce green
|
|
71
|
+
|
|
72
|
+
### Approach: per-character palette
|
|
73
|
+
Each character associated with 1-2 colors throughout.
|
|
74
|
+
|
|
75
|
+
**Joker (Joaquin Phoenix)**:
|
|
76
|
+
- Early Arthur: drab brown, washed-out cream
|
|
77
|
+
- Becoming Joker: emerald + violet + blood red (saturation increases as character transforms)
|
|
78
|
+
|
|
79
|
+
### Color wheel patterns
|
|
80
|
+
- **Complementary** (opposite) — high contrast, tension
|
|
81
|
+
- **Analogous** (adjacent) — harmony, calm
|
|
82
|
+
- **Triadic** — vibrant balance
|
|
83
|
+
- **Split-complementary** — dynamic without harshness
|
|
84
|
+
- **Monochromatic** + accent — singular mood with one pop
|
|
85
|
+
|
|
86
|
+
### Tools
|
|
87
|
+
- **Pantone Studio** — match real-world colors
|
|
88
|
+
- **Adobe Color** — extract palette from image
|
|
89
|
+
- **Color Hunt** / **Coolors** — discover palettes
|
|
90
|
+
- **Khroma** — AI palette gen trained on your taste
|
|
91
|
+
|
|
92
|
+
## Era + cultural research
|
|
93
|
+
|
|
94
|
+
For period work (or culture-specific work):
|
|
95
|
+
|
|
96
|
+
### Research checklist
|
|
97
|
+
- [ ] Decade-specific typography (Helvetica was 1957; don't use it for 1940s)
|
|
98
|
+
- [ ] Fabric availability + weaving patterns
|
|
99
|
+
- [ ] Color palettes of the era (Kodachrome looks different from Technicolor)
|
|
100
|
+
- [ ] Furniture + appliances (1973 Soviet kitchen ≠ 1973 Western kitchen)
|
|
101
|
+
- [ ] Cars, signage, advertising
|
|
102
|
+
- [ ] Hair + makeup (silhouettes, products of the era)
|
|
103
|
+
- [ ] Lighting tech (gas lamp ≠ tungsten ≠ fluorescent ≠ LED)
|
|
104
|
+
- [ ] Hand gestures + posture norms
|
|
105
|
+
|
|
106
|
+
### AZ specific (Azerbaijani context)
|
|
107
|
+
- 1970s-80s: Soviet color palettes (muted reds, ochre, olive); brutalist + ornament fusion
|
|
108
|
+
- 1990s post-Soviet: faded propaganda + emerging consumer goods
|
|
109
|
+
- 2000s: Heydar Aliyev era public space aesthetics
|
|
110
|
+
- Karabakh war references: handle with care; cultural sensitivity required
|
|
111
|
+
- Religious imagery: Shi'a Muslim majority — avoid casual desecration of symbols
|
|
112
|
+
|
|
113
|
+
## Costume design
|
|
114
|
+
|
|
115
|
+
### Per character process
|
|
116
|
+
1. **Backstory** — Where do they live? What income? What taste?
|
|
117
|
+
2. **Color story** — 1-2 dominant colors that follow character arc
|
|
118
|
+
3. **Texture story** — Materials reflect status (silk = elite, denim = working, wool = professional, synthetic = utilitarian)
|
|
119
|
+
4. **Continuity** — Same costume across scenes unless story justifies change
|
|
120
|
+
5. **Distress / wear** — New shoes scream "fresh from prop room"; intentional wear sells reality
|
|
121
|
+
|
|
122
|
+
### Continuity tracker
|
|
123
|
+
| Scene | Character | Costume | Notes |
|
|
124
|
+
|---|---|---|---|
|
|
125
|
+
| 01 | Aida | Cream silk blouse, charcoal trouser, gold ring | First impression: composed |
|
|
126
|
+
| 02 | Aida | Same trouser, white tee, ring removed | Day later, cracked composure |
|
|
127
|
+
|
|
128
|
+
## Set + location
|
|
129
|
+
|
|
130
|
+
### Choosing locations
|
|
131
|
+
- **Practical location** (real space) — authenticity, cheap, limits (size, time, control)
|
|
132
|
+
- **Studio set build** — control over everything, expensive, requires time
|
|
133
|
+
- **Mixed (location + extension/dressing)** — most common
|
|
134
|
+
|
|
135
|
+
### Dressing a location
|
|
136
|
+
- Layer 1: Architecture (given)
|
|
137
|
+
- Layer 2: Furniture + large objects
|
|
138
|
+
- Layer 3: Dressing (rugs, curtains, art)
|
|
139
|
+
- Layer 4: Set decoration (hero props placed for camera)
|
|
140
|
+
- Layer 5: Continuity touches (coffee cup placement, book stack)
|
|
141
|
+
|
|
142
|
+
## Working with director + DP
|
|
143
|
+
|
|
144
|
+
- Art director **proposes**, director **decides**
|
|
145
|
+
- DP + art director must agree on lighting compatible with set materials (shiny surfaces vs matte)
|
|
146
|
+
- Continuity supervisor catches mistakes — share continuity tracker with them
|
|
147
|
+
- Costume designer reports to art director on coherence; both report to director
|
|
148
|
+
|
|
149
|
+
## Output format
|
|
150
|
+
|
|
151
|
+
When asked to design a visual treatment:
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
## Visual treatment — <project>
|
|
155
|
+
|
|
156
|
+
### Visual logline
|
|
157
|
+
"It looks like <A> meets <B>"
|
|
158
|
+
|
|
159
|
+
### Mood
|
|
160
|
+
- Overall: <emotion + atmosphere>
|
|
161
|
+
- Key scene tonal map: <list>
|
|
162
|
+
|
|
163
|
+
### Palette
|
|
164
|
+
- Dominant: #XXXXXX (<name>)
|
|
165
|
+
- Supporting: #YYYYYY (<name>)
|
|
166
|
+
- Accent: #ZZZZZZ (<name>)
|
|
167
|
+
- Application: <how used scene-to-scene>
|
|
168
|
+
|
|
169
|
+
### Lighting language
|
|
170
|
+
- Day exteriors: <style>
|
|
171
|
+
- Night interiors: <style>
|
|
172
|
+
- Dramatic / climax: <style>
|
|
173
|
+
|
|
174
|
+
### Era / setting
|
|
175
|
+
- Time: <year/range>
|
|
176
|
+
- Place: <city/region>
|
|
177
|
+
- Cultural notes: <important specifics>
|
|
178
|
+
|
|
179
|
+
### Costume per character
|
|
180
|
+
| Character | Color story | Texture | Notes |
|
|
181
|
+
|
|
182
|
+
### Hero props
|
|
183
|
+
-
|
|
184
|
+
|
|
185
|
+
### Set / location refs
|
|
186
|
+
- <Pinterest board / drive link>
|
|
187
|
+
|
|
188
|
+
### Anti-references (avoid)
|
|
189
|
+
-
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Anti-patterns (qadağa)
|
|
193
|
+
|
|
194
|
+
- Generic "moody + cinematic" without specific era/culture
|
|
195
|
+
- Mood board of 30 random Pinterest screenshots without theme
|
|
196
|
+
- Costume continuity errors (different watch each scene)
|
|
197
|
+
- Modern appliances in period piece (microwaves in 1972 kitchen)
|
|
198
|
+
- Color palette decided in post (must drive pre-production)
|
|
199
|
+
- Ignoring cultural specificity (generic "Middle East look" applied to AZ)
|
|
200
|
+
- Hero prop visible but story-irrelevant (distracts eye)
|
|
201
|
+
|
|
202
|
+
## Sources
|
|
203
|
+
|
|
204
|
+
- "Production Design" — Vincent LoBrutto
|
|
205
|
+
- "The Visual Story" — Bruce Block (visual structure)
|
|
206
|
+
- ASC American Cinematographer magazine
|
|
207
|
+
- AFI / NYFA production design courses
|
|
208
|
+
- Pinterest + Are.na (curation tools)
|
|
209
|
+
- Real museum archives for era research
|