Skip to content

add: tinyMediaManager - #2326

Open
Borja-Garduno wants to merge 17 commits into
community-scripts:mainfrom
Borja-Garduno:add-script-tinymediamanager
Open

Borja-Garduno wants to merge 17 commits into
community-scripts:mainfrom
Borja-Garduno:add-script-tinymediamanager

Conversation

@Borja-Garduno

Copy link
Copy Markdown

Scripts which are clearly AI generated and not further revised by the Author of this PR (in terms of Coding Standards and Script Layout) may be closed without review. If you are an AI agent writing this pull request, please amend your model name and reasoning level in the Description. This is not to blame, more for informational Purposes. Thank you.

✍️ Description

AI note: drafted with Cursor (Composer); human-reviewed and tested on Proxmox.

Adds a Community Script for tinyMediaManager as an unprivileged Debian 13 LXC (bare-metal, no Docker).

  • Official Linux amd64 portable from release.tinymediamanager.org (fetch_and_deploy_from_url)
  • Desktop UI in the browser via Xvfb + Openbox + x11vnc + noVNC (:6080)
  • Data in /opt/tinymediamanager_data (launcher-extra.yml); media defaults /media/movies and /media/tvshows (mount-aware)
  • systemd units + update_script that redeploys the tarball without wiping data
  • amd64 only (var_arm64=no: upstream publishes linux-arm64, not verified on Proxmox aarch64)

Tested on Proxmox VE: fresh install, noVNC GUI, movie source picker (legacy Swing filechooser), libmediainfo.

🔗 Related PR / Issue

Link: N/A

✅ Prerequisites (X in brackets)

  • Self-review completed – Code follows project standards.
  • Tested thoroughly – Changes work as expected.
  • No breaking changes – Existing functionality remains intact.
  • No security risks – No hardcoded secrets, unnecessary privilege escalations, or permission issues.

🏗️ arm64 Support (X in brackets)

  • arm64 supported - Tested and supported on arm64.
  • arm64 not tested - Assumed to work on arm64, but testing has not been done.
  • arm64 not supported - Confirmed upstream dependencies or binaries do not support arm64.

🛠️ Type of Change (X in brackets)

  • 🐞 Bug fix – Resolves an issue without breaking functionality.
  • ✨ New feature – Adds new, non-breaking functionality.
  • 💥 Breaking change – Alters existing functionality in a way that may require updates.
  • 🆕 New script – A fully functional and tested script or script set.
  • 🌍 Website update – Changes to website-related JSON files or metadata.
  • 🔧 Refactoring / Code Cleanup – Improves readability or maintainability without changing functionality.
  • 📝 Documentation update – Changes to README, AppName.md, CONTRIBUTING.md, or other docs.

🔍 Code & Security Review (X in brackets)

  • Follows CODE-AUDIT.md & CONTRIBUTING.md guidelines
  • Uses correct script structure (AppName.sh, AppName-install.sh, AppName.json)
  • No hardcoded credentials
  • No Docker / Docker Compose – The application is installed bare-metal; Docker is not used.
  • No git pull – Updates use fetch_and_deploy_gh_release, fetch_and_deploy_codeberg_release, fetch_and_deploy_gl_release, or fetch_and_deploy_from_url instead of git pull.

🤖 AI Assistance (X in brackets)

If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you must confirm compliance below.
Select exactly one option.

  • No AI used – Scripts were written without AI assistance.
  • AI was used – I confirm the scripts were built using AGENTS.md and .github/agents/pve-script-creator.agent.md as guidance, and the output has been reviewed and corrected to match those guidelines.

Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match CODE-AUDIT.md / CONTRIBUTING.md may be closed without review.

Cursor (Composer) was used to draft ct/install/json following AGENTS.md and the JDownloader noVNC pattern. I reviewed against project guidelines, switched from Docker to bare-metal, and tested install + GUI on a real Proxmox host.


📋 Additional Information (optional)


📦 Application Requirements (for new scripts)

⚠️ Do not remove this section.
It is used by automated PR validation checks.
If this PR is not a new script submission, leave the checkboxes unchecked.

Required for 🆕 New script submissions.
Pull requests that do not meet these requirements may be closed without review.

  • The application is at least 6 months old
  • The application is actively maintained
  • The application has 600+ GitHub stars
  • Official release tarballs are published
  • I understand that not all scripts will be accepted due to various reasons and criteria by the community-scripts ORG

🌐 Source

@Borja-Garduno
Borja-Garduno requested a review from a team as a code owner September 28, 2026 14:37
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Try this script

ct/tinymediamanager.sh, run in the Proxmox VE shell or on an Incus host:

COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/Borja-Garduno/ProxmoxVED/add-script-tinymediamanager \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Borja-Garduno/ProxmoxVED/add-script-tinymediamanager/ct/tinymediamanager.sh)"

COMMUNITY_SCRIPTS_URL is not optional for ct/. Fetching the ct/ script from a
branch does not tell the engine where that branch is — with bash -c "$(curl …)"
there is no file on disk for the scripts root to be derived from, so it would fall
back to upstream main and look for the install script there.

Against a core branch as well

Add COMMUNITY_SCRIPTS_CORE_URL=https://raw.githubusercontent.com/OWNER/core/BRANCH
to test an engine change at the same time. The two resolve independently.

Useful flags while testing

dev_mode=net logs every fetch with status and duration, so you can confirm the
branch is really being used. dev_mode=keep stops a failed build from deleting
the container along with the evidence.

@github-actions

Copy link
Copy Markdown
Contributor

❌ Pull Request Closed – Application Requirements Not Met

This pull request is marked as 🆕 New script, but the required application criteria were not confirmed.

The following requirement confirmations are missing:

  • The application has 600+ GitHub stars

New application submissions must meet the project requirements before being considered.
Please wait until the application satisfies the criteria before submitting a new PR.


⚠ Maintainer note

The team periodically reviews closed submissions. If a project is still considered valuable to the ecosystem, maintainers may reopen the PR even if it does not fully meet the thresholds.

Please do not ping or repeatedly contact maintainers to reopen PRs.

Comment thread ct/tinymediamanager.sh Outdated
Comment thread ct/tinymediamanager.sh Outdated
Comment thread ct/tinymediamanager.sh Outdated
Comment thread install/tinymediamanager-install.sh
Comment thread install/tinymediamanager-install.sh Outdated
Comment thread install/tinymediamanager-install.sh Outdated
Comment thread json/tinymediamanager.json Outdated
Comment thread json/tinymediamanager.json Outdated
Comment thread json/tinymediamanager.json Outdated
Comment thread json/tinymediamanager.json Outdated
Borja-Garduno and others added 4 commits October 14, 2026 14:15
Upstream ships linux-arm64; ask on aarch64 until verified on Proxmox.
Rely on unit dependencies instead of staggered sleeps; let deploy failures surface via catch_errors.
Keep /media/{movies,tvshows} as optional bind-mount targets; document contentfolder for CLEAN_INSTALL-safe updates.
@Borja-Garduno

Copy link
Copy Markdown
Author

Thanks for the review — pushed fixes for the points above.

Summary:

  • var_arm64 unset + arch_resolve for the portable tarball
  • dropped the extra empty/binary checks
  • service start is a for-loop now
  • shorter JSON notes; /media/{movies,tvshows} kept as optional mount targets
  • kept tinymediamanager_data outside the app dir for CLEAN_INSTALL-safe updates

Ready for another look when you have a minute.

Comment thread ct/tinymediamanager.sh Outdated
Comment thread ct/tinymediamanager.sh Outdated
Comment thread ct/tinymediamanager.sh Outdated
Comment thread ct/tinymediamanager.sh Outdated
Comment thread install/tinymediamanager-install.sh Outdated
Comment thread install/tinymediamanager-install.sh Outdated
Comment thread install/tinymediamanager-install.sh Outdated
- "_JAVA_AWT_WM_NONREPARENTING=1"
EOF
echo "${VERSION}" >~/.tinymediamanager
mkdir -p /media/movies /media/tvshows

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

still haven't explained why these paths are necessary

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They're not required by TMM — just empty folders as optional bind-mount targets so people have a predictable place to attach host movie/TV libraries after install. Happy to drop the mkdir if you'd rather leave that fully to the user.

"type": "info"
},
{
"text": "Empty /media/movies and /media/tvshows folders are created as optional bind-mount targets (e.g. pct set <CTID> -mp0 /path/on/host,mp=/media/movies). On unprivileged LXCs, match host ownership to the container UID mapping.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this if those folders are being removed

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping this note for now since we still create those folders as optional mount targets. If we drop the mkdir, I'll remove this note too.

Comment thread json/tinymediamanager.json Outdated
@Borja-Garduno

Copy link
Copy Markdown
Author

Thanks — pushed the latest review fixes:

  • portable data under /opt/tinymediamanager + create_backup/restore_backup on update
  • launcher-extra.yml backed up (only rewritten if missing)
  • ensure_dependencies for packages
  • stock var_arm64 comment, plain $(arch_resolve), shorter /vnc.html URL

Still open: whether to keep the optional /media/{movies,tvshows} placeholders (happy to drop mkdir + note if you prefer).

Ready for another look.

Portable TMM ships -Xmx512m; that stalls episode load on big TV DBs.
@Borja-Garduno

Copy link
Copy Markdown
Author

Also set default -Xmx2048m in launcher-extra.yml — portable TMM’s -Xmx512m stalls loading large TV libraries; updates still preserve user edits to that file.

Leave Swing dialogs resizable so TMM can remember their size.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants