The brief I set myself: an award-show style portfolio where the central 3D element is me. A camera orbits around me as you scroll, my name tracks in letter by letter, and two more AI-generated films anchor the content sections. Everything on the finished site was generated, coded, debugged and deployed in a single day. This is the full build log.
What is Seedance 2.0?
Seedance 2.0 is ByteDance's reference-driven video generation model. It accepts image, video and audio references, holds character identity across generations, and outputs 4 to 15 second clips at up to 4K in standard mode. That reference-driven part is the entire reason this project works: a portfolio starring an AI-generated stranger would be pointless.
The identity lock: one face across three clips
The single most important decision came before any prompt was written. I created a reusable character element from clear reference photos of myself, then attached that same element to every generation. Text descriptions alone will not hold a face steady across clips; a pinned reference will.
Two practical lessons from this step:
- Lock the wardrobe in words. The element holds the face, but clothing drifts unless every prompt repeats it exactly.
- State what the skin looks like. The first render batch gave me arm tattoos I do not have. The fix was an explicit line in every prompt: clean unmarked skin, no tattoos, no ink.
The numbers
| Item | Value |
|---|---|
| Clips generated (final set) | 3 x 8s, 1080p, 16:9 |
| Hero frame sequence | 121 JPEG frames, 15fps, 1920px wide |
| Frame sequence weight | 5.3 MB total |
| Video weight after remux | 7.8 + 6.5 + 6.1 MB |
| Full build, prompt to production URL | 1 day |
The deploy bug that made every video look broken
After deploying behind a CDN, all three videos stopped playing while every other asset worked. The generated MP4s stored their moov atom at the end of the file, and the CDN cache answered range requests with a full response instead of partial content. Browsers need the index before they can start playback. The fix takes one ffmpeg flag: remux with -movflags +faststart so the index sits in the first 2 KB.
If you publish AI video to the web, make faststart a non-negotiable export step.
Want this kind of build for your business?
I build AI systems, custom company dashboards and automation for growing businesses. NexBDM starts every engagement with a free automation autopsy: we find where your business bleeds time and money, then show you exactly what to fix first.