jackwener/OpenCLI · error · CommandExecutionError
Midjourney manual video composer did not expose the End Fram
Error message
Midjourney manual video composer did not expose the End Frame picker
What it means
Thrown when the End Frame picker in the manual video composer cannot be found/marked by the in-page evaluate. If no candidate element matching the End Frame picker criteria exists, marked stays false and this CommandExecutionError is raised.
Source
Thrown at clis/midjourney/utils.js:1159
}
async function openEndFramePicker(page) {
const marked = unwrapEvaluateResult(await page.evaluate(() => {
document.querySelectorAll('[data-opencli-end-frame-picker]').forEach((node) => {
node.removeAttribute('data-opencli-end-frame-picker');
});
const label = [...document.querySelectorAll('div')]
.find((node) => node.children.length === 0 && node.textContent?.trim() === 'End Frame');
let target = label;
for (let depth = 0; depth < 7 && target; depth += 1, target = target.parentElement) {
if (String(target.className).includes('cursor-pointer')) {
target.setAttribute('data-opencli-end-frame-picker', '1');
return true;
}
}
return false;
}));
if (!marked) throw new CommandExecutionError('Midjourney manual video composer did not expose the End Frame picker');
await page.click('[data-opencli-end-frame-picker="1"]');
await page.wait({ selector: 'input[type="file"][accept*="image"]', timeout: 10 });
}
export async function uploadReferencesToSlot(page, localPaths, slot) {
if (!localPaths.length) return [];
if (slot === 'end') await openEndFramePicker(page);
const selected = await uploadReferenceLibrary(page, localPaths);
// Uploading while the persistent composer retained a video state can leave
// the library open beside Start/End Frame slots. Reassert image mode before
// assigning image-generation references; End Frame intentionally stays in
// the manual video composer.
if (slot !== 'end') {
await ensureImageComposer(page);
await openImagePanel(page);
}
View on GitHub (pinned to 49907e53dc)
Solutions
- Confirm the prompt is a video generation and the manual video composer is open.
- Expand/scroll all composer panels before opening the End Frame picker.
- Update the picker-matching heuristics in the evaluate to match current DOM.
- Reload the page and re-enter the composer.
Example fix
// before
if (!marked) throw new CommandExecutionError('Midjourney manual video composer did not expose the End Frame picker');
// after
if (!marked) {
await openImagePanel(page);
await page.wait(1);
throw new CommandExecutionError('Midjourney manual video composer did not expose the End Frame picker');
} Defensive patterns
Strategy: validation
Validate before calling
const composerOpen = await page.evaluate(() => !!document.querySelector('[class*="composer"], [data-testid*="composer"]'));
if (!composerOpen) throw new Error('Manual video composer is not open'); Try / catch
try {
await openEndFramePicker(page);
} catch (err) {
if (String(err.message).includes('End Frame picker')) {
await page.reload();
await openEndFramePicker(page);
} else throw err;
} Prevention
- Only use End Frame for video prompts
- Expand all composer panels first
- Update selectors after Midjourney UI changes
- Verify the picker exists before clicking
When it happens
Trigger: Calling openEndFramePicker when the manual video composer is not open, the End Frame control is behind a collapsed panel, or Midjourney changed the composer markup.
Common situations: Working on a non-video prompt (End Frame only exists for video); UI A/B changes removed/renamed the picker; the composer scrolled such that the control is unmounted; user not in the manual composer mode.
Related errors
- ${capabilities.plan || 'current'} plan does not support HD v
- Video jobs support video-raw, video-social, or gif downloads
- Could not write Midjourney media ${filePath}: ${errorMessage
- Midjourney reference upload fallback failed: ${result?.reaso
- Could not locate Midjourney ${slotLabel} slot after upload
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/6aeeed9bf0a5aa06.
Report an issue: GitHub.