Why an AI Film's Final Cut Has No Real Video URLs
It's not a bug—it's by design. After the full film is finished, the vdurl field in the dbvideo_process table is completely empty, with no real video addresses. This is intentional. The final generated video files all live in Jimeng's cloud; the local database stores only metadata like storyboard records, prompts, and task statuses. By design, there's no plan to pull video files or external links back to local storage. Seeing vdurl empty is precisely a sign that the workflow ran correctly. Where do videos live? They live in Jimeng's generation history list. Every video generation task has a task ID in the Jimeng backend, and you can look up the original clip by that ID. The material makes this relationship clear in one line: vdurl has no real video addresses across the entire film—videos exist only in Jimeng. In other words, the Yuncao Academy system is responsible for splitting tasks, writing prompts, and tracking status. The actual video generation is done by Jimeng, and once a video is generated, it stays under the Jimeng account. If you open the Jimeng backend, you'll find a generation history list containing all 1,029 shot videos from "The First Avenue," sorted in reverse chronological order. Anyone with access to that Jimeng account can review each shot's raw generated clip one by one. Why not store URLs locally? Because addresses expire easily, while cloud records are naturally traceable. If you store a local URL like http://localhost/videos/xxx.mp4, you can't access it from another computer. If you store a temporary Jimeng link, and it expires after a few days, the field becomes useless. But a task ID never expires. As long as the Jimeng account exists, you search the task ID in the backend and the video comes right up. The material emphasizes that all table prefixes in this system are dbvideo_, meaning this is a database engineering project, not a simple file manager. The database manages state and logic; the files themselves live with the cloud service provider. Only this way can the entire system remain enumerable, re-runnable, and replaceable. If every video had to be downloaded to a local hard drive with a stored path, then changing drives, moving, or a machine crash would collapse the entire chain. So how do you confirm the final result? You rely on three layers of records aligning. Layer one is task status: every storyboard record in dbvideo_process has a status of pending, processing, or completed. This status field is driven by the program—it can't lie. Layer two is first and last frames: each shot should have a first frame -a and a last frame -b, and those image filenames are recorded under the corresponding storyboard record. Layer three is the prompt: process.aiwords stores the complete eight-part skeleton of the Jimeng video prompt for that shot. When all three exist and line up—status shows completed, first and last frames exist as a pair, prompt is non-empty—you can confirm the video was generated successfully. Based on experience, you can even take the task ID, search it in the Jimeng backend, find the generated video file, and manually check whether its content matches the first and last frames. If it matches, you can be fully confident. What does this mean for creators? It means your creative process should be enumerable and re-runnable—you don't need to store the assets yourself. From a database perspective, the entire film is a set of records. Records can be re-run and batch-processed. The material puts it plainly: the essence of this design isn't the prompts; it's breaking a film into enumerable, re-runnable, replaceable records. In other words, you don't need to guard video files like a warehouse manager. You just need to maintain the states and logic in the database. Swap an actor with one row edit, adjust a shot without redoing the whole thing, parallel machines simply grab tasks. This approach fundamentally turns creation into engineering: what you care about is whether tasks finished, whether statuses are correct, whether prompts were properly changed—not where files live. Lose a video? No panic. Just regenerate that shot, because the first and last frames and the prompt are all there. Re-running costs only a few yuan. What step do beginners most often get wrong? Based on experience, a beginner finishes the pipeline for the first time, sees vdurl is empty, and the first reaction is that the program has a bug. They spend half a day digging through logs, checking APIs, asking in chat groups—until they finally check the Jimeng backend and find all videos are there. Pure wasted time. Even more common: someone, to make vdurl non-empty, manually downloads the generated video, re-uploads it to their own server, and writes the new address into the vdurl field. On the surface the problem is solved, but in reality it breaks the entire system's replaceability. Once you depend on file addresses on your own server, all addresses become invalid the moment you switch machines, migrate the database, or regenerate shots—the whole project freezes. So don't fill it in. Empty is correct. Are there counterexamples? Yes. Someone, just to get a local preview, wrote a crawler script to download all Jimeng-generated videos to a hard drive—300GB of material filling an entire portable disk. The disk failed, everything was lost, and vdurl in the database was still empty. Because the source records hadn't been maintained—task IDs weren't even stored—regeneration meant starting from scratch. Meanwhile, those who simply managed videos in the Jimeng backend logged into the same Jimeng account from a different computer, and every shot was sitting in the history list, not one missing. Another counterexample: someone thought task IDs weren't important and didn't store them. Later, when they wanted to revise one shot's style, they spent an entire evening searching the Jimeng backend and couldn't find the video, because there were too many generation records and no task ID to search by. So the task ID is more important than the video file itself. It's effectively the primary key—locking that generation's unique identity. What's the fundamental difference between this design and local storage? Local storage is file-oriented: you manage films as a collection of files. The Yuncao Academy system is task-oriented: you manage films as a collection of states. Files can corrupt, get lost, and take up space. States never get lost; they only transition in the database from pending to completed. You don't need to care where the video file itself is—only whether the task finished. The material specifically stresses this point: a person isn't stacking manual work; they're turning creation into engineering. The core of engineering is a state machine plus idempotency locks: atctoscene has an idempotency lock and cannot be re-run, the large model channel is bound to a uid via CRTOR, and first and last frames must be generated as a pair. These constraints guarantee task states are reliable. And if states are reliable, cloud files are always findable. What's the immediate next action? Open your Jimeng backend, find the last video task you generated, note its task ID, then check your database for the corresponding storyboard record and see if the task ID matches. Based on experience, you'll find the Jimeng generation history and the database task records correspond one-to-one, confirming nothing was lost in the pipeline. Then check the vdurl field—it'll definitely be empty. And that's correct. From now on, don't try to write real addresses into that field. Leave it empty; that's the most correct state of the entire pipeline. As long as the status field is marked completed, the Jimeng backend can find the video. Remember: what you want isn't a pile of video files—it's a set of generation records that can be re-run and called up at any time. That's where your film truly lives.