Bino(1)

πŸ’– Bino(1) β€” bestie edition πŸ’–

Version 2.6 ✨ okay so listen, this is the manual page for Bino, and I'm gonna walk you through it like we're texting at 2am. Grab a snack. πŸ“


🌈 Overview 🌈

Bino is a video player, but make it 3D and Virtual Reality. Like, that's its whole thing. Its focus is:

  • Support for stereoscopic 3D videos in various formats πŸ’…
  • Support for 360Β° and 180Β° surround videos, with and without stereoscopic 3D πŸ¦‹
  • Support for Virtual Reality environments, including SteamVR, CAVEs, powerwalls, and other multi-display / multi-GPU / multi-host systems πŸ‘‘

No cap, it's giving "I do a lot of things and I do them well."


✨ Invocation ✨

Here's how you summon it:

bino [options] URL...

And here's every single option, bestie. All of them. I'm not skipping a single one because I love you. πŸ’œ

  • -h, --help β€” shows you the help for the command line options. Your little "what does this do again" button. 🫢
  • --help-all β€” same energy, but it also drags in the Qt specific options too.
  • -v, --version β€” tells you the version info. Iconic.
  • --log-level level β€” sets the log level. Your choices are fatal, warning, info, debug, firehose. Yes, firehose. It's as extra as it sounds. πŸ”₯
  • --log-file file β€” sets the log file. The receipts go here.
  • --read-commands script β€” reads commands from a script file. Go look at the Scripting section below, iykyk.
  • --disable-stereo β€” disables OpenGL quad-buffered stereo support. This is a workaround for broken drivers, mostly the NVIDIA proprietary drivers on Linux. πŸ’€ (not the drivers being messy)
  • --opengles β€” use OpenGL ES instead of Desktop OpenGL.
  • --vr β€” starts in Virtual Reality mode instead of GUI mode. See Virtual Reality.
  • --vr-screen screen β€” sets the VR screen geometry. And you have options, bestie:
    • the special values united or intersected, or
    • a comma-separated list of nine values representing three 3D coordinates that define a planar screen (bottom left, bottom right, top left), or
    • an aspect ratio followed by the name of an OBJ file that contains the screen geometry with texture coordinates (example: 16:9,myscreen.obj).

Pick your fighter. πŸŽ€

  • --capture β€” captures audio/video input from microphone and camera/screen/window. Main character behavior, honestly.
  • --list-audio-outputs β€” lists audio outputs.
  • --list-audio-inputs β€” lists audio inputs.
  • --list-video-inputs β€” lists video inputs.
  • --list-screen-inputs β€” lists screen inputs.
  • --list-window-inputs β€” lists window inputs.
  • --audio-output ao β€” chooses the audio output via its index.
  • --audio-input ai β€” chooses the audio input via its index. It can be empty. (It's allowed to be nothing. We stan a low-maintenance king.)
  • --video-input vi β€” chooses the video input via its index.
  • --screen-input si β€” chooses the screen input via its index.
  • --window-input wi β€” chooses the window input via its index.
  • --list-tracks β€” lists all video, audio and subtitle tracks in the media. The full lineup. πŸ’…
  • --preferred-audio lang β€” sets the preferred audio track language (en, de, fr, ...).
  • --preferred-subtitle lang β€” sets the preferred subtitle track language (en, de, fr, ...). Can be empty.
  • --video-track track β€” chooses the video track via its index.
  • --audio-track track β€” chooses the audio track via its index.
  • --subtitle-track track β€” chooses the subtitle track via its index. Can be empty.
  • -p, --playlist file β€” loads a playlist.
  • -l, --loop mode β€” sets loop mode (off, one, all).
  • -w, --wait mode β€” sets wait mode (off, on).
  • -i, --input mode β€” sets input mode. Options are: mono, top-bottom, top-bottom-half, bottom-top, bottom-top-half, left-right, left-right-half, right-left, right-left-half, alternating-left-right, alternating-right-left.
  • -o, --output mode β€” sets output mode. This list is LONG and I respect it: left, right, stereo, alternating, hdmi-frame-pack, left-right, left-right-half, right-left, right-left-half, top-bottom, top-bottom-half, bottom-top, bottom-top-half, even-odd-rows, even-odd-columns, checkerboard, red-cyan-dubois, red-cyan-full-color, red-cyan-half-color, red-cyan-monochrome, green-magenta-dubois, green-magenta-full-color, green-magenta-half-color, green-magenta-monochrome, amber-blue-dubois, amber-blue-full-color, amber-blue-half-color, amber-blue-monochrome, red-green-monochrome, red-blue-monochrome.
  • --surround mode β€” sets surround mode (360, 180, off).
  • --surround-vfov degrees β€” sets surround vertical field of view (default 50, range 5-115).
  • -S, --swap-eyes β€” swaps left/right eye. Trading places, cute. πŸ‘€
  • -f, --fullscreen β€” starts in fullscreen mode. Big. Bold. Fullscreen.

πŸŽ€ Output modes πŸŽ€

Most output modes are pretty self explanatory β€” you'll get it β€” but bestie, there are some exceptions and we need to talk about them:

  • stereo requires OpenGL quad-buffered stereo support, which is typically limited to high-end graphics cards. Fancy hardware only, periodt.
  • alternating tries to mimic stereo mode by displaying the left and right frames alternating, ideally at display speed. This one is unreliable though β€” Bino has no way of making sure that its output frames actually correspond to display output frames. But it might work! Depends on your hardware and system setup. Fingers crossed. 🀞
  • hdmi-frame-pack is a special mode supported by some 3D TVs via HDMI 1.4a, where the left view is placed in the top part of a frame and the right view in the bottom part, and both parts are separated by a blank area that takes 1/49 of the vertical space. To use this mode, you gotta force your display output resolution into either 1280x1470 (720p 3D: 720+30+720=1470; 1470/49=30) or 1920x2205 (1080p 3D: 1080+45+1080=2205; 2205/49=45).
  • even-odd-rows, even-odd-columns and checkerboard are for (older) 3D TVs. Vintage moment. ✨

πŸ¦‹ File Name Conventions πŸ¦‹

Okay so here's the tea: Bino currently cannot detect the stereoscopic layout or the surround video mode from metadata, because Qt does not provide that information. So it has to guess. πŸ™ˆ

Bino recognizes the following hints at the last part of the file name, just before the file name extension (.ext):

  • *-tb.ext, *-ab.ext: Input mode top-bottom
  • *-tbh.ext, *-abq.ext: Input mode top-bottom-half
  • *-bt.ext, *-ba.ext: Input mode bottom-top
  • *-bth.ext, *-baq.ext: Input mode bottom-top-half
  • *-lr.ext: Input mode left-right
  • *-lrh.ext, *-lrq.ext: Input mode left-right-half
  • *-rl.ext: Input mode right-left
  • *-rlh.ext, *-rlq.ext: Input mode right-left-half
  • *-2d.ext: Input mode mono

Additionally, if the number 180 or 360 is part of the file name and separated by neighboring digits or letters by other characters, then the corresponding surround mode is assumed.

So basically: name your files right or Bino's just gonna vibe and guess. πŸ’…


🌸 Scripting 🌸

Bino can read commands from a script file and execute them via the option --read-commands scriptfile. And guess what β€” this works both in GUI mode and in Virtual Reality mode. Versatile queen.

The script file can also be a named pipe so that you can have arbitrary remote control interfaces write commands into it as they come in. So fancy.

Empty lines and comment lines (which begin with #) are ignored. (Your script's little moments of silence. We respect them.)

The following commands are supported:

  • open [--input mode] [--surround mode] [--video-track vt] [--audio-track at] [--subtitle-track st] URL

Opens the URL and starts playing. All these options have the same meaning as the corresponding command line options.

  • capture [--audio-input ai] [--video-input vi] [--screen-input si] [--window-input wi]

Starts capturing camera and microphone. The options have the same meaning as the corresponding command line options.

  • play

Starts playing.

  • pause

Pauses.

  • toggle-pause

Switches between pause and play.

  • stop

Stops playing.

  • playlist-load playlist.m3u

Loads the playlist.

  • playlist-next

Switches to the next playlist entry.

  • playlist-prev

Switches to the previous playlist entry.

  • playlist-wait mode

Sets wait mode (off, on).

  • playlist-loop mode

Sets loop mode (off, one, all).

  • quit

Quits Bino. Bye babe. 🫢

  • set-position p

Sets the video position to p, where p=0 is the beginning and p=1 is the end.

  • seek seconds

Seeks the given amounts of seconds forward β€” or, if the number of seconds is negative, backwards.

  • wait stop|seconds

Waits until the video stops, or waits for the given number of seconds, before executing the next command. Patience, bestie.

  • set-mute on|off

Sets the volume mute status.

  • toggle-mute

Switches between mute and unmute.

  • set-volume vol

Sets the volume level to vol (between 0 and 1).

  • adjust-volume offset

Adjusts the volume by the given amount (the final volume is clamped between 0 and 1). No going overboard.

  • set-output-mode mode

Sets the given output mode. See the command line option --output for a list of modes.

  • set-surround-vfov degrees

Sets surround vertical field of view (default 50, range 5-115).

  • set-swap-eyes on|off

Sets left/right eye swap.

  • toggle-swap-eyes

Toggles left/right eye swap.

  • set-fullscreen on|off

Sets fullscreen mode.

  • toggle-fullscreen

Toggles fullscreen mode.


⭐ Slideshows ⭐

You can play slideshows of images (or videos, we don't discriminate) simply by making a playlist and switching on its wait status. This is actually the default whenever one or more of the files you open are images instead of videos β€” and this works from the command line as well as from the GUI. So convenient. πŸ’–

With wait enabled, the next media in the playlist will only be displayed after you press the N key, or choose Playlist/Next from the menu. You're in control, diva. πŸ‘‘

For automatic media switching based on predefined presentation times, use the scripting mode, like in this example:

set-fullscreen on
playlist-load my-slideshow.m3u
playlist-loop on
playlist-wait on
playlist-next
wait 4
playlist-next
wait 7
playlist-next
wait 5
quit

Look at that. A whole little show. 🌈

Virtual Reality πŸ₯½βœ¨

okay bestie, this is where Bino goes full sci-fi on you and honestly? iconic. Bino supports all sorts of Virtual Reality environments via QVR 🫢 like, all of them.

  • When QVR is compiled just with Qt6, CAVEs and powerwalls and similar multi-display setups are supported, including multi-GPU and multi-host rendering. no cap, it's giving whole-room cinema energy πŸ’…
  • When QVR is compiled with VRPN, all sorts of tracking and interaction hardware for such systems are additionally supported. it's giving "we always know where your head's at" fr fr πŸ™ˆ
  • When QVR is compiled with OpenVR, SteamVR is additionally supported and automatically detected (e.g. HTC Vive). detected?? automatically?? ate. πŸ’…

To start Bino in VR mode, use the option --vr. Bino will then display a screen in the virtual world, and the video will be displayed on that screen, unless the input is a surround video (360° or 180°), which will of course be displayed all around the viewer. as it should be. main character panorama energy 🌈

The default is a 16:9 screen in a few meters distance from the viewer, but you can use the --vr-screen option to either define arbitrary planar screens via their bottom left, bottom right and top left corners, or to load arbitrary screen geometry from an OBJ file. The latter case is useful e.g. if you want Bino's virtual screen to coincide with a curved physical screen. geometry slay πŸŽ€ honestly the way you can just manifest a screen out of three corners.

The --vr-screen option also accepts the special values united and intersected. This will unite (or intersect) the 2D geometries of all VR windows at runtime. For example, use --vr-screen=united --qvr-config=two-screen-stereo.qvr for a two-screen stereo setup, where the left view goes on the first screen and the right view goes on the second screen. not me setting up a two-screen stereo rig at 2am πŸ’€βœ¨ romantic actually.

Bino uses QVR's default navigation, which may be based on autodetected controllers such as the HTC Vive controllers, or on tracking and interaction hardware configured via QVR for your VR system, or on the mouse and WASDQE keys if nothing else is available. so valid. something will always move you 🫢

Additional interaction in VR mode is currently limited to the same keyboard shortcuts that also work in GUI mode. That means you currently must specify the video to play on the command line, and have no way to pause, skip or seek with VR controllers. This will be added in a future version. 😭 bestie we are keyboard-and-mouse coding it for now, stay strong.

and that's the whole entire page πŸ’– this was Bino(1), the manual page that dropped on November 9, 2025, so if the vibes ever feel a lil vintage you know why 🌸 slay, stay hydrated, hydrate your GPU too, and go watch something gorgeous on a giant virtual screen for me. πŸ¦‹πŸ’…πŸŽ€

πŸ“¦ where this page comes from