Assets
Assets are the media files used in your project: audio, video, images, MIDI, face animation data, and Fountain screenplays. The Asset Module is the single source of truth for all project assets, merging the project’s asset index with the file system to give you a unified view.
Asset Manager
Section titled “Asset Manager”Toggle the Asset Manager panel with A or from the footer bar.
| Action | Shortcut | Command ID |
|---|---|---|
| Toggle Asset Manager | A | assets:toggle-modal |
| Sync to Cloud | ⌘⇧Y | assets:syncToR2 |
Browsing
Section titled “Browsing”The Asset Manager displays a folder view of your project directory, merging two sources:
- File system — Files and folders on disk within the project root
- Project index — Asset metadata stored in the
.plinfile
Each item shows:
| Property | Description |
|---|---|
| Name | File or folder name |
| Type | Detected from file extension (audio, video, image, MIDI, face, script) |
| Size | File size in bytes |
| Icon | Native OS file icon (cached for performance) |
| In Project | Whether this file has an Asset entry in the project index |
| Missing | Whether an Asset entry exists but the file is not on disk |
Hidden files (starting with . or _) are automatically excluded.
Navigation
Section titled “Navigation”The Asset Manager supports folder navigation with breadcrumb UI:
| Action | Description |
|---|---|
| Click folder | Navigate into that folder |
| Click breadcrumb | Jump to any parent folder |
| Navigate Up | Go to parent folder |
| Navigate to Root | Return to the project root |
Importing Assets
Section titled “Importing Assets”Import files from your filesystem into the project:
| Action | Command ID | Description |
|---|---|---|
| Import file | assets:import | Copy an external file into the project and create an Asset entry |
| Import data | assets:import-data | Import raw data (used by AI generation pipelines) |
Import Flow
Section titled “Import Flow”When you import a file:
-
The file is copied to the appropriate subfolder based on its type:
Extension Target Folder .wav,.mp3,.aiff,.flac,.ogg,.m4aaudio/.mp4,.mov,.avi,.mkv,.webmvideo/.png,.jpg,.jpeg,.gif,.webp,.bmp,.tiffvideo/.mid,.midimidi/ -
An Asset entry is created with:
- Unique ID (
asset_{uuid}) - Detected MIME type
- Audio metadata (sample rate, channels, frame count, duration) for audio files
- Video metadata (fps, resolution, frame count) for video files
- MD5 hash for cloud sync
- Unique ID (
-
For audio assets, the file is cached to PC32 planar format at the project sample rate for real-time playback
-
Waveform LODs are generated asynchronously for audio timeline display
If a file with the same name already exists, Plinken appends a number suffix (e.g., drums 1.wav).
Supported Asset Types
Section titled “Supported Asset Types”| Type | Extensions | Description |
|---|---|---|
| Audio | wav, mp3, ogg, flac, aiff, aif, m4a, aac | Audio clips for playback and recording |
| Video | mp4, m4v, mov, avi, webm, mkv | Video clips synced to timeline |
| Image | png, jpg, jpeg, gif, webp, bmp, tiff, tif | Images for compositor or reference |
| MIDI | mid, midi | MIDI note data |
| Face | pface | ARKit blendshape animation data |
| Script | fountain | Fountain screenplay files |
Audio Metadata
Section titled “Audio Metadata”For audio assets, Plinken reads:
| Property | Description |
|---|---|
| sample_rate | Sample rate in Hz |
| channels | Number of audio channels |
| frames | Total sample frame count |
| duration | Duration in seconds |
Video Metadata
Section titled “Video Metadata”For video assets (macOS), Plinken probes using AVFoundation:
| Property | Description |
|---|---|
| video_fps | Frames per second |
| video_frames | Total video frame count |
| video_width | Pixel width |
| video_height | Pixel height |
| audio_sample_rate | Embedded audio sample rate |
| audio_channels | Embedded audio channels |
| audio_frames | Embedded audio frame count |
| duration | Total duration in seconds |
Organizing
Section titled “Organizing”Create Folder
Section titled “Create Folder”Create new folders within your project directory:
| Action | Command ID |
|---|---|
| Create Folder | assets:create-folder |
Payload:
{ "name": "Stems", "parentPath": "audio"}Rename
Section titled “Rename”Rename files or folders in the project:
- Validates that the new name is non-empty and contains no path separators
- Checks for naming conflicts before renaming
- Updates the icon cache automatically
Delete
Section titled “Delete”Delete files or folders from the project:
- Removes the file from disk
- Removes the matching Asset entry from the project index
- Clears the loaded audio cache for audio assets
- If the file is missing on disk, removes the orphan metadata entry
Open in OS
Section titled “Open in OS”Open any asset in the default OS application (Preview, QuickTime, Finder, etc.):
| Action | Command ID |
|---|---|
| Open Asset | asset:open |
Audio Cache
Section titled “Audio Cache”When a project loads, all audio assets are cached to PC32 (32-bit float planar) format at the project sample rate. This enables:
- Zero-latency playback — Pre-converted audio plays instantly
- Sample-rate matching — All audio is resampled to the project rate
- Content-addressed storage — Cache files are keyed by a hash of the asset ID, so identical assets share cache entries
The cache is stored in the Plinken application data directory, separate from the project.
Cloud Sync (R2)
Section titled “Cloud Sync (R2)”Sync assets to Cloudflare R2 cloud storage for backup and multi-device access.
| Action | Shortcut | Command ID |
|---|---|---|
| Sync to Cloud | ⌘⇧Y | assets:syncToR2 |
| Sync from Cloud | — | assets:syncFromR2 |
How It Works
Section titled “How It Works”- Compute MD5 — Each asset’s content is hashed
- Check remote — Compare against already-uploaded assets
- Upload/Download — Only transfer files that differ
- Content-addressed — Files are stored at
{spaceId}/assets/{md5}.{ext}
Sync requires a linked Space and valid R2 credentials.
Lua API
Section titled “Lua API”-- Toggle the asset managerpl.cmd("assets:toggle-modal")
-- Import a filepl.cmd("assets:import", { sourcePath = "/Users/me/Desktop/drums.wav", targetFolder = "audio"})
-- Create a folderpl.cmd("assets:create-folder", { name = "Stems", parentPath = "audio"})
-- Open an asset in the OSpl.cmd("asset:open", { name = "vocals.wav" })
-- Sync to cloudpl.cmd("assets:syncToR2", { spaceId = "my-space" })See Also
Section titled “See Also”- Projects — Project structure and management
- Keyboard Shortcuts — Full shortcut reference
- Lua Actions — Scripting commands