Christina48 downloadsUpload files to daily GitHub Release assets and insert ready-to-use links or media players.
Upload any local file to a GitHub repository's Release assets, then insert a ready-to-use player or link into the active note and copy the download URL.
The plugin is designed for a simple workflow: choose a file → upload → insert → copy link. It does not use Git commands and does not commit uploaded files to the repository.
YYYY-MM-DD) in your configured timezone.browser_download_url to the clipboard.Create or choose a repository for uploaded files. Initialize it with a README if it is otherwise empty. Uploaded files will not appear in the repository tree; they are stored in Releases.
Do not enable immutable Releases. The plugin needs to add, replace, and delete assets after each daily Release is published.
In GitHub, create a fine-grained personal access token with the smallest practical scope:
| Setting | Value |
|---|---|
| Repository access | Only selected repositories |
| Selected repositories | Only the repository used by this plugin |
| Contents | Read and write |
| Metadata | Read |
| Other permissions | No access |
Organization-owned repositories may require administrator approval.
Open Settings → Release File Publisher, then enter:
Europe/Berlin or America/New_York. The detected system timezone is used initially.Select Test connection. A successful check shows GitHub connection successful. The check verifies read access; the first upload confirms write access.
Use either ribbon icon or the Command Palette:
If no editable Markdown note is active, the plugin still uploads the file and copies the URL. If the active note, selection, or cursor changes while an upload is running, the plugin avoids inserting into the wrong location and falls back to copying.
| Type | Extensions | Inserted content |
|---|---|---|
| Audio | mp3, wav, m4a, ogg, flac | HTML audio player with matching MIME type |
| Images | png, jpg, jpeg, gif, webp, svg | Markdown image |
| Video | mp4, webm, mov, m4v | Responsive HTML video player |
| PDF and documents | pdf, doc, docx, odt, rtf | Document download link |
| Spreadsheets | xls, xlsx, csv, ods | Spreadsheet download link |
| Presentations | ppt, pptx, odp | Presentation download link |
| Archives | zip, rar, 7z, tar, gz, tgz | Archive download link |
| Other files | Any extension | Generic download link |
The asset list is used only for conflict checks and management. A successful upload calls the editor insertion once for the newly uploaded file; it never inserts every asset from that day's Release.
recording-2.mp3 and recording-3.mp3.Open Browse uploaded files, choose a date, select Delete, and confirm. The local file and note are never changed. Existing links to that asset stop working.
After the final asset is deleted, the plugin reads the remote list again and removes the empty Release and its date entry. An old empty Release can be removed with Remove empty date. GitHub does not provide an atomic “delete only if empty” operation, so avoid uploading to the same date from another device during cleanup.
api.github.com and uploads.github.com for the repository configured by the user. GitHub's terms and privacy policy apply.data.json) without additional encryption. The token is masked in settings and is never placed in download URLs. Protect the vault configuration directory and do not publish or share data.json.Only upload content you are permitted to share. Files in public repositories are publicly accessible. Private-repository links generally require the reader to sign in to GitHub because the plugin does not put credentials in embedded links.
npm install
npm run typecheck
npm test
npm run build
The production build creates main.js. The project uses TypeScript, the Obsidian API, Node.js, npm, and esbuild. It performs all repository operations through the GitHub REST API and never invokes Git or a shell command at runtime.