The Workshop Has Two Kinds of Work in It
Open the repository and you find two sibling directories that do superficially the same thing — produce a video — and are structured completely differently.
Projects are one-offs. A project holds the data, the script, and the scene composition for one specific piece. It was designed once, for that piece, and it will never run again with different inputs because there are no different inputs.
Pipelines are repeatable production characters. A pipeline holds stages parameterized by a pointer, a locked format contract, and an index of what it has produced. It is designed to run many times, and every run is the same format applied to different material.
The obvious refactor is to collapse them: make the one-offs into pipelines with a single entry, or make pipelines a special case of projects. Neither has been done, and the reason is the interesting part.
Some Work Is Genuinely Singular
The two founding videos were bespoke. Their structure was chosen for what they were saying — this argument, this sequence, this ending — and none of those choices generalize, because there was never going to be a second piece making the same argument. Forcing them into a repeatable shape would not be a cleanup. It would be asserting a recurrence that does not exist, and the resulting abstraction would be fitted to a sample of one.
Meanwhile the series genuinely recurs, so its format is worth locking and its variation is worth confining to a pointer. That is a real distinction about the work, not about the code, and a codebase that flattens it is telling a lie about what it produces.
The Retroactive Recognition
There is a twist worth sitting with. The design document that established pipelines notes that the two bespoke videos were a repeatable format all along — one that nobody had recognized yet. With twenty sibling applications to showcase, "introduce an application" was always going to recur; it just had not recurred yet at the time they were built.
So the honest position is not "one-offs and pipelines are permanently different categories." It is that recurrence is discovered, not declared. You build concretely, and when the second instance arrives with its own real requirements, the shared shape becomes visible — and it is a much better shape than the one you would have guessed before you had two examples. Promotion at second use is the rule; pre-abstraction for a hypothetical second use is the thing being avoided.