This AIGC video generation dashboard is designed for real delivery scenarios. Its core capability is to unify Seedance 2.0 and Wan 2.7 in a single console, connecting task submission, team configuration, object storage, and cost tracking to solve a common problem: the model API works, but the business workflow does not. Keywords: video generation dashboard, team budget, object storage.
Technical Specifications Are Clear at a Glance
| Parameter | Description |
|---|---|
| Language | TypeScript |
| Frontend Framework | Next.js + React |
| ORM | Prisma |
| Local Database | SQLite |
| Production Database | MySQL / PostgreSQL |
| Styling | Tailwind CSS |
| Integrated Models | Seedance 2.0, Wan 2.7 |
| Object Storage Protocols | Volcano Engine TOS, Alibaba Cloud OSS |
| Repository | https://github.com/lcnwys/seedance2.0-AIGC-DASHBOARD |
| Star Count | Not provided in the source |
| Core Dependencies | Next.js, React, Prisma, Tailwind CSS |
This Project Is Not a Demo Page but a Deliverable Admin Console
This project focuses on a complete video generation business workflow rather than a demo that only displays model output. It unifies model integration, task tracking, budget constraints, team permissions, and asset storage in a single admin console, making it suitable for enterprise trial editions, private deployment prototypes, and internal studio tools.
The real problem it solves is not “how to call an API,” but “how to let non-engineering teams use video generation capabilities reliably.” This is exactly where many AIGC projects lose momentum when moving from experimentation to delivery.
A Unified Console Delivers More Value Than a Single Invocation Page
A single invocation page can only prove that a model works. It cannot support multi-user collaboration. A console-based architecture introduces team isolation, cost attribution, member permissions, and asset retention, making it capable of supporting real business workflows.
export async function createVideoTask(payload: VideoPayload) {
// Unified entry point: route to different vendor implementations by model type
const provider = resolveProvider(payload.model)
// Validate team budget and rate limits before submission
await assertTeamQuota(payload.teamId)
// Call the specific model service
return provider.submit(payload)
}
This code reflects the core design principle of a unified entry point with differentiated routing.
The Current Implementation Already Covers Mainstream Video Generation Model Integration
The project currently integrates two categories of model services: Volcano Engine’s doubao-seedance-2-0-260128 and doubao-seedance-2-0-fast-260128, as well as Alibaba Cloud’s wan2.7-r2v. The frontend provides a unified task entry, while the backend preserves model-specific parameter differences.
This design avoids over-abstraction in the name of standardization. Video size, generation modes, speed tiers, and parameter formats often differ across vendors. Forcing them into a completely flat abstraction only increases maintenance costs.
The Model Unification Layer Should Abstract Capabilities, Not Erase Differences
A better approach is to abstract three layers: submission, query, and result mapping, instead of abstracting every parameter. This allows the project to share one workspace while preserving vendor-specific features.
interface VideoProvider {
submit(payload: VideoPayload): Promise
<TaskResult>
query(taskId: string): Promise
<TaskStatus>
normalize(result: unknown): NormalizedVideoResult // Unified result structure
}
This interface definition shows that the project is well-positioned to expand to more video models.
Team Configuration and Budget Controls Are the Real Business Core
The project changes the account model from “individual user” to “create a team at signup.” The registrant becomes the default team administrator, and can then add members, configure API keys, limit concurrency, and assign budgets.
This step is critical. Model capabilities are usually bound to team resources rather than personal identities. Without a team-level dimension, you cannot properly support key management, budget pools, or permission boundaries.
Team-Level Configuration Directly Determines Deliverability
Each team can independently maintain its API key, model service endpoint, object storage strategy, maximum concurrency, per-minute submission limit, and member cooldown period. This aligns with enterprise delivery logic far better than relying on global environment variables.
const teamConfig = {
apiKey: encrypt(rawKey), // Sensitive information must be stored in encrypted form
maxConcurrency: 3,
maxRequestsPerMinute: 20,
memberCooldownSec: 15,
}
This configuration demonstrates the rate-limiting and security fundamentals that an admin system must provide.
The Task Workspace Carries Observability and Reconciliation Responsibilities
The unified task list supports viewing task status, submission time, model name, model ID, generation duration, output video, and cost information. This allows operations, product, and administrators to troubleshoot and reconcile usage from the same interface.
The project also supports statistics for success, failure, and in-progress states, as well as cost attribution at both the team and member levels. In AIGC systems, this matters more than simply “generation succeeded,” because cost overruns usually appear after batch invocations.
Output Assets Must Be Stored in Object Storage Instead of Temporary URLs
The project is compatible with Volcano Engine TOS and Alibaba Cloud OSS. Generated videos and uploaded source assets can both be stored in object storage for future reuse, review, and asset management.
npm install
npx prisma generate
npx prisma migrate deploy
npm run dev
# Access the dashboard
# http://localhost:8080
These commands install local dependencies, initialize the database, and start the development environment.
During Deployment, Environment Variables and Permission Consistency Are Two High-Risk Areas
The most critical environment variables are DATABASE_URL, JWT_SECRET, ENCRYPTION_KEY, APP_PUBLIC_BASE_URL, object storage credentials, and the default administrator account. After deployment, JWT_SECRET and ENCRYPTION_KEY must remain stable. Otherwise, user sessions may break or historical keys may become undecryptable.
Another common issue is team permission evaluation. The project includes two layers of validation: whether a user belongs to a team and whether the user is an administrator. If the frontend cache is stale, an administrator may be incorrectly treated as a regular member.
You Should Force a User State Refresh When the Dashboard Starts
The original project reduces cache-versus-database inconsistency by adding a /api/auth/me refresh mechanism. This is a highly pragmatic fix.
useEffect(() => {
// Proactively refresh the server-side user state after page load
fetch('/api/auth/me').then(syncCurrentUser)
}, [])
This logic ensures that frontend permission rendering remains aligned with the user’s actual role on the server.
The Key Directories Already Reveal Clear Extension Boundaries
If you want to customize the project quickly, focus first on app/api/generate/video/route.ts, lib/modules/video/*, app/api/tasks/*, lib/object-storage.ts, and the authentication module. These correspond to model integration, task management, asset storage, and the account system.
This directory structure shows that the project already has a modular foundation. You can later add invitation codes, a billing system, an agent system, or enterprise features without rebuilding the existing architecture.
 AI Visual Insight: This image shows an advertising slot in the page sidebar or content area rather than a project architecture diagram, so it does not provide meaningful technical detail. From a page-structure perspective, it indicates that the original page contains substantial non-content noise. During technical reconstruction, you should proactively remove irrelevant visual elements and preserve only high-value information such as the repository, models, deployment flow, and permission design.
If You Continue Evolving This Project, You Should Prioritize in Three Layers
The first priority is to complete the closed loop: registration, team creation, model key configuration, task submission, result viewing, and cost reconciliation. The second priority is to stabilize the administrator experience: permission evaluation, budget allocation, and member-view isolation. The third priority is business packaging: invitation codes, membership systems, recharge flows, and agent systems.
The principle behind this sequence is simple: first prove that the system can produce stable output, then optimize the management experience, and only after that build the commercial wrapper.
FAQ
Q1: Which teams can use this project most effectively right away?
A1: It is best suited for technical teams, studios, and private delivery teams that need to quickly build a video generation backend, especially for enterprise trial editions, partner demo environments, and internal production tools.
Q2: Why is building only a model invocation page not recommended?
A2: Because real business workflows require permissions, budgets, task tracking, and asset retention. A simple invocation page cannot support multi-user collaboration, cost control, or ongoing operations.
Q3: Which parts should be modified first during secondary development?
A3: Start with model configuration, team permissions, and the end-to-end task loop. Make sure generation, querying, storage, and reconciliation work reliably before expanding into commercial modules such as membership, recharge, and agent systems.
[AI Readability Summary]
This article reconstructs a video generation dashboard architecture for enterprise delivery scenarios. It explains how to use Next.js, Prisma, and team-based configuration to unify Seedance 2.0 and Wan 2.7, while enabling task management, object storage, budget tracking, and permission control.