Initial commit: Pixel AI comic/video creation platform

- FastAPI backend with SQLModel, Alembic migrations, AgentScope agents
- Next.js 15 frontend with React 19, Tailwind, Zustand, React Flow
- Multi-provider AI system (DashScope, Kling, MiniMax, Volcengine, OpenAI, etc.)
- All HTTP clients migrated from sync requests to async httpx
- Admin-managed API keys via environment variables
- SSRF vulnerability fixed in ensure_url()
This commit is contained in:
张鹏
2026-04-29 01:20:12 +08:00
commit f9f4560459
808 changed files with 151724 additions and 0 deletions

88
frontend/next.config.mjs Normal file
View File

@@ -0,0 +1,88 @@
/** @type {import('next').NextConfig} */
// 服务端 rewrites 转发目标;浏览器端 Base 由 NEXT_PUBLIC_API_URL 控制(见 src/lib/client.ts
const API_URL = process.env.API_URL || 'http://localhost:8000';
const nextConfig = {
output: 'standalone',
experimental: {
optimizePackageImports: [
'@lobehub/icons',
'lucide-react',
'framer-motion',
'@radix-ui/react-dialog',
'@radix-ui/react-dropdown-menu',
'@radix-ui/react-select',
'@radix-ui/react-tabs',
],
// Increase proxy timeout for long-running AI operations
proxyTimeout: 300000, // 5 minutes
},
// Server response timeout
serverExternalPackages: [],
images: {
// 本地开发环境下关闭 Next 图片优化,避免在受限网络环境中请求 OSS 导致 _next/image 500
unoptimized: process.env.NODE_ENV === 'development',
dangerouslyAllowSVG: true,
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
remotePatterns: [
{
protocol: 'https',
hostname: '**.aliyuncs.com',
},
{
protocol: 'http',
hostname: '**.aliyuncs.com',
},
{
protocol: 'http',
hostname: 'localhost',
},
{
protocol: 'https',
hostname: 'api.dicebear.com',
}
]
},
async rewrites() {
return [
{
source: '/api/:path*',
destination: `${API_URL}/api/:path*`,
},
{
source: '/files/:path*',
destination: `${API_URL}/files/:path*`,
},
{
source: '/uploads/:path*',
destination: `${API_URL}/uploads/:path*`,
},
{
source: '/config/:path*',
destination: `${API_URL}/config/:path*`,
},
{
source: '/projects/:path*',
destination: `${API_URL}/projects/:path*`,
},
{
source: '/generations/:path*',
destination: `${API_URL}/generations/:path*`,
},
{
source: '/storage/:path*',
destination: `${API_URL}/storage/:path*`,
},
{
source: '/chat/:path*',
destination: `${API_URL}/chat/:path*`,
},
{
source: '/health',
destination: `${API_URL}/health`,
}
];
},
};
export default nextConfig;