Proposal Date
2026-07-31
Target Ticket Acceptance Date
2026-08-28
Earliest Open edX Named Release Without This Functionality
Willow (December 2026)
Rationale
The Video Bumper feature, gated behind FEATURES['ENABLE_VIDEO_BUMPER'], allows a short clip (5–35 seconds) to play before each video in a course once per user per 7 days. A thorough investigation was conducted in #275. Key findings:
- edx.org-only by design. Built in 2015 for edX partner support — there has never been a self-service path for Open edX operators. No authoring UI exists; setup requires hand-editing a hidden JSON advanced setting and manually creating edx-val rows via a Django shell.
- Zero usage signal in 11 years. Off by default, no forum threads ever, and a GitHub-wide search for
ENABLE_VIDEO_BUMPER: true returns only test fixtures — zero deployment configs, Tutor plugins, or site configurations.
- End-to-end coverage dropped in 2020. The bok-choy acceptance tests were removed; no automated full-flow coverage has existed since.
- Bumper transcripts were intentionally excluded from the edx-val migration in 2017 and still depend on contentstore
/static/ files.
- Fails silently. An unreachable bumper video quietly falls back to the main video, so a site that believes it has bumpers enabled may not be showing them — and would likely be in that state today given VEDA (the edx.org encoding pipeline) was deprecated in 2020.
- Ongoing maintenance cost. The feature flag gates only the entry point; the XBlock fields, handler branches, JS modules, and tests ship to every instance regardless. All of this must be carried through the ongoing Video XBlock extraction and any future video player work.
Removal Plan
The following will be removed from xblocks-core (VideoBlock class):
xblocks_contrib/video/bumper_utils.py — entire module dedicated to bumper logic
xblocks_contrib/video/video_xfields.py — video_bumper course-level XBlock field
xblocks_contrib/video/video_handlers.py — is_bumper handler branches and ?is_bumper=1 transcript endpoints
xblocks_contrib/video/video_transcripts_utils.py — bumper transcript handling
xblocks_contrib/video/video_utils.py — bumper-related utility functions
xblocks_contrib/video/video.py — bumper entry point and is_author_mode guard
xblocks_contrib/video/assets/js/src/09_bumper.js — bumper playback JS module
xblocks_contrib/video/assets/js/src/09_events_bumper_plugin.js — bumper analytics events JS module
xblocks_contrib/video/assets/js/src/10_main.js — bumper references in main JS entry point
xblocks_contrib/video/tests/js/video_bumper_spec.js — bumper JS tests
xblocks_contrib/video/tests/js/video_events_bumper_plugin_spec.js — bumper events JS tests
xblocks_contrib/video/tests/js/video_play_skip_control_spec.js — bumper skip control tests
xblocks_contrib/video/tests/js/video_skip_control_spec.js — bumper skip control tests
The following will be removed from edx-platform:
lms/envs/common.py and openedx/envs/common.py — ENABLE_VIDEO_BUMPER and SHOW_BUMPER_PERIODICITY feature flags
cms/djangoapps/models/settings/course_metadata.py — video_bumper advanced course setting
openedx/core/djangoapps/video_config/services.py — bumper-related video config service code
openedx/core/djangoapps/video_config/transcripts_utils.py — bumper transcript utilities
lms/djangoapps/courseware/tests/test_video_mongo.py — bumper test cases
Replacement
No replacement is needed. A course team wanting a pre-roll clip can place a standalone Video component at the beginning of the course sequence.
Deprecation
Given the feature is off by default and has zero known real-world deployments, no in-code deprecation warning is planned. The forum announcement period serves as the community notice before removal.
Migration
No migration is needed for the vast majority of operators — the feature is off by default.
For any operator that has ENABLE_VIDEO_BUMPER = True and an active bumper configured: place a standalone Video component at the beginning of the course sequence as a direct replacement.
Additional Info
Feel free to adjust the ticket description, Or we can do it once the ADR is approved.
-- @feanil
Proposal Date
2026-07-31
Target Ticket Acceptance Date
2026-08-28
Earliest Open edX Named Release Without This Functionality
Willow (December 2026)
Rationale
The Video Bumper feature, gated behind
FEATURES['ENABLE_VIDEO_BUMPER'], allows a short clip (5–35 seconds) to play before each video in a course once per user per 7 days. A thorough investigation was conducted in #275. Key findings:ENABLE_VIDEO_BUMPER: truereturns only test fixtures — zero deployment configs, Tutor plugins, or site configurations./static/files.Removal Plan
The following will be removed from xblocks-core (
VideoBlockclass):xblocks_contrib/video/bumper_utils.py— entire module dedicated to bumper logicxblocks_contrib/video/video_xfields.py—video_bumpercourse-level XBlock fieldxblocks_contrib/video/video_handlers.py—is_bumperhandler branches and?is_bumper=1transcript endpointsxblocks_contrib/video/video_transcripts_utils.py— bumper transcript handlingxblocks_contrib/video/video_utils.py— bumper-related utility functionsxblocks_contrib/video/video.py— bumper entry point andis_author_modeguardxblocks_contrib/video/assets/js/src/09_bumper.js— bumper playback JS modulexblocks_contrib/video/assets/js/src/09_events_bumper_plugin.js— bumper analytics events JS modulexblocks_contrib/video/assets/js/src/10_main.js— bumper references in main JS entry pointxblocks_contrib/video/tests/js/video_bumper_spec.js— bumper JS testsxblocks_contrib/video/tests/js/video_events_bumper_plugin_spec.js— bumper events JS testsxblocks_contrib/video/tests/js/video_play_skip_control_spec.js— bumper skip control testsxblocks_contrib/video/tests/js/video_skip_control_spec.js— bumper skip control testsThe following will be removed from edx-platform:
lms/envs/common.pyandopenedx/envs/common.py—ENABLE_VIDEO_BUMPERandSHOW_BUMPER_PERIODICITYfeature flagscms/djangoapps/models/settings/course_metadata.py—video_bumperadvanced course settingopenedx/core/djangoapps/video_config/services.py— bumper-related video config service codeopenedx/core/djangoapps/video_config/transcripts_utils.py— bumper transcript utilitieslms/djangoapps/courseware/tests/test_video_mongo.py— bumper test casesReplacement
No replacement is needed. A course team wanting a pre-roll clip can place a standalone Video component at the beginning of the course sequence.
Deprecation
Given the feature is off by default and has zero known real-world deployments, no in-code deprecation warning is planned. The forum announcement period serves as the community notice before removal.
Migration
No migration is needed for the vast majority of operators — the feature is off by default.
For any operator that has
ENABLE_VIDEO_BUMPER = Trueand an active bumper configured: place a standalone Video component at the beginning of the course sequence as a direct replacement.Additional Info
Feel free to adjust the ticket description, Or we can do it once the ADR is approved.
-- @feanil