Two Way Ninja is the next step after Wiki Ninja: the student “screen shares” into my wiki so I can watch what they are doing, while I publish my talking-head camera (via the ATEM Mini) into their wiki so they can see and hear me without leaving the Federated Wiki lineup - docs.vdo.ninja ![]()
This replaces the “Zoom window” with two embedded panels, one on each person’s wiki. Each panel is just a Frame Plugin paragraph pointing at a VDO.Ninja viewer URL - github.com ![]()
# The idea
We run two one-way streams at the same time.
One stream is TEACHER_CAM: I push my ATEM talking head, the student views it inside their wiki. The other stream is STUDENT_SCREEN: the student pushes a screen share, and I view it inside my wiki - docs.vdo.ninja
This feels surprisingly “native” because both of us keep the wiki lineup open as the shared workspace, and the video is just another panel next to the page we are discussing - docs.vdo.ninja ![]()
# What you need
Both wikis should have the Frame Plugin available, because each side is embedding a VDO.Ninja viewer page as an iframe - github.com
You also need two stream ids and a shared secret (password). Treat the links as capability URLs: anyone with them can connect, so share them like invites - docs.vdo.ninja ![]()
# Stream A: Teacher camera into the student’s wiki
I publish my camera using a push link. Example pattern:
https://vdo.ninja/?push=TEACHER_CAM&webcam&autostart&password=PASS
The &autostart flag skips past most setup clicks for the sender, which is ideal when you are about to teach and do not want fiddly device menus - docs.vdo.ninja
The student embeds the matching view link in a Frame paragraph inside their wiki:
https://vdo.ninja/?view=TEACHER_CAM&password=PASS&cleanoutput
Clean output keeps the embedded panel looking like “a video surface” rather than a full web app with popups and extra UI - docs.vdo.ninja
If echo becomes a problem, the student can force their embedded viewer to start with audio playback muted:
https://vdo.ninja/?view=TEACHER_CAM&password=PASS&cleanoutput&mutespeaker
They can still unmute manually when needed, but this prevents accidental feedback when both sides have speakers on - docs.vdo.ninja ![]()
# Stream B: Student screen share into the teacher’s wiki
The student publishes a screen share using a push link. Example pattern:
https://vdo.ninja/?push=STUDENT_SCREEN&screenshare&password=PASS
The &screenshare flag jumps the sender straight into the screen-share flow rather than the generic camera picker, which reduces confusion for first-time students - docs.vdo.ninja
Browsers still require a manual click to choose which screen or window to share, so do not expect “true” auto-start for screen sharing even if you add &autostart. That limitation is normal and documented - docs.vdo.ninja
I then embed the matching view link in a Frame paragraph inside my own wiki:
https://vdo.ninja/?view=STUDENT_SCREEN&password=PASS&cleanoutput
This becomes my “student cockpit” panel, so I can watch exactly what they are doing in the wiki while talking them through it - docs.vdo.ninja ![]()
# How to run the session
I open my wiki lineup with two panels: the wiki page we are editing and the embedded STUDENT_SCREEN view panel. The student opens their lineup with the page we are editing and the embedded TEACHER_CAM view panel - docs.vdo.ninja
Keep audio simple. In most sessions, only the teacher stream needs audio, and the student screen share can be silent. If you do want the student to narrate, decide who is “audio live” and mute the other side’s speakers to avoid loops - docs.vdo.ninja ![]()
# Small refinements
If the student is nervous about screen sharing, try &screenshare2 instead of &screenshare, which adds an extra “this is a screen share” moment in the UI and can reduce mis-clicks - docs.vdo.ninja
If a panel looks blank, check the basics: the sender is currently pushing, the ids match exactly, the password matches, and the viewer has clicked once to allow playback where required by browser autoplay rules - docs.vdo.ninja ![]()
# Where this can go next
Two Way Ninja is deliberately “two one-way pipes” because it is stable and easy to reason about. Later you can evolve into a room-based setup where webcam and screen share are managed together, or you can wrap these URL patterns into a dedicated “Ninja” plugin that renders a friendly status badge and enforces clean defaults - docs.vdo.ninja ![]()