PVJ
Portable VJ mixer & mapper.
Mix clips, shaders and live camera on your phone and send a clean full-resolution picture to a projector over USB-C. The controls stay on the phone.
IN THE FIELD
FEATURES
PROJECTOR OUT AT FULL RES
Plug in a USB-C to HDMI adapter and the projector gets the clean output at native 1080p. The interface stays on your phone, so the audience never sees it.
CLIP SEQUENCER
A thumbnail grid of your clips, a BPM-synced sequence strip you can drag and reorder, shuffle, and saved sequence slots for each set.
INSTANT CUTS
The next clip is preloaded while the current one plays, so cuts land on the beat with no stall, at a steady 60 fps.
REAL-TIME SHADERS
GLSL effects on the live picture: ASCII, RGB Shift, Kaleidoscope, Feedback, Pixelate and Chroma.
MASKS AND WARP
Polygon masks and soft-edged PNG masks, plus corner warping with a nudge pad, numeric entry and a test grid for lining up on any surface.
LIVE INPUT
Use the phone camera as a source, react to the room through the mic, and lock to tempo with BPM detection or tap tempo.
SET RECORDING
Record your output to a video file on the phone to review or share the set afterwards.
OFFLINE AND PRIVATE
No account, no internet connection, no tracking. Clips come in through the Android file picker, including from Google Drive, and stay on the device.
MAPPING TOOLS
Fit the picture to the surface, from the phone.
Draw polygon masks around windows, panels and objects, or load soft-edged PNG masks. Drag the corners to warp the output onto any wall, then fine-tune with the nudge pad, numeric entry and a test grid.
Watch on YouTube ↗FRAMES
GET THE BETA
PVJ 0.7.0-beta2 for Android · 126 MB · Android 10 or newer · a USB-C to HDMI adapter (or a USB-C display) for the projector.
| File | pvj-0.7.0-beta2.apk |
|---|---|
| SHA-256 | 8d89f6dde49e73bb13efd6bdb34db4b3f31ab4a3cff1f6a806f4ad1e840ea570 pvj-0.7.0-beta2.apk.sha256 |
| Package | studio.cu.pvj · version 0.7.0-beta2 (versionCode 2) |
| Requires | Android 10 or newer. Release-signed; no Google account needed. |
| Permissions | Camera and microphone only, and only when you turn them on. No internet permission. |
No account, no sign-in, no ads, no analytics. Read the privacy policy.
Previous version: pvj-0.6.0-beta1.apk (126 MB) · .sha256
- Download pvj-0.7.0-beta2.apk on the phone.
- Open it from Chrome's downloads. The first time, Android asks you to allow installs from Chrome: allow it, then open the file again.
- An older VJMIX build must be uninstalled first. A beta1 PVJ updates in place.
- Open PVJ. After the ident you are asked for a clips folder: CHOOSE FOLDER, make or pick Movies/PVJ, allow access. PVJ reads that folder and the folders directly inside it.
This build is signed with our own key, so a Play Store install will not replace it later: when PVJ reaches the Play Store, uninstall this one first.
Join the beta list to hear about each new build by email: one message per release, nothing else. Feedback and bug reports go to the same address, dev@c-u.studio.
- Import a starter pack straight from the zip: LIB ▸ IMPORT PACK (.ZIP)…
- Clips in folders inside your clips folder are played too, each folder with its own chip.
- The folder is re-read when you come back to the app.
- An idle ident on the projector when there is nothing to play (OUTPUT ▸ IDLE SCREEN).
- The ident plays on launch; new icon; MODE ▸ ABOUT with version and links.
- Fixed: the clip grid now follows every rescan.
STARTER PACKS
Free 1080p loops made for PVJ, to use in your sets.
Licensed CC BY-NC 4.0: use them in live sets and recordings of them, and credit “Collective Unconscious” where credits are given. Don't resell or redistribute the files themselves, and ask before using them in paid advertising. Each zip includes a README with the full list.
STARTER PACK V1
Mirrored neon kaleidoscopes, voxel cities and RGB wireframes, then glitching mono and lavender terrain. Includes the PVJ ident, a Game of Life run that spells out the name. For lining up the projector, use the test grid built into PVJ’s mapping tools.
What's inside · 39 files
| 00 | PVJ_01_00_ident.mp4 PVJ ident, Game of Life: cells form "COLLECTIVE unconscious" then "PVJ" | 10 s |
| 01 | PVJ_01_POP_box_glitchtex_05_loop01_1080p.mp4 mirrored neon kaleidoscope, bright bursts on black | 10 s |
| 02 | PVJ_01_POP_box_glitchtex_05_loop02_1080p.mp4 symmetric neon machine, yellow and magenta flashes | 10 s |
| 03 | PVJ_01_POP_box_glitchtex_05_loop03_1080p.mp4 dark symmetric glitch, sparse neon accents | 10 s |
| 04 | PVJ_01_POP_box_glitchtex_05_loop04_1080p.mp4 mirrored neon structure dissolving into sparks | 10 s |
| 05 | PVJ_01_POP_box_glitchtex_09_loop01_1080p.mp4 near-black, faint drifting neon flecks; good for layering | 10 s |
| 06 | PVJ_01_POP_box_glitchtex_09_loop02_1080p.mp4 dark field of sparse neon streaks | 10 s |
| 07 | PVJ_01_POP_box_glitchtex_09_loop03_1080p.mp4 rainbow particle streaks flying past on black | 10 s |
| 08 | PVJ_01_POP_box_glitchtex_11_loop01_1080p.mp4 dense neon voxel city, fast colour flashes | 10 s |
| 09 | PVJ_01_POP_box_glitchtex_11_loop02_1080p.mp4 neon voxel blocks with scattered lights | 10 s |
| 10 | PVJ_01_POP_box_glitchtex_11_loop03_1080p.mp4 flythrough of rainbow voxel facades | 10 s |
| 11 | PVJ_01_POP_box_glitchtex_11_loop04_1080p.mp4 neon voxel bursts, yellow and magenta | 10 s |
| 12 | PVJ_01_POP_box_glitchtex_13_loop01_1080p.mp4 thin RGB wireframe city, occasional colour bursts | 10 s |
| 13 | PVJ_01_POP_box_glitchtex_13_loop02_1080p.mp4 wireframe boxes with pink and green pixel panels | 10 s |
| 14 | PVJ_01_POP_box_glitchtex_13_loop03_1080p.mp4 wireframe grid, sparse pixel flashes | 10 s |
| 15 | PVJ_01_POP_box_glitchtex_13_loop04_1080p.mp4 wireframe boxes, big yellow burst mid-loop | 10 s |
| 16 | PVJ_01_POP_box_glitchtex_13_loop05_1080p.mp4 dense RGB wireframes, coloured pixel windows | 10 s |
| 17 | PVJ_01_POP_box_glitchtex_13_loop06_1080p.mp4 wireframe city, magenta and rainbow block flashes | 10 s |
| 18 | PVJ_01_TERRAIN_NOISE_001_loop01_1080p.mp4 black and white glitch terrain, sliced mountains, hard cuts | 10 s |
| 19 | PVJ_01_TERRAIN_NOISE_001_loop02_1080p.mp4 mono ridgelines with purple and green colour glitches | 10 s |
| 20 | PVJ_01_TERRAIN_NOISE_001_loop03_1080p.mp4 purple/teal fluid terrain shifting to grey peaks | 10 s |
| 21 | PVJ_01_TERRAIN_NOISE_001_loop04_1080p.mp4 mono sliced terrain with a purple flash | 10 s |
| 22 | PVJ_01_TERRAIN_NOISE_001_loop05_1080p.mp4 striped column glitches over mountains, teal patch | 10 s |
| 23 | PVJ_01_TERRAIN_NOISE_001_loop06_1080p.mp4 high-contrast white ridges sliding across black | 10 s |
| 24 | PVJ_01_TERRAIN_NOISE_002_loop01_1080p.mp4 soft mono peaks, smooth camera, colour-fringed edges | 10 s |
| 25 | PVJ_01_TERRAIN_NOISE_002_loop02_1080p.mp4 mono peaks broken by sliced columns | 10 s |
| 26 | PVJ_01_TERRAIN_NOISE_002_loop03_1080p.mp4 sliced terrain melting into a liquid white surface | 10 s |
| 27 | PVJ_01_TERRAIN_NOISE_002_loop04_1080p.mp4 mono mountains, pale green tint near the end | 10 s |
| 28 | PVJ_01_TERRAIN_NOISE_003_loop01_1080p.mp4 dim mint-grey terrain, horizontal light streaks | 10 s |
| 29 | PVJ_01_TERRAIN_NOISE_003_loop02_1080p.mp4 dark, sparse silver streaks; good for layering | 10 s |
| 30 | PVJ_01_TERRAIN_NOISE_003_loop03_1080p.mp4 near-black with faint silver wisps; very subtle | 10 s |
| 31 | PVJ_01_TERRAIN_NOISE_004_loop01_1080p.mp4 dark lavender ridges, chrome glitch strips | 10 s |
| 32 | PVJ_01_TERRAIN_NOISE_004_loop02_1080p.mp4 lavender terrain, chrome glitch strips | 10 s |
| 33 | PVJ_01_TERRAIN_NOISE_004_loop03_1080p.mp4 lavender and silver mountains, liquid-chrome surfaces | 10 s |
| 34 | PVJ_01_TERRAIN_NOISE_004_loop04_1080p.mp4 bright lavender peaks, sliced blocks | 10 s |
| 35 | PVJ_01_TERRAIN_NOISE_004_loop05_1080p.mp4 dark terrain with glossy black textures | 10 s |
| 36 | PVJ_01_TERRAIN_NOISE_004_loop06_1080p.mp4 icy peaks with glitch slices | 10 s |
| 37 | PVJ_01_TERRAIN_NOISE_004_loop07_1080p.mp4 icy blue mountains, vertical slice glitches | 10 s |
| 38 | PVJ_01_TERRAIN_NOISE_004_loop08_1080p.mp4 bright icy-blue ridges, high contrast | 10 s |
STARTER PACK V2
15 long loops (28–33 s) and 7 short ones (6 s): mono slit-scan glitch, neon pixel pops and voxel walls, endless grey noise flow, and a set of copper glass-box grids.
What's inside · 22 files
| 01 | PVJ_02_NoiseSlit_alt_1080_01_loop01.mp4 mono slit-scan glitch, mirrored barcode structure | 30 s |
| 02 | PVJ_02_NoiseSlit_alt_1080_01_loop02.mp4 mono slit-scan, sparse vertical slits building up | 30 s |
| 03 | PVJ_02_NoiseSlit_alt_1080_01_loop03.mp4 mono slit-scan, mirrored totem forms with white flares | 30 s |
| 04 | PVJ_02_NoiseSlit_alt_1080_01_loop04.mp4 faint centred slit forms; very dark, good for layering | 30 s |
| 05 | PVJ_02_NoiseSlit_alt_1080_02_loop01.mp4 horizontal streak bands and diagonal shards | 30 s |
| 06 | PVJ_02_NoiseSlit_alt_1080_02_loop02.mp4 mostly dark, bright diagonal shards cutting through | 30 s |
| 07 | PVJ_02_POPS_RD_30s_1080_01_a.mp4 neon pixel fragments popping on black | 31 s |
| 08 | PVJ_02_POPS_RD_30s_1080_01_b.mp4 glowing magenta and white blocks | 28 s |
| 09 | PVJ_02_POPS_RD_30s_1080_01_c.mp4 sparse neon specks and edges on black | 32 s |
| 10 | PVJ_02_POPS_RD_30s_1080_01_d.mp4 yellow neon tower edges, sparse | 29 s |
| 11 | PVJ_02_POPS_RD_30s_1080_01_e.mp4 dark with rare neon glints and a magenta streak | 30 s |
| 12 | PVJ_02_POPS_RD_30s_1080_02_a.mp4 neon voxel windows, purple and cyan | 30 s |
| 13 | PVJ_02_POPS_RD_30s_1080_02_b.mp4 dense green, magenta and cyan voxel walls | 30 s |
| 14 | PVJ_02_flow_endless_30s_1080_01_b.mp4 grey displacement texture flowing like a slow tunnel | 33 s |
| 15 | PVJ_02_noiseFlow_endless_1080_02_loop03.mp4 grey hair-like noise flow, swirling vortex | 30 s |
| 16 | PVJ_02_recboxes_1080_a.mp4 copper glass-box grid, slow aerial drift | 6 s |
| 17 | PVJ_02_recboxes_1080_b.mp4 copper glass-box grid, rotating view | 6 s |
| 18 | PVJ_02_recboxes_1080_c.mp4 copper boxes with warm highlights, tilted view | 6 s |
| 19 | PVJ_02_recboxes_1080_d.mp4 copper box grid, deep perspective, warm glints | 6 s |
| 20 | PVJ_02_recboxes_1080_e.mp4 copper box grid, close and warm | 6 s |
| 21 | PVJ_02_recboxes_1080_f.mp4 dark copper box grid, steep angle | 6 s |
| 22 | PVJ_02_recboxes_1080_g.mp4 copper box grid with teal reflections | 6 s |
- Download the zip on the phone.
- In PVJ open LIB ▸ SOURCES & LIBRARY ▸ IMPORT PACK (.ZIP)… and pick the zip in Downloads.
- Let it count FILE n OF N. When it says IMPORTED, the clips are in your clips folder and already in the grid.
The zip stays in Downloads; delete it when you like. Importing the same pack again skips every clip you already have.
- Unzip the pack on the computer.
- Copy the .mp4 files into the phone's Movies/PVJ, or a folder inside it, one level deep.
- Open PVJ: the folder is re-read when the app comes back to the front. A file replaced under the same name needs RESCAN CLIPS FOLDER.
Your own clips work the same way. What we test: H.264 .mp4 at 1080p or 720p, 30 or 60 fps, cut to loop cleanly.
PVJ ships with eight demo loops, so there is something on the projector before you download anything. When you choose an empty clips folder, PVJ offers to put them in it: LOAD DEMO CLIPS. They are copies: delete or replace them whenever you like. LIB ▸ SOURCES & LIBRARY ▸ LOAD DEMO CLIPS puts them back and never makes a duplicate.
- High-contrast loops work best with masks and the ASCII shader.
- Slow, large-scale loops read best when warped onto walls.
- Dark, sparse loops are great layered over brighter ones.
- Use the test grid in PVJ's mapping tools to line up the projector before the set.
REQUIREMENTS
| Phone | Android phone. Tested on Google Pixel 8 and Pixel 9a. |
|---|---|
| Projector output | A phone with video out over USB-C (DisplayPort Alt Mode) and a USB-C to HDMI adapter. Without it, PVJ runs on the phone screen. |
| Your media | Video clips and images on the phone, Google Drive or any storage app that shows up in the Android file picker. |
| Internet | Not needed. PVJ works fully offline. |
COMING IN PRO
- PVJ-Touch link: stream PVJ into TouchDesigner
- LED panel output over DDP
- Body and hand tracking with MediaPipe
- OSC in and out
- Dual decks: link several phones as decks and crossfade between them with blend modes