可用积分
当前积分
累计获得
累计消耗
暂无积分流水
GENVIA
[
...(d?.characters||[]).map(c=>c.uuid+'|'+(c.avatar_url||c.image_url)),
...(d?.scenes||[]).map(s=>s.uuid+'|'+s.image_url),
...(d?.props||[]).map(p=>p.uuid+'|'+p.image_url),
...(d?.creatures||[]).map(c=>c.uuid+'|'+c.image_url),
].join(',');
if (imgKey(data) !== imgKey(assets)) assets = data;
} else {
artifactData = data;
}
}
}
"
@genvia:open-artifact.window="
const { type, data } = $event.detail;
if (type && data != null && type !== 'character' && type !== 'scene') {
const labels = {
drama_outline: window.i18n?.t('ui.artifact.story_outline.100') || '故事大纲',
script: window.i18n?.t('ui.artifact.story_script.113') || '故事剧本',
storyboard: window.i18n?.t('ui.artifact.story_storyboard.120') || '故事分镜',
};
_cache[type] = { data, title: data?.title || data?.name || labels[type] || type };
}
"
@storyboard-edit-open="openStoryboardEditor($event.detail)"
@genvia:storyboard-editor-close.window="closeStoryboardEditor()"
@artifact-panel-switch.window="
const step = $event.detail.step;
const labels = {
drama_outline: window.i18n?.t('ui.artifact.story_outline.100') || '故事大纲',
script: window.i18n?.t('ui.artifact.story_script.113') || '故事剧本',
storyboard: window.i18n?.t('ui.artifact.story_storyboard.120') || '故事分镜',
assets: window.i18n?.t('ui.artifact.assets_materials.126') || '资产素材',
video: window.i18n?.t('ui.artifact.video_production.127') || '视频制作',
};
// 重置所有面板特定状态(assets 不在此处重置,避免切换时出现空帧闪烁)
storyboardEditOpen = false;
storyboardEditData = null;
storyboardAssetPickerOpen = false;
storyboardAssetPickerLoading = false;
storyboardAssetPickerTab = 'characters';
storyboardAssetPickerExpandedGroups = { characters: null, scenes: null, props: null, creatures: null };
storyboardAssetPickerSelected = { characters: null, scenes: null, props: null, creatures: null };
if (step === 'assets') {
artifactTitle = window.i18n?.t('ui.artifact.assets_materials.126') || '资产素材';
{
const cached = (_cache['assets'] || (window._genviaArtifactCache || {})['assets']);
if (cached) {
// 有缓存,直接使用
assets = cached.data;
artifactData = cached.data;
artifactType = 'assets';
assetsLoading = false;
} else {
// 无缓存,设置加载状态,不显示空数据
artifactType = 'assets';
artifactData = null;
assetsLoading = true;
}
// 从多个来源获取 dramaId(优先从缓存)
const dramaId = _cache['drama_outline']?.data?.drama_id
|| _cache['script']?.data?.drama_id
|| window.SessionManager?.getCurrentDramaId?.();
if (dramaId && !window._testAgentMode && !cached) {
const fetcher = window.AuthManager?.fetchWithAuth?.bind(window.AuthManager) || fetch;
fetcher('/api/entities/?drama_id=' + dramaId)
.then(r => r.json())
.then(data => {
const d = { characters: data.characters || [], scenes: data.scenes || [], props: data.props || [], creatures: data.creatures || [] };
window._genviaArtifactCache = window._genviaArtifactCache || {};
window._genviaArtifactCache['assets'] = { data: d, title: window.i18n?.t('ui.artifact.assets_materials.126') || '资产素材' };
assetsLoading = false;
window.dispatchEvent(new CustomEvent('genvia:artifact-available', { detail: { type: 'assets', data: d, title: window.i18n?.t('ui.artifact.assets_materials.126') || '资产素材' } }));
}).catch(e => {
console.error('[artifact-panel] fetch assets failed:', e);
assetsLoading = false;
});
} else if (!cached) {
// 没有 dramaId 或测试模式,显示空状态
assetsLoading = false;
const empty = defaultAssets();
assets = empty;
artifactData = empty;
}
}
} else if (_cache[step] || (window._genviaArtifactCache || {})[step]) {
const entry = _cache[step] || window._genviaArtifactCache[step];
artifactType = step;
artifactData = entry.data;
artifactTitle = entry.title || labels[step] || step;
} else {
artifactType = step;
artifactData = null;
artifactTitle = labels[step] || step;
}
"
>
选择音色
已选:
点击卡片选择音色
可用积分
当前积分
累计获得
累计消耗
暂无积分流水
项目信息
项目参数
默认图片模型
用于文生图、图生图的首选模型
默认视频模型
自动生成分镜视频会默认使用该模型
默认画风
应用于所有图像、视频生成,以保持视觉统一
默认视频比例
应用于视频与动效的导出比例
角色列表
场景列表
请从左侧选择场景
道具列表
生物列表
造型
GENVIA
·
网页端
Seedance2.0
上线啦
Seedance 2.0 震撼首发!
真人短剧一键生成
GENVIA解锁最强视频模型——对话即刻成片
角色
场景