@milenyumai/film-kit 1.4.1 → 1.4.3

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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Film-Kit
2
2
 
3
- Professional cinematic prompt-engineering kits for Claude Code, Cursor, GitHub Copilot, and Antigravity.
3
+ Professional cinematic prompt-engineering kits for OpenAI Codex App, Claude Code, Cursor, GitHub Copilot, and Antigravity.
4
4
 
5
- Film-Kit ships as a single repository with four npm packages:
5
+ Film-Kit ships as a single repository with five npm packages:
6
6
 
7
7
  | Package | Use case | Video route |
8
8
  |---|---|---|
@@ -10,6 +10,7 @@ Film-Kit ships as a single repository with four npm packages:
10
10
  | `@milenyumai/film-kit-multi` | Multi-agent parallel production | `veo31` or `kling-3.0` |
11
11
  | `@milenyumai/film-kit-hybrid` | Nano Banana stills + Kling video | fixed `kling-3.0` |
12
12
  | `@milenyumai/film-kit-hybrid-smart` | Nano Banana stills + smart Veo/Kling routing | dialogue-aware route |
13
+ | `@milenyumai/film-kit-studio` | Scenario to rendered media | fal.ai Nano Banana + Kling render pipeline |
13
14
 
14
15
  ## Release Highlights
15
16
 
@@ -21,16 +22,32 @@ Film-Kit ships as a single repository with four npm packages:
21
22
  - Voice-design aware audio contract with project-level `voiceCast`, shot-level `Audio Plan`, and backward-compatible `Audio direction` blocks.
22
23
  - Aligned quality gates across Claude Code, Cursor, Copilot, and Antigravity.
23
24
  - Stronger Kling 3.0 and Kling multi-shot guidance, including practical route rules and hard caps.
25
+ - OpenAI Codex App repo-scoped surfaces across packages:
26
+ - `.codex/config.toml` with full-auto local profile
27
+ - `.codex/agents/*.toml` custom agents that point back to Film-Kit roles
28
+ - `.agents/skills/*/SKILL.md` Codex skill mirror
29
+ - AGENTS.md project-root, trusted-project, and worktree bootstrap guidance
24
30
 
25
31
  ## Editors
26
32
 
27
33
  All packages generate professional project surfaces for:
28
34
 
35
+ - OpenAI Codex App
29
36
  - Claude Code
30
37
  - Cursor
31
38
  - GitHub Copilot
32
39
  - Antigravity
33
40
 
41
+ ## OpenAI Codex App Support
42
+
43
+ Film-Kit writes repo-scoped Codex files so the Codex desktop app can discover the project from the Git root:
44
+
45
+ - `.codex/config.toml` uses `approval_policy = "never"`, `sandbox_mode = "danger-full-access"`, and `[agents] max_threads = 6`, `max_depth = 1`.
46
+ - `.codex/agents/*.toml` defines minimal custom agents that read the canonical `.agent/agents/*.md` role files.
47
+ - `.agents/skills/*/SKILL.md` mirrors the final `.agent/skills` runtime so Codex skill discovery sees package-specific overrides.
48
+ - Studio adds a project-scoped fal.ai MCP entry at `.codex/config.toml` with `required = false`; missing `FAL_KEY` is reported during render rather than breaking init.
49
+ - If Codex opens a worktree without dependencies or build output, follow `AGENTS.md`: run `npm install` and `npm run build` before package commands.
50
+
34
51
  ## Package Guide
35
52
 
36
53
  ### 1. `@milenyumai/film-kit`
@@ -97,7 +114,8 @@ Key contracts:
97
114
 
98
115
  - one file per shot
99
116
  - route is always `kling-3.0`
100
- - app.kling custom storyboard cap: `3`
117
+ - app.kling custom storyboard cap: `4`
118
+ - Kling prompt code blocks start with `[CHARACTER / SUBJECT CONSISTENCY]`
101
119
  - hybrid-specific spatial realism rules for layered blocking
102
120
 
103
121
  ### 4. `@milenyumai/film-kit-hybrid-smart`
@@ -120,7 +138,8 @@ Key contracts:
120
138
 
121
139
  - per-section route declaration
122
140
  - Veo/Kling grammar separation
123
- - app.kling custom storyboard cap: `3`
141
+ - app.kling custom storyboard cap: `4`
142
+ - Kling-routed no-dialogue prompt code blocks start with `[CHARACTER / SUBJECT CONSISTENCY]`
124
143
  - shared spatial realism gate
125
144
 
126
145
  ## Shared Quality System
@@ -196,7 +215,7 @@ Smart hybrid:
196
215
  "defaultAspectRatio": "16:9",
197
216
  "nanoBananaImageSize": "2K",
198
217
  "klingPreset": "ultra-realism",
199
- "maxKlingCustomShots": 3
218
+ "maxKlingCustomShots": 4
200
219
  }
201
220
  ```
202
221
 
@@ -214,6 +233,7 @@ Package publishing happens from:
214
233
  - `packages/multi` for `@milenyumai/film-kit-multi`
215
234
  - `packages/hybrid` for `@milenyumai/film-kit-hybrid`
216
235
  - `packages/hybrid-smart` for `@milenyumai/film-kit-hybrid-smart`
236
+ - `packages/studio` for `@milenyumai/film-kit-studio`
217
237
 
218
238
  ## License
219
239
 
@@ -36,7 +36,7 @@ async function collectFiles(dir, prefix = "") {
36
36
  /**
37
37
  * Copy content files from the package's content/ directory into the target project's .agent/ directory.
38
38
  */
39
- async function copyContentFiles(rootDir, overwrite, templateVars) {
39
+ async function copyContentFiles(rootDir, overwrite, templateVars, targetRoot = ".agent", skillsOnly = false) {
40
40
  const contentDir = getContentDir();
41
41
  const contentExists = await exists(contentDir);
42
42
  if (!contentExists) {
@@ -46,7 +46,10 @@ async function copyContentFiles(rootDir, overwrite, templateVars) {
46
46
  const written = [];
47
47
  const skipped = [];
48
48
  for (const file of files) {
49
- const targetRelative = `.agent/${file.relativePath}`;
49
+ if (skillsOnly && !file.relativePath.startsWith("skills/")) {
50
+ continue;
51
+ }
52
+ const targetRelative = `${targetRoot}/${file.relativePath}`;
50
53
  const targetAbsolute = join(rootDir, targetRelative);
51
54
  const targetExists = await exists(targetAbsolute);
52
55
  if (targetExists && !overwrite) {
@@ -136,10 +139,19 @@ export async function configureAgents(options = {}) {
136
139
  modelDisplayName: getModelDisplayName(resolved.model)
137
140
  })
138
141
  : { written: [], skipped: [] };
142
+ const codexSkillMirrorResult = resolved.copyContent && resolved.platforms.includes("codex")
143
+ ? await copyContentFiles(resolved.rootDir, resolved.overwrite, {
144
+ outputDir: resolved.outputDir,
145
+ scenarioHint: resolved.scenarioHint,
146
+ model: resolved.model,
147
+ klingPreset: resolved.klingPreset,
148
+ modelDisplayName: getModelDisplayName(resolved.model)
149
+ }, ".agents", true)
150
+ : { written: [], skipped: [] };
139
151
  // 2. Generate platform-specific config files
140
152
  const files = buildProjectFiles(resolved);
141
- const written = [...contentResult.written];
142
- const skipped = [...contentResult.skipped];
153
+ const written = [...contentResult.written, ...codexSkillMirrorResult.written];
154
+ const skipped = [...contentResult.skipped, ...codexSkillMirrorResult.skipped];
143
155
  for (const [relativePath, content] of Object.entries(files)) {
144
156
  const absolutePath = join(resolved.rootDir, relativePath);
145
157
  const fileExists = await exists(absolutePath);
@@ -1,4 +1,4 @@
1
- const ALL_PLATFORMS = ["cursor", "claude", "copilot", "antigravity"];
1
+ const ALL_PLATFORMS = ["cursor", "claude", "copilot", "antigravity", "codex"];
2
2
  const DEFAULT_MODEL = "veo31";
3
3
  const DEFAULT_KLING_PRESET = "ultra-realism";
4
4
  export function resolveOptions(input) {