d, easy-to-tweak, beginner-friendly and for one-purpose-only.
Self-contained: A pipeline shall be as self-contained as possible. More specifically, this means that all functionality should be either directly defined in the pipeline file itself, should be inherited from (and only from) the DiffusionPipeline class or be directly attached to the model and scheduler components of the pipeline. 
Easy-to-use: Pipelines should be extremely easy to use