Make modules customizable. Make artwork interactive.
Module & system settings
Declare colors, sliders, text, choices and advanced fields in keel.module.json. Studio validates the settings and passes the chosen values to your module through globalThis.KEEL_INPUTS[moduleId]. These settings configure reusable code when someone builds with it.
NFT artwork controls
Open a Studio project, choose Artwork controls, and import your contract ABI. Pick a function, give it a readable button label and map its arguments. Token ID, NFT collection and connected wallet can be supplied automatically. Other arguments become collector inputs.
Choose Everyone or Current NFT owner. Public controls are visible to visitors; owner controls appear for the wallet that currently owns the ERC-721. The contract must enforce its own permissions. KEEL simulates writes and opens the connector selected in the site’s wallet picker. A confirmed call refreshes the artwork so its contract state reads can update.
Choose the NFT collection or a separate custom contract. Custom contract code and standard proxy implementations are pinned when you save. An upgrade requires the creator to review and save the mapping again. Custom proxy schemes require their own integration.
Try the control designer →Existing art & contracts
Creator-managed controls can be changed without reuploading the artwork. KEEL shows them only when the NFT’s live presentation points to that exact work. The control panel is a mutable companion to the artwork, and is labelled as creator-managed. Changing an immutable script still requires its normal new publication or revision.
A custom ERC-721 can also embed the complete keel-collector-actions@1 declaration under keel_actions in its inline JSON tokenURI. KEEL reads that declaration directly from the token. This version supports EVM ERC-721 controls; other chain families and ERC-1155 require their own ownership and transaction adapters.
For agents & SDK projects
The portable file is keel.actions.json. The same validator drives Studio, the public JSON schema and the Studio MCP tools. Agents can inspect and prepare a draft mapping; they never sign or submit a collector action.
The palette-and-pulse contract example is source for testing and customization. It is not a deployed contract.

