jackwener/OpenCLI · error · CommandExecutionError
Instagram mixed-media posting requires Browser Bridge file u
Error message
Instagram mixed-media posting requires Browser Bridge file upload support
What it means
During uploadMedia's retry loop, if setFileInput fails with an 'Unknown action' / 'set-file-input' / 'not supported' error, the library checks whether any media item is a video. Mixed image+video batches cannot use the image-only browser-injection fallback, so it throws this variant to say the driver must natively support setFileInput for media uploads.
Source
Thrown at clis/instagram/post.js:637
try {
await page.setFileInput(mediaPaths, activeSelector);
await dispatchUploadEvents(page, activeSelector);
return;
}
catch (error) {
const message = error instanceof Error ? error.message : String(error);
const staleSelector = message.includes('No element found matching selector')
|| message.includes('Could not find node with given id')
|| message.includes('No node with given id found');
if (staleSelector && attempt === 0) {
activeSelector = await resolveFreshUploadSelector(page, activeSelector, mediaItems);
continue;
}
if (!message.includes('Unknown action') && !message.includes('set-file-input') && !message.includes('not supported')) {
throw error;
}
if (mediaItems.some((item) => item.type === 'video')) {
throw new CommandExecutionError('Instagram mixed-media posting requires Browser Bridge file upload support', 'Use Browser Bridge or another browser mode that supports setFileInput for image/video uploads');
}
await injectImageViaBrowser(page, mediaPaths, activeSelector);
return;
}
}
}
function describePostDetail(mediaItems) {
if (mediaItems.every((item) => item.type === 'image')) {
return mediaItems.length === 1
? 'Single image post shared successfully'
: `${mediaItems.length}-image carousel post shared successfully`;
}
return mediaItems.length === 1
? 'Single mixed-media post shared successfully'
: `${mediaItems.length}-item mixed-media carousel post shared successfully`;
}
function getCommandAttemptBudget(mediaItems) {
if (mediaItems.length >= 10)View on GitHub (pinned to 49907e53dc)
Solutions
- Use Browser Bridge mode which supports setFileInput for image and video uploads
- Post the images via the fallback path and upload the video separately if the driver cannot handle mixed media
- Upgrade the browser driver to one with full setFileInput support
- Retry with an image-only batch to confirm the driver's capability boundary
Example fix
// before
await postMedia(page, ['a.jpg', 'b.mp4']); // mixed batch on unsupported driver
// after
if (!page.setFileInput) {
await postMedia(page, ['a.jpg']); // image-only can use browser injection
await postMedia(page, ['b.mp4']); // video posted separately via supported mode
} else {
await postMedia(page, ['a.jpg', 'b.mp4']);
} Defensive patterns
Strategy: validation
Validate before calling
const hasVideo = mediaItems.some(i => i.type === 'video');
if (hasVideo && typeof page.setFileInput !== 'function') {
throw new Error('Video posts require Browser Bridge setFileInput support');
} Type guard
function canUploadMixedMedia(page, items) {
return !items.some(i => i.type === 'video') || typeof page.setFileInput === 'function';
} Try / catch
try {
await uploadMedia(page, mediaItems, selector);
} catch (e) {
if (String(e.message).includes('mixed-media posting requires')) {
// split: images via fallback, video via supported path
await uploadMedia(page, mediaItems.filter(i => i.type !== 'video'), selector);
await uploadVideoViaApi(mediaItems.find(i => i.type === 'video'));
} else throw e;
} Prevention
- Validate capability per media type before composing the batch
- Route video uploads through modes known to support them
- Keep mixed carousels out of drivers with image-only file injection
When it happens
Trigger: Posting a media set containing at least one video while page.setFileInput either does not exist or rejects the call with 'Unknown action', 'set-file-input', or 'not supported'; the code path reaches the mediaItems.some(type === 'video') branch and throws.
Common situations: Carousel posts combining photos and a video in a non-Browser-Bridge mode, driver versions that only support image file injection, or remote browsers blocking the set-file-input action.
Related errors
- Instagram posting requires Browser Bridge file upload suppor
- Browser Bridge does not support Reference drag-and-drop
- Gmail ${label} returned a malformed Browser Bridge envelope
- Gmail ${operation} response exceeded the browser capture lim
- Gmail ${operation} response body was unavailable
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/f27204c1282fe955.
Report an issue: GitHub.