- 新增 minimax-tts.js 和 minimax-voice-clone.js 脚本 - 新增口播批量剪辑流水线 (口播_assemble.js, 口播_pipeline.js) - 更新 video-from-script 各阶段脚本 (kling, images, tts, videos) - 新增执黑先行二号-风格延伸账号 - 更新执黑先行 account.json 配置 - 替换 ugc_product_seeding 参考图 - 更新 CLAUDE.md 和依赖配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
313 lines
29 KiB
JavaScript
313 lines
29 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* 执黑先行二号-风格延伸 — 9 风格批量测试
|
||
* 文案:仁慈的父,我已坠入,看不见罪的国度.
|
||
* 每个风格:1张图 + 1个视频片段 + TTS + 成片
|
||
*/
|
||
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
const { execSync, spawnSync } = require('child_process')
|
||
|
||
const SCRIPT_DIR = path.join(__dirname, '.claude/skills/video-from-script/scripts')
|
||
const OUTPUT_BASE = path.join(__dirname, 'output')
|
||
const ACCOUNT = '执黑先行二号-风格延伸'
|
||
const SCRIPT_TEXT = '仁慈的父,我已坠入,看不见罪的国度.'
|
||
const TTS_DURATION = 3.0 // 15字 ÷ 5字/秒
|
||
|
||
// 9 风格配置
|
||
const STYLES = [
|
||
{
|
||
name: '剪纸报',
|
||
voice: '高智女孩',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/剪纸报/7b730552-efb6-426a-ae69-d2c8d396fe16.png'
|
||
],
|
||
shotDesc: 'A silhouetted figure in mid-fall through layers of tearing vintage newspaper front pages, arms outstretched, coat billowing. Dollar bills and torn newspaper headlines swirl in the air. City skyline visible through disintegrating collage. Scene already in motion when clip begins.',
|
||
imagePrompt: `Vintage editorial newspaper collage illustration style. A silhouetted figure in mid-fall through layers of tearing vintage newspaper front pages, arms outstretched, coat billowing dramatically. Dollar bills and torn newspaper headlines swirl in the air around the falling figure. The figure descends through a cathedral of crumbling paper, city skyline visible through the disintegrating collage. Aged sepia and golden-brown paper tones, deliberate ink stains and typography fragments bleeding into the image. Layers of collaged newsprint create a textured patchwork background — headlines suggesting wealth, corruption, and divine judgment visible in torn edges. Strong chiaroscuro lighting from above, casting deep shadows through paper tears. Retro pulp fiction meets documentary photojournalism meets fine art collage. The paper architecture collapses inward like a cathedral ceiling failing. Dramatic perspective on the falling figure. Warm amber, faded cream, black ink, and deep crimson accent colors. No digital smoothness — everything textured, tactile, aged. Visible paper grain, crease lines, watermarks. Vertical format 9:16, cinematic composition, full bleed, no border, no frame, no margin, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,画面中纸张和人影已在高速运动中】
|
||
|
||
主体动作(第0帧立即发生):人物剪影从画面上方快速下坠,报纸页面随冲击撕裂飞散,美元纸币如暴风雪般向四周旋飞,人物外套随剧烈下落猛然向上翻起——整个下坠过程充满力量感和速度感。
|
||
|
||
环境响应(中间2-3秒):撕碎的报纸版面继续从四面涌入,包裹着下坠的身影,金色琥珀色的旧纸张与深色墨迹在空中形成漩涡,远处城市剪影透过纸张撕裂处若隐若现。
|
||
|
||
结尾:人物下坠至画面中央,一堆纸张轰然坍塌向下压,镜头跟随向下快速冲去。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '反向达尔文',
|
||
voice: '嘴硬竹马',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/反向达尔文/微信图片_20260522232915_271_18.png',
|
||
'/Users/lc/Pictures/参考图片/反向达尔文/微信图片_20260522232915_276_18.png',
|
||
'/Users/lc/Pictures/参考图片/反向达尔文/微信图片_20260522232915_279_18.png'
|
||
],
|
||
shotDesc: 'A lone woman in flowing white traditional robes stands waist-deep in a still lotus pond, head tilted back in surrender, arms raised — posture of falling backward. A crimson lantern glows below the water surface. A greyhound dog watches from the stone landing. Ethereal misty Chinese aesthetic.',
|
||
imagePrompt: `Hyperrealistic cinematic photography merged with traditional Chinese aesthetic. A lone woman in flowing white silk traditional robes stands waist-deep in a perfectly still lotus pond, head tilted far back in surrender, arms slightly raised — the posture of someone falling backward into water. Lotus leaves spread across the misty surface. Her white robes float and spread like ink dissolving in water. A crimson paper lantern glows faintly below the water surface directly beneath her, its warm light refracting upward through the still water, illuminating her submerged robes from below. The sky above is heavy with silver-grey mist, merging with the pale lotus pond horizon. Behind her, a lone greyhound dog sits on an ancient stone landing at the pond's edge, watching silently with absolute stillness. Deep cinematic color palette: warm crimson and gold from the submerged lantern, silver-grey atmospheric mist, pure white silk, dark jade water. Atmospheric, melancholic, mythological mood. Shallow depth of field, anamorphic cinematic bokeh on the background. The composition suggests a figure between two worlds — earthly and divine. Ancient Chinese architecture barely visible in the far mist. Vertical format 9:16, cinematic composition, full bleed, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,白衣女子已在向后倾倒中】
|
||
|
||
主体动作(第0帧立即发生):白衣女子猛然向后仰倒入莲花池,白色丝绸袍服在水面猛然展开如花,莲花花瓣随冲击力向四周飞射——同时水面之下那盏红灯笼猛然向上冲起一道红光穿透水面,与下沉的白袍形成强烈对比。
|
||
|
||
环境响应(中间2-3秒):水面震荡产生大圆形波纹向外扩散,莲叶随冲击剧烈颤动,远处的灵缇犬猛然抬头直视镜头,晨雾在扰动中快速流动。
|
||
|
||
结尾:镜头快速从俯拍切换至水面下仰拍——红灯笼光芒从水下向上照射,白袍在水中如仙女下凡般展开,画面戛然而止。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '梦核人物',
|
||
voice: '温暖少女',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/梦核人物/微信图片_20260522232203_259_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核人物/微信图片_20260522232204_260_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核人物/微信图片_20260522232204_261_18.png'
|
||
],
|
||
shotDesc: 'Aerial top-down view: a girl in white dress lies spread-eagled on deep teal water surface, already sinking, arms wide, hair fanning around her. A massive luminous white koi fish circles slowly from the deep below. Café chairs visible at pool edge. Dreamcore descent.',
|
||
imagePrompt: `Dreamcore digital illustration, aerial top-down perspective looking straight down. A girl in a flowing white dress lies spread-eagled on the surface of a deep teal-green pool, face upturned toward the sky and toward the viewer, arms wide open, hair fanning around her head on the water surface — already beginning to sink, body halfway between floating and submerging. A massive luminous white koi fish with flowing fins and tail circles slowly beneath her in the translucent dark depths, visible through the water as a glowing white form below her. White flower petals and floating foam scatter across the teal water surface around her white dress. Café tables and chairs visible at the pool edge periphery. Soft aquamarine, ivory white, and deep jade color palette. Warm afternoon light filtering from above creating soft diffused shadows on the water surface. The girl's expression is peaceful, eyes closed, completely surrendered. Dreamcore atmosphere — surreal, serene, and gently melancholic. Painterly soft digital illustration texture with visible soft brushwork. The composition implies descent — she is falling upward into the sky or falling downward into the water, the top-down perspective makes the direction of fall ambiguous and dreamlike. Vertical format 9:16, cinematic composition, full bleed, no border, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,俯视视角,少女已在水面上缓缓下沉】
|
||
|
||
主体动作(第0帧立即发生):从正上方鸟瞰,身着白裙的少女在水面上缓缓向下沉入青绿色的水中,白裙在水中如花朵般展开,发丝在水中向上漂浮——沉入和上浮两种运动同时发生,制造梦幻的漂浮感。水下的白色锦鲤猛然加速游向少女,裂开的水面泛出涟漪。
|
||
|
||
环境响应(中间2-3秒):水面花瓣随涟漪向外漂散,池边咖啡椅倒影在波动中扭曲,阳光在水面形成光斑随波纹闪烁跳动。
|
||
|
||
结尾:镜头缓缓下沉进入水面,从水下向上仰望白裙少女的身影,白色锦鲤游过镜头前。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '梦核怪异城市',
|
||
voice: '不羁青年',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/梦核怪异城市/微信图片_20260522231537_252_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核怪异城市/微信图片_20260522231537_253_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核怪异城市/微信图片_20260522231537_254_18.png'
|
||
],
|
||
shotDesc: 'A lone silhouetted figure in mid-fall descends through a surreal cityscape where building facades tilt and fold impossibly inward. Giant Chinese advertisement signs hang at wrong angles. A single cat sits calmly on a crumbling ledge, watching. Dense amber fog below. Scene mid-fall.',
|
||
imagePrompt: `Surreal dystopian cityscape photography with impossible geometry. A lone silhouetted figure in mid-fall descends through a breaking cityscape where building facades tilt and curve impossibly, as if the entire city is folding inward like a closing book. Massive Hong Kong-style building facades with giant illuminated Chinese advertisement signs hang at wrong impossible angles — some perpendicular to gravity, some tilted nearly upside down. The architecture wraps around the falling figure creating a vortex of concrete and neon. A single cat sits calmly on a crumbling concrete ledge in the foreground, watching the falling figure with absolute stillness and disinterest. Dense amber and charcoal-grey fog fills the spaces between buildings below. The figure falls in perfect stillness — coat billowing, arms at sides, face turned slightly, completely surrendered to the descent. Gritty photorealistic texture — concrete, rusted metal, cracking cement. Color palette: amber fog glow, deep charcoal grey, pale concrete, neon Chinese characters bleeding color into fog. The scene has the quality of a lucid dream — familiar urban architecture made deeply uncanny by impossible physics. Low-angle looking-up perspective emphasizing height and disorientation. Vertical format 9:16, cinematic composition, full bleed, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,城市建筑已在向内折叠塌陷中,人影已在下坠中】
|
||
|
||
主体动作(第0帧立即发生):人物剪影从画面高处快速向下坠落,周围的香港式建筑立面随冲击向内折叠崩塌——巨型中文广告牌猛然向内倾倒,楼栋墙面在人物下坠路径两侧向内挤压,整座城市像纸箱被压扁般向中心塌陷。
|
||
|
||
环境响应(中间2-3秒):橙色雾霾光在建筑碎裂的缝隙中爆射出来,路边的独行猫猛然弓背直立,广告牌霓虹灯在震动中快速闪烁熄灭,城市的折叠越来越快。
|
||
|
||
结尾:人物下坠加速,城市彻底合拢——画面瞬间被建筑黑影吞没,只余远处一道橙色城市光线。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '梦核水池',
|
||
voice: '傲娇御姐',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/梦核水池/微信图片_20260522230621_239_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核水池/微信图片_20260522230621_245_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核水池/微信图片_20260522232446_266_18.png'
|
||
],
|
||
shotDesc: 'A solitary woman stands at the center of a completely empty drained indoor swimming pool. A single perfect rectangular opening in the concrete ceiling reveals darkening storm clouds above. She faces upward, cold and sovereign, completely alone. Water seeping around her feet from nowhere.',
|
||
imagePrompt: `Liminal space architectural photography, hyperrealistic. A solitary woman stands at the exact center of a completely empty indoor swimming pool — the pool fully drained, white ceramic tiles covering every surface, floor, walls, and ceiling in perfect geometric monotony. The tiles are immaculate in their endless repetition. A single perfect rectangular opening cut into the concrete ceiling directly above reveals a heavy dramatic storm sky outside — dark clouds gathering with electricity, a pale sliver of sky visible. Light falls in a single vertical shaft from this opening, illuminating only the figure standing below. The figure is a woman with cold composed features, face upturned toward the sky, expression imperious and emotionally distant yet intensely present. She stands with hands at sides, spine straight, a figure of absolute self-possession in an impossible situation. Dark water-stain rings mark the empty pool walls at the old waterline. The tiles gleam with residual dampness. Color palette: cold blue-grey, bone-white tile, single shaft of pale silver light, dark storm-sky rectangle above. Oppressive, controlled, liminal space. The quiet before the inevitable fall. Architecture is the character — vast, empty, perfectly ordered in its abandonment. Vertical format 9:16, cinematic composition, full bleed, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,女子已在缓缓抬头仰望,水已在悄然上涨】
|
||
|
||
主体动作(第0帧立即发生):空池中心的女子猛然仰头,目光直视头顶矩形天窗——天空中乌云快速翻涌,向那个矩形开口聚集。地面无来源的水从池底四角同时涌出,蔓延速度加快,没过女子的鞋面向踝部上涌。女子纹丝不动,神情冷傲,水涌而她不退。
|
||
|
||
环境响应(中间2-3秒):天窗外的乌云将矩形光柱由白变灰变暗,瓷砖墙面在变暗的光线中显得更加冷冽,水面倒映出渐暗的天光快速扭曲。
|
||
|
||
结尾:镜头从低角度缓慢仰起——女子脚踝已被水没过,镜头继续抬高直至仰望那个渐渐被乌云封闭的天窗矩形,戛然而止。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '梦核花池',
|
||
voice: '嚣张小姐',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/梦核花池/微信图片_20260522231256_246_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核花池/微信图片_20260522231256_247_18.png',
|
||
'/Users/lc/Pictures/参考图片/梦核花池/微信图片_20260522231256_248_18.png'
|
||
],
|
||
shotDesc: 'Looking upward from underwater through dark water at stone stairs completely draped in submerged blooming roses. A silhouetted figure falls downward through the flowers feet-first, petals swirling in the slow descent. Light filters down from the distant surface far above.',
|
||
imagePrompt: `Dark underwater floral photography, cinematic and deeply rich. Perspective looking upward from deep underwater through layers of murky translucent water at an ancient stone staircase completely draped in submerged blooming roses — red, dusty pink, cream white — their petals swaying in slow underwater currents, fully saturated with color even in the dark water. A silhouetted figure falls downward through the flowers feet-first, descending the submerged staircase in a controlled fall, body elongated by the deep perspective — petals swirl around the falling body like a floral vortex. Light filters down from a distant water surface far above, creating divine god-rays through the dense floral layers. The upper reaches of the image are brighter where light penetrates; the lower depths where the figure falls toward are darker, more mysterious, the roses there in deeper shadow. Rich jewel tones: deep burgundy, forest emerald, obsidian black, dusty rose, old gold. The roses are hyper-detailed — every petal individually rendered, slightly translucent in the underwater light, petals showing veins and texture. The stone stairs are moss-covered, ancient, submerged for centuries. Equal measures of beauty and darkness. Romantic and ominous simultaneously. Vertical format 9:16, cinematic composition, full bleed, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,已在水下,人影已在下坠中,花朵已在水中旋舞】
|
||
|
||
主体动作(第0帧立即发生):从水下向上仰视,一道人影脚朝下猛然从水面破入,冲击产生巨大气泡云和花瓣旋涡——玫瑰花瓣被下坠冲击力向四周撕散,红白粉三色花瓣在深水中旋转飞舞,人影穿过花瓣的旋涡向水底深处坠去。
|
||
|
||
环境响应(中间2-3秒):石阶上的玫瑰随水流震动整齐颤抖,从深处透下来的光芒随人影下坠越来越暗,大量气泡从人影周围急速上升穿过镜头。
|
||
|
||
结尾:人影坠入深处黑暗中,花瓣继续旋舞,最后一道玫瑰花瓣缓缓飘过镜头——慢动作,画面静止在花瓣特写。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '毛毡风格',
|
||
voice: '搞笑大爷',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/毛毡风格/0d5d2aad-496f-46ae-8467-80de136242ae.png'
|
||
],
|
||
shotDesc: 'A tiny felt-crafted elderly figure tumbles gently end-over-end through golden felt clouds and sky, their tiny wool dog reaching upward from the felt meadow below. Felt mountains in background, warm amber light. Hyper-detailed fabric textures.',
|
||
imagePrompt: `Handmade felt craft stop-motion animation aesthetic, hyper-detailed photography of miniature felt figures. A tiny felt-crafted figure — an elderly man made of stitched wool and felt fabric, wearing an oversized handmade straw hat — tumbles slowly end-over-end through the air between felt golden rice paddy fields and handmade felt clouds above. The figure's arms are outstretched, small felt boots visible, his expression one of gentle bewilderment. A tiny fluffy felt dog companion stretches its wool paws upward from the golden felt meadow below, trying to reach the falling figure, tail wagging. Felt thatched-roof farmhouses dot the background rolling hills, all stitched in warm earthy fabric. The entire world is constructed from felt, wool, and stitched fabric — every surface shows material texture: weave patterns, thread loops, fabric grain, button details. Color palette: harvest gold, earthy brown, warm cream, muted sage green, terracotta. Warm amber sunset light illuminating the felt textures. Extreme shallow depth of field — the felt landscape melts into warm bokeh behind the crisp foreground figures. The scene carries gentle melancholy — a tiny figure falling through a handmade world. Meticulous craft: buttons as rocks, yarn as grass, embroidery thread as flower stems. Vertical format 9:16, cinematic composition, full bleed, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,毛毡老爷爷已在空中翻滚中】
|
||
|
||
主体动作(第0帧立即发生):戴着大草帽的毛毡老爷爷在空中缓慢欢乐地翻着跟头下坠,他的帽子在空中打转,毛线外套的扣子在翻滚中一个个弹开——慢动作翻滚,每一个细节都展示毛毡材质:绒毛在空气中漂起,缝线在阳光中闪光。地面的小毛毡小狗四条腿乱蹬,拼命向上跳跃够不到他。
|
||
|
||
环境响应(中间2-3秒):毛毡稻田里的金色禾苗随风摆动,毛毡云朵被老爷爷翻滚划过,形状变形后弹回,远处的毛毡茅草屋随晃动轻微抖动。
|
||
|
||
结尾:老爷爷悠哉地双手抱头继续翻滚下坠,小狗在地面急速原地转圈,最后镜头从老爷爷第一视角快速向地面冲去——金色稻田迎面扑来。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '水墨',
|
||
voice: '高智女孩',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/水墨/5bbcc329-dd8e-4b84-b901-97daa00943c9.png'
|
||
],
|
||
shotDesc: 'A lone ink-wash scholar figure descends from the top of a rice-paper scroll toward a swirling dark ink cloud below — as if falling into an abyss. The figure\'s robes trail in calligraphic brushstrokes. A second figure kneels watching from the lower corner.',
|
||
imagePrompt: `Traditional Chinese ink wash painting on aged rice paper, masterwork quality. A lone scholar figure rendered in flowing black ink descends from the top of the composition toward a swirling mass of dark ink smoke rising from below — as if falling into a dark cloud or portal. The figure's robes trail in elegant dry-brush calligraphic strokes, ink bleeding outward where the brush pressed hard then lifted. The ink cloud below opens like a gate or abyss — turbulent, darker and denser at its center, with delicate ink tendrils reaching upward toward the falling figure like hands beckoning. The composition leaves vast areas of the rice paper untouched — pure white negative space — making the falling figure and the ink cloud feel isolated and cosmically significant. Subtle ink wash gradient in the background suggests atmospheric distance. A second shadowed scholar figure kneels at the lower left corner, head bowed in witness or prayer, observing the descent. Ink values range from pure dense black at the cloud center to pale diluted grey washes at the composition edges. Fine calligraphic brushwork details — individual brushstrokes visible, the speed and pressure of the brush hand implied in every mark. The texture of the aged rice paper is palpable — slight yellow warmth to the white. A small red seal impression stamp in the lower right corner. Vertical format 9:16, full bleed composition, no additional text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,水墨人影已在宣纸上快速下坠中,墨迹已在扩散】
|
||
|
||
主体动作(第0帧立即发生):水墨文人身影从宣纸卷轴顶端向下俯冲,身形在运动中变形为浓墨笔触——袍袖拖出长长的笔划痕迹,像巨型毛笔在纸上快速下行。下方的墨云汹涌向上涌出,两股墨色相向运动形成猛烈碰撞,宣纸在撞击处洇染开来,墨晕快速向四周扩散。
|
||
|
||
环境响应(中间2-3秒):碰撞中心的墨迹快速向外晕染,形成大片水墨渍,枯笔飞白效果在运动中显现,宣纸纸面纹理在墨迹的浸润中改变。
|
||
|
||
结尾:人影被墨云完全吞没——只剩笔划痕迹,像一行行草书留在宣纸上,最后镜头缓缓拉远,整张宣纸如一幅成画呈现。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
},
|
||
{
|
||
name: '硬核线条',
|
||
voice: '不羁青年',
|
||
refs: [
|
||
'/Users/lc/Pictures/参考图片/硬核线条/微信图片_20260522223358_119_18.png',
|
||
'/Users/lc/Pictures/参考图片/硬核线条/微信图片_20260522223358_120_18.png',
|
||
'/Users/lc/Pictures/参考图片/硬核线条/微信图片_20260522223358_121_18.png'
|
||
],
|
||
shotDesc: 'A lone dark figure tilts backward in deliberate fall, arms spread wide against a blazing crimson backdrop. Surrounded by jazz musician silhouettes who continue playing uninterrupted. Mid-fall, bold geometric graphic lines. Theatrical art deco composition.',
|
||
imagePrompt: `Bold art deco graphic illustration with hard geometric lines and pure flat color blocks. Mid-century theatrical poster aesthetic merged with graphic novel. A single central figure tilts backward in a deliberate slow fall, arms spread wide — the posture of surrender and descent, body at 45 degrees backward — set against an intense blazing crimson and deep cobalt blue background. Surrounding the falling figure: multiple jazz musician silhouettes — a bassist hunched over their instrument, a pianist with hands on keys, a trumpeter with horn pointed skyward — all rendered as flat black silhouettes with bold geometric outlines, continuing to play completely unperturbed by the falling figure. The entire image is composed of hard-edged flat color blocks: deep vermilion red, cobalt navy blue, pitch black, and strategic metallic gold. Zero gradients, zero soft shadows — pure geometric color blocking throughout. The falling figure alone has slightly more detail than the musician silhouettes — a face visible in three-quarter view, expression serene and knowing, eyes open. Thick confident black outlines define every shape edge. The composition suggests a theatrical stage — the musicians are the world that keeps playing as the figure falls. Strong vertical composition. Vertical format 9:16, cinematic composition, full bleed, no border, no text, no watermark, no logo.`,
|
||
videoPrompt: `【0帧动原则:视频从第一帧开始,中心人物已在向后倾倒中,爵士乐手剪影已在演奏高潮中】
|
||
|
||
主体动作(第0帧立即发生):中心人物猛然向后仰倒,双臂大张——衣摆随后仰动作猛烈向上翻起,几何线条随人物后倒如刀刻般向上划开,红色背景的几何色块随冲击碎裂重组。周围爵士乐手剪影对此无动于衷,继续以更激烈的幅度演奏——贝斯手低头猛拨,钢琴手双手砸键,号手仰角吹奏。
|
||
|
||
环境响应(中间2-3秒):极粗黑色轮廓线在冲击中震动,硬边几何色块开始快速交替闪烁——红、蓝、黑、金四色高频切换,舞台强光从多角度同时打亮。
|
||
|
||
结尾:人物后倒至水平定格,所有几何线条聚焦到倒地人物身上形成放射状线条爆发,然后整个画面切黑,一道金色轮廓线还亮着。
|
||
|
||
竖版9:16画幅,无字幕,无水印。`
|
||
}
|
||
]
|
||
|
||
// ============================================================================
|
||
// 主执行函数
|
||
// ============================================================================
|
||
|
||
async function main() {
|
||
console.log(`\n${'='.repeat(60)}`)
|
||
console.log(`执黑先行二号-风格延伸 — 9 风格批量测试`)
|
||
console.log(`文案:${SCRIPT_TEXT}`)
|
||
console.log(`${'='.repeat(60)}\n`)
|
||
|
||
const results = []
|
||
|
||
for (let i = 0; i < STYLES.length; i++) {
|
||
const style = STYLES[i]
|
||
const styleNum = String(i + 1).padStart(2, '0')
|
||
const dirName = `执黑先行二号-风格延伸_20260523_${styleNum}_${style.name}`
|
||
const outputDir = path.join(OUTPUT_BASE, dirName)
|
||
|
||
console.log(`\n[${styleNum}/09] 开始:${style.name} | 音色:${style.voice}`)
|
||
console.log('-'.repeat(50))
|
||
|
||
// 创建输出目录
|
||
fs.mkdirSync(outputDir, { recursive: true })
|
||
fs.mkdirSync(path.join(outputDir, 'images'), { recursive: true })
|
||
fs.mkdirSync(path.join(outputDir, 'audio'), { recursive: true })
|
||
fs.mkdirSync(path.join(outputDir, 'videos'), { recursive: true })
|
||
|
||
// 构建 manifest
|
||
const manifest = {
|
||
account: ACCOUNT,
|
||
imageModel: 'gemini',
|
||
videoModel: 'kling',
|
||
format: '9:16',
|
||
mode: 'single',
|
||
ttsEngine: 'minimax',
|
||
ttsVoice: style.voice,
|
||
ttsRate: 1.0,
|
||
references: style.refs.map(f => ({ file: f })),
|
||
estimatedVideoDuration: 6,
|
||
items: [
|
||
{
|
||
id: 1,
|
||
status: 'pending',
|
||
shotDesc: style.shotDesc,
|
||
script: SCRIPT_TEXT,
|
||
duration: TTS_DURATION,
|
||
directorRef: 'kitano',
|
||
imagePrompt: style.imagePrompt,
|
||
videoPrompt: style.videoPrompt
|
||
}
|
||
],
|
||
pipeline: {
|
||
phases: {
|
||
tts: 'pending',
|
||
images: 'pending',
|
||
upload: 'pending',
|
||
videos: 'pending',
|
||
assemble: 'pending'
|
||
}
|
||
}
|
||
}
|
||
|
||
const manifestPath = path.join(outputDir, 'manifest.json')
|
||
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8')
|
||
console.log(` ✅ Manifest 创建: ${manifestPath}`)
|
||
|
||
// 运行 pipeline
|
||
console.log(` 🚀 开始执行 pipeline...`)
|
||
const result = spawnSync('node', [
|
||
path.join(SCRIPT_DIR, 'pipeline.js'),
|
||
'run',
|
||
'--manifest', manifestPath,
|
||
'--phase', 'tts,images,upload,videos,assemble'
|
||
], {
|
||
cwd: __dirname,
|
||
encoding: 'utf-8',
|
||
timeout: 600000, // 10 分钟
|
||
stdio: 'inherit'
|
||
})
|
||
|
||
if (result.status === 0) {
|
||
// 读取完成后的 manifest
|
||
const finalManifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))
|
||
const draftUrl = finalManifest.draftUrl || '(assemble 未返回 draftUrl)'
|
||
console.log(` ✅ 完成 | draftUrl: ${draftUrl}`)
|
||
results.push({ style: style.name, voice: style.voice, status: 'done', draftUrl, outputDir: dirName })
|
||
} else {
|
||
console.log(` ❌ 失败 (exit ${result.status})`)
|
||
results.push({ style: style.name, voice: style.voice, status: 'failed', outputDir: dirName })
|
||
}
|
||
}
|
||
|
||
// 输出最终汇总
|
||
console.log(`\n${'='.repeat(60)}`)
|
||
console.log('批量测试完成 — 结果汇总')
|
||
console.log(`${'='.repeat(60)}`)
|
||
console.log('')
|
||
console.log('| # | 风格 | 音色 | 状态 | 草稿地址 |')
|
||
console.log('|---|------|------|------|---------|')
|
||
results.forEach((r, i) => {
|
||
const num = String(i + 1).padStart(2, '0')
|
||
const status = r.status === 'done' ? '✅' : '❌'
|
||
const url = r.draftUrl || '-'
|
||
console.log(`| ${num} | ${r.style} | ${r.voice} | ${status} | ${url} |`)
|
||
})
|
||
console.log('')
|
||
|
||
// 保存结果到文件
|
||
const resultPath = path.join(OUTPUT_BASE, '执黑先行二号-风格延伸_20260523_测试结果.json')
|
||
fs.writeFileSync(resultPath, JSON.stringify(results, null, 2), 'utf-8')
|
||
console.log(`结果已保存: ${resultPath}`)
|
||
}
|
||
|
||
main().catch(err => {
|
||
console.error('脚本执行失败:', err.message)
|
||
process.exit(1)
|
||
})
|