Get the app

MCCP, the Moddable Console Capture Platform: the overlay the mods on this site are for. Download it, point it at your capture card, and help yourself to anything on the mod list - no account needed to download either one. Signing in is only for uploading a mod of your own, or voting and commenting on somebody else's.

Linux

MCCP-linux-x86_64.tar.gz - 0.3.0
2.63 MB, 2026-08-17

Windows

MCCP.zip - 0.3.0
2.04 MB, 2026-08-17

What changed

0.3.0 Added - Linux build, as its own download (tarball, own README). - Capture resolution setting (Options > Video), per card. Was: always the card's own pick. Now: pick a size when the console's output changes and the card cannot convert; reopens the device live. - Hover explanations on Options settings, shown beside the panel. - Mods: type = "row", a layout container that centres its children and draws its own background. - Mods: type = "rect", a filled rectangle with no click area. - Mods: tip = "..." on any widget, for those hover explanations. - Mods: multi-select setting (kind = "multi") for non-exclusive answers. - Mods: overlay.textHeight / textLines - how tall a string wraps to. - Mods: sound.play() for one-shot WAVs, and OnWheel on overlay elements. - Mods: panels can be dragged (movable = false to pin) and resized (resizable = true). - Mods: skins can use art (bgImage) and set fgHover; overlay.themeColor / themeNum / themeStr read the active skin. - Mods: OVERLAY_OPEN global. - Edit mod can add images to a published mod's page. Was: art only at first upload. Now: any time. - Mod versions: version = 1.2.3 in mod.txt. Required to upload, must be new, and decides which copy loads when a folder and a .ccmod share a name. - CC_FAKE_FRAME serves a PNG (or a ';'-separated playlist) as the video, for testing without the card. CC_MUTE=1 silences a run. CC_DATA_ROOT runs a second copy beside the first. Fixed - Developer console did nothing when clicked. Was: opened behind the fullscreen window, or was refused outright and said nothing. Now: opens in front, and closing it actually closes the window. - A panel's clickable area could be dragged off the panel by one pixel of pointer travel during a click, leaving every click landing on the wrong thing. Was: any element with bounds was draggable. Now: a press must travel before it counts as a drag, and only what the engine draws is movable. - List rows placed their text by hand-computed offsets, so a title that wrapped to three lines was drawn into the row above it. Now: the engine owns row geometry. - A mod setting's label ran underneath its own control. Now: measured, given a box that stops before the control, and the row grows for two or three lines. - Upload put the previous folder's name in the Title field, so a mod could be published under another mod's name. Now: Title starts empty. - capture.isOpen() said no while a picture was on screen, which hid the game selector and the panels behind it. - The overlay title painted over panels instead of behind them. - A skin's bgActiveHover was ignored (the engine asked for a key no skin writes). - Pinned panels could be clicked into but not typed into; Escape quit the program instead of reaching the field. - Packages made by Windows zip tools were refused as malformed. - .lua files over 16 KB could not be embedded in the build. Improved - P (plain screenshot) saves the raw capture frame at the frame's own size. Was: a photo of the window, which is a bilinear upscale whenever the two sizes differ. O still photographs the window, overlay included. - Picture is letterboxed, not stretched. Was: scaled per axis, so a 4:3 source came out wide. Mods find it with camera.pictureRect(). - With VSync on, the picture is about a frame fresher (measured 22 ms -> 6 ms card-to-screen at 60 Hz). Toggle: Options > Grab late (VSync). - Mod :Think runs at the start of a frame instead of mid-draw, so a heavy mod slows itself rather than the video. - My mods and Download mods scroll. Was: eight rows and "narrow the filter". Now: the wheel moves the list and it says where you are. - Mod lists stripe alternate rows and show the folder name when it differs from the site title. - Text can be selected in every input: drag, shift-arrows, Ctrl+A, copy, cut. Refused on password fields. - Sticky notes remember where they were dragged and what size they were pulled to. - Editing a mod is one form and one Save: page, package and changelog together. - My mods works signed out (listing and downloading never needed an account). - Cartridge art comes from the site first, so it is the same on every machine. - Mod settings header says which copy is running: version, and .ccmod or file. Changed - The app is MCCP - Moddable Console Capture Platform. The executable is MCCP.exe. The .ccmod extension and the /api/mccp endpoints keep their names. - The window title says which cartridge is selected. - The app has an icon. - KeyPress reaches mods while the overlay is open; mods filter on OVERLAY_OPEN themselves. A focused text box still takes the key first. - One instance per data root, on Linux as well as Windows. Two copies with different roots can run side by side. - The menu column can be moved and reshaped by a skin (row or column, any edge). - Buttons say what they mean (role = "active" / "danger") so a skin can restyle the engine's own panels. Removed - The app no longer ships mods. Screenshots and sticky notes are downloads like anything else, and the face-filter demo is gone. 0.2.0 - Text boxes edit like text boxes: click to place the caret, arrow keys move it (Up/Down keep the column in multiline boxes), Home/End jump within the line, Backspace/Delete/paste/Enter all work at the caret instead of only at the end. - Text boxes scroll instead of clipping: long single-line values slide to keep the caret visible, multiline boxes scroll by lines (mouse wheel, or the caret pulls its line into view), and corner ticks mark hidden text above or below. - After a successful mod upload the panel closes and comes back blank, ready for the next mod instead of holding the last one's form. - Clicking the selected cartridge pops it back out: no game selected, no mod reading the screen - the state to watch something none of your mods understand. - The dasmaffin.com entry is now "Workshop", and it swaps the menu over to the three site buttons (with "< Back" as the way home) instead of unfolding under itself - fewer buttons on screen, not more. - The mod list is now two panels: "My mods" manages what is on this machine (Update, Push update, Uninstall), "Download mods" is only for fetching what isn't. A downloaded mod moves from one to the other. - Every mod row has an Edit button: change the title, description and games of your mod's site page from inside the app, or delete the listing outright (armed behind a second press; what's installed here stays). The package itself still updates via Push update. - My mods no longer demands an account: what is installed here is a fact about this machine, so the list (and Uninstall) work signed out. Signing in adds the site-side extras - real titles, Update, Push update, Edit. - Download mods needs no account either now: it browses the site's new public list (search-ready API; the panel filters by title), and downloading was always anonymous. Signing in only adds Edit on the rows you own. - New tool: ccmod-extract.exe. Drag a .ccmod onto it and the raw files come back in a folder of the same name next to it - nothing is ever overwritten, and archive entries with hostile paths are refused. - The status line no longer follows you between panels: "Uninstalled X." belongs to the panel you did it in, not to whatever you open next. Opening any panel starts it clean. - A freshly downloaded mod's cartridges get their site icons right away instead of after the next restart - including the one that used to stay text when the cartridge drew a frame before its icon file had finished arriving. Icon files are also written atomically now, so a half-written one can never be picked up. - Edit mod now updates the files too: an "Update the package from" dropdown (default "No update") lists your addon folders, and Push files sends the chosen one as the mod's new package - no more needing a folder named exactly like the package. Upload stays what it says: new mods only. - Deleting a mod from the site now asks you to type its title back, GitHub-style: the button that actually deletes only exists once the box matches. - Mods that aren't about a game can say so: registering the game "base" gives no cartridge and runs always, whatever is or isn't selected. (The site lists base as "Anything not game related.") - Downloaded mods land beside the program, like every other modding tool, and the log says the folder outright ("Mods folder: ..."). The old rule pointed a shipped build at the machine it was BUILT on, where nothing would ever appear. - O takes a screenshot with the overlays drawn in (panels, route list); P stays the clean picture. Mods can ask for either via screenshot(path, { overlay = true }). - The resolution dropdown shows the ACTUAL mode, snapping back after a revert instead of remembering the failed pick; every display change (apply, resolution, keep, revert, timeout) now writes a log line. - Updating a mod keeps your cartridge selected: the swap remembers the active game and re-selects it once the new package is up. - Startup log reads in the order things happen: the first frame is announced before mods process it, a package's mount summary comes before its skipped-files note, and the video-size line no longer claims a "resize" on the first frame. - Push update in My mods: a dev folder whose mod is already on the site replaces its package there in one click - no duplicate mods. - The app and the Pokemon mod both show their version (overlay title / route list header), so "did the update take?" has a visible answer. - The My mods panel says what each mod is on this machine (installed, dev copy, draft), offers Update instead of a second Download, and can Uninstall a downloaded mod (never a dev folder; the mod's data survives). - Uninstall and Update take effect immediately: the mod's panels, hooks, workers and cartridges leave (or swap) without a restart. - Cartridges without their own art use the game's icon from the site, cached locally while any installed mod uses that game. - A filter box appears in My mods once there is more than one mod. - Layout fixes in the My mods panel (clipped subtitle, cramped rows). - Pokemon mod: stat stages survive long bag/summary detours - the battle text (faints, escapes, catches, new fighters) decides when knowledge is dropped, not a timer. - Pokemon mod: when route info is on but no route is known yet, the overlay says so and how to fix it instead of showing nothing. - Pokemon mod: a long location name in the route list header is cut with ".." instead of running under the game/version tags ("CERULEAN CITYfGreen"). 0.1.1 - Downloaded mods load immediately - no restart, the cartridge just appears. - Accented letters render in the overlay (a mod called "Pokémon statistics" now reads like one). - The overlay menu groups everything dasmaffin.com under one entry, and "My site mods" is now just "My mods". 0.1.0 - first published build The viewer: - Shows your capture card with ~1 frame of software latency, with audio passthrough. Low-latency mode (vsync off) is a toggle in Options. - Steam-style overlay: Options, and everything dasmaffin.com under one submenu - your account, uploading a mod, downloading your mods. - Every session writes log.txt beside the exe (previous session kept as log.prev.txt), so problems can be reported with evidence. Modding: - Lua mods in addons/, one shared environment like GMod. Full API reference ships in docs/api.html. - Real multithreading for mods: workers run on their own core with their own Lua state; the main thread never waits. - Downloaded mods arrive as a single .ccmod file and load from it in place - folders are yours, packages came from the site. - Upload straight from the overlay: pack, screenshots, publish. The Pokemon FireRed/LeafGreen mod (download it from the site): - Reads the battle off the screen: species, levels, stat panels with real ranges, stat stages from the battle text, accuracy/evasion with hit chances, status conditions by pill colour with Gen 3's real penalties. - Catch calculator above the enemy box: min-max odds for the three balls, using the game's own formula and the HP bar's actual pixels. - Route list with per-floor encounter odds (Mt Moon's Paras really is 5% on 1F and 100% on B1F), caught tracking with clickable Poke Balls, and hover popups showing everywhere else a species lives.

Mods are made by whoever uploads them, not by us, and nothing is checked by hand before it appears. What we do is act on reports: anything somebody reports gets read, and a mod that turns out to be malicious or to use somebody else's work is hidden or removed.

If you would rather look before you run something, you can. A mod is a package, and the client ships an unpacking tool - open one up and read what is in it first.