app_versions.json 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969
  1. {
  2. "1.0.14": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/handbrake-web/1.0.14",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "0.7.3_1.0.14",
  10. "version": "1.0.14",
  11. "app_metadata": {
  12. "app_version": "0.7.3",
  13. "capabilities": [],
  14. "categories": [
  15. "media"
  16. ],
  17. "changelog_url": "https://github.com/TheNickOfTime/handbrake-web/releases",
  18. "date_added": "2025-01-15",
  19. "description": "A self-hosted platform to use HandBrake on your headless devices via a bespoke web interface. Harness the processing power of multiple devices to work on a single queue.",
  20. "home": "https://github.com/TheNickOfTime/handbrake-web",
  21. "host_mounts": [],
  22. "icon": "https://media.sys.truenas.net/apps/handbrake-web/icons/icon.png",
  23. "keywords": [
  24. "media",
  25. "video",
  26. "transcoder"
  27. ],
  28. "lib_version": "2.1.49",
  29. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  30. "maintainers": [
  31. {
  32. "email": "dev@ixsystems.com",
  33. "name": "truenas",
  34. "url": "https://www.truenas.com/"
  35. }
  36. ],
  37. "name": "handbrake-web",
  38. "run_as_context": [
  39. {
  40. "description": "Handbrake Web runs as any non-root user.",
  41. "gid": 568,
  42. "group_name": "handbrake-web",
  43. "uid": 568,
  44. "user_name": "handbrake-web"
  45. }
  46. ],
  47. "screenshots": [
  48. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot1.png",
  49. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot2.png",
  50. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot3.png",
  51. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot4.png",
  52. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot5.png",
  53. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot6.png"
  54. ],
  55. "sources": [
  56. "https://github.com/TheNickOfTime/handbrake-web"
  57. ],
  58. "title": "Handbrake Web",
  59. "train": "community",
  60. "version": "1.0.14"
  61. },
  62. "schema": {
  63. "groups": [
  64. {
  65. "name": "Handbrake Web Configuration",
  66. "description": "Configure Handbrake Web"
  67. },
  68. {
  69. "name": "User and Group Configuration",
  70. "description": "Configure User and Group for Handbrake Web"
  71. },
  72. {
  73. "name": "Network Configuration",
  74. "description": "Configure Network for Handbrake Web"
  75. },
  76. {
  77. "name": "Storage Configuration",
  78. "description": "Configure Storage for Handbrake Web"
  79. },
  80. {
  81. "name": "Labels Configuration",
  82. "description": "Configure Labels for Handbrake Web"
  83. },
  84. {
  85. "name": "Resources Configuration",
  86. "description": "Configure Resources for Handbrake Web"
  87. }
  88. ],
  89. "questions": [
  90. {
  91. "variable": "TZ",
  92. "group": "Handbrake Web Configuration",
  93. "label": "Timezone",
  94. "schema": {
  95. "type": "string",
  96. "default": "Etc/UTC",
  97. "required": true,
  98. "$ref": [
  99. "definitions/timezone"
  100. ]
  101. }
  102. },
  103. {
  104. "variable": "handbrake",
  105. "label": "",
  106. "group": "Handbrake Web Configuration",
  107. "schema": {
  108. "type": "dict",
  109. "attrs": [
  110. {
  111. "variable": "additional_envs",
  112. "label": "Additional Environment Variables",
  113. "schema": {
  114. "type": "list",
  115. "default": [],
  116. "items": [
  117. {
  118. "variable": "env",
  119. "label": "Environment Variable",
  120. "schema": {
  121. "type": "dict",
  122. "attrs": [
  123. {
  124. "variable": "name",
  125. "label": "Name",
  126. "schema": {
  127. "type": "string",
  128. "required": true
  129. }
  130. },
  131. {
  132. "variable": "value",
  133. "label": "Value",
  134. "schema": {
  135. "type": "string"
  136. }
  137. }
  138. ]
  139. }
  140. }
  141. ]
  142. }
  143. }
  144. ]
  145. }
  146. },
  147. {
  148. "variable": "run_as",
  149. "label": "",
  150. "group": "User and Group Configuration",
  151. "schema": {
  152. "type": "dict",
  153. "attrs": [
  154. {
  155. "variable": "user",
  156. "label": "User ID",
  157. "description": "The user id that Handbrake Web files will be owned by.",
  158. "schema": {
  159. "type": "int",
  160. "min": 568,
  161. "default": 568,
  162. "required": true
  163. }
  164. },
  165. {
  166. "variable": "group",
  167. "label": "Group ID",
  168. "description": "The group id that Handbrake Web files will be owned by.",
  169. "schema": {
  170. "type": "int",
  171. "min": 568,
  172. "default": 568,
  173. "required": true
  174. }
  175. }
  176. ]
  177. }
  178. },
  179. {
  180. "variable": "network",
  181. "label": "",
  182. "group": "Network Configuration",
  183. "schema": {
  184. "type": "dict",
  185. "attrs": [
  186. {
  187. "variable": "web_port",
  188. "label": "WebUI Port",
  189. "schema": {
  190. "type": "dict",
  191. "attrs": [
  192. {
  193. "variable": "bind_mode",
  194. "label": "Port Bind Mode",
  195. "description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
  196. "schema": {
  197. "type": "string",
  198. "default": "published",
  199. "enum": [
  200. {
  201. "value": "published",
  202. "description": "Publish port on the host for external access"
  203. },
  204. {
  205. "value": "exposed",
  206. "description": "Expose port for inter-container communication"
  207. },
  208. {
  209. "value": "",
  210. "description": "None"
  211. }
  212. ]
  213. }
  214. },
  215. {
  216. "variable": "port_number",
  217. "label": "Port Number",
  218. "schema": {
  219. "type": "int",
  220. "default": 31116,
  221. "min": 1,
  222. "max": 65535,
  223. "required": true
  224. }
  225. },
  226. {
  227. "variable": "host_ips",
  228. "label": "Host IPs",
  229. "description": "IPs on the host to bind this port",
  230. "schema": {
  231. "type": "list",
  232. "show_if": [
  233. [
  234. "bind_mode",
  235. "=",
  236. "published"
  237. ]
  238. ],
  239. "default": [],
  240. "items": [
  241. {
  242. "variable": "host_ip",
  243. "label": "Host IP",
  244. "schema": {
  245. "type": "string",
  246. "required": true,
  247. "$ref": [
  248. "definitions/node_bind_ip"
  249. ]
  250. }
  251. }
  252. ]
  253. }
  254. }
  255. ]
  256. }
  257. }
  258. ]
  259. }
  260. },
  261. {
  262. "variable": "storage",
  263. "label": "",
  264. "group": "Storage Configuration",
  265. "schema": {
  266. "type": "dict",
  267. "attrs": [
  268. {
  269. "variable": "data",
  270. "label": "Handbrake Web Data Storage",
  271. "description": "The path to store Handbrake Web Data.",
  272. "schema": {
  273. "type": "dict",
  274. "attrs": [
  275. {
  276. "variable": "type",
  277. "label": "Type",
  278. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  279. "schema": {
  280. "type": "string",
  281. "required": true,
  282. "default": "ix_volume",
  283. "enum": [
  284. {
  285. "value": "host_path",
  286. "description": "Host Path (Path that already exists on the system)"
  287. },
  288. {
  289. "value": "ix_volume",
  290. "description": "ixVolume (Dataset created automatically by the system)"
  291. }
  292. ]
  293. }
  294. },
  295. {
  296. "variable": "ix_volume_config",
  297. "label": "ixVolume Configuration",
  298. "description": "The configuration for the ixVolume dataset.",
  299. "schema": {
  300. "type": "dict",
  301. "show_if": [
  302. [
  303. "type",
  304. "=",
  305. "ix_volume"
  306. ]
  307. ],
  308. "$ref": [
  309. "normalize/ix_volume"
  310. ],
  311. "attrs": [
  312. {
  313. "variable": "acl_enable",
  314. "label": "Enable ACL",
  315. "description": "Enable ACL for the storage.",
  316. "schema": {
  317. "type": "boolean",
  318. "default": false
  319. }
  320. },
  321. {
  322. "variable": "dataset_name",
  323. "label": "Dataset Name",
  324. "description": "The name of the dataset to use for storage.",
  325. "schema": {
  326. "type": "string",
  327. "required": true,
  328. "hidden": true,
  329. "default": "data"
  330. }
  331. },
  332. {
  333. "variable": "acl_entries",
  334. "label": "ACL Configuration",
  335. "schema": {
  336. "type": "dict",
  337. "show_if": [
  338. [
  339. "acl_enable",
  340. "=",
  341. true
  342. ]
  343. ],
  344. "attrs": []
  345. }
  346. }
  347. ]
  348. }
  349. },
  350. {
  351. "variable": "host_path_config",
  352. "label": "Host Path Configuration",
  353. "schema": {
  354. "type": "dict",
  355. "show_if": [
  356. [
  357. "type",
  358. "=",
  359. "host_path"
  360. ]
  361. ],
  362. "attrs": [
  363. {
  364. "variable": "acl_enable",
  365. "label": "Enable ACL",
  366. "description": "Enable ACL for the storage.",
  367. "schema": {
  368. "type": "boolean",
  369. "default": false
  370. }
  371. },
  372. {
  373. "variable": "acl",
  374. "label": "ACL Configuration",
  375. "schema": {
  376. "type": "dict",
  377. "show_if": [
  378. [
  379. "acl_enable",
  380. "=",
  381. true
  382. ]
  383. ],
  384. "attrs": [],
  385. "$ref": [
  386. "normalize/acl"
  387. ]
  388. }
  389. },
  390. {
  391. "variable": "path",
  392. "label": "Host Path",
  393. "description": "The host path to use for storage.",
  394. "schema": {
  395. "type": "hostpath",
  396. "show_if": [
  397. [
  398. "acl_enable",
  399. "=",
  400. false
  401. ]
  402. ],
  403. "required": true
  404. }
  405. }
  406. ]
  407. }
  408. }
  409. ]
  410. }
  411. },
  412. {
  413. "variable": "video",
  414. "label": "Handbrake Web Video Storage",
  415. "description": "The path to store Handbrake Web Video.",
  416. "schema": {
  417. "type": "dict",
  418. "attrs": [
  419. {
  420. "variable": "type",
  421. "label": "Type",
  422. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  423. "schema": {
  424. "type": "string",
  425. "required": true,
  426. "default": "ix_volume",
  427. "enum": [
  428. {
  429. "value": "host_path",
  430. "description": "Host Path (Path that already exists on the system)"
  431. },
  432. {
  433. "value": "ix_volume",
  434. "description": "ixVolume (Dataset created automatically by the system)"
  435. }
  436. ]
  437. }
  438. },
  439. {
  440. "variable": "ix_volume_config",
  441. "label": "ixVolume Configuration",
  442. "description": "The configuration for the ixVolume dataset.",
  443. "schema": {
  444. "type": "dict",
  445. "show_if": [
  446. [
  447. "type",
  448. "=",
  449. "ix_volume"
  450. ]
  451. ],
  452. "$ref": [
  453. "normalize/ix_volume"
  454. ],
  455. "attrs": [
  456. {
  457. "variable": "acl_enable",
  458. "label": "Enable ACL",
  459. "description": "Enable ACL for the storage.",
  460. "schema": {
  461. "type": "boolean",
  462. "default": false
  463. }
  464. },
  465. {
  466. "variable": "dataset_name",
  467. "label": "Dataset Name",
  468. "description": "The name of the dataset to use for storage.",
  469. "schema": {
  470. "type": "string",
  471. "required": true,
  472. "hidden": true,
  473. "default": "video"
  474. }
  475. },
  476. {
  477. "variable": "acl_entries",
  478. "label": "ACL Configuration",
  479. "schema": {
  480. "type": "dict",
  481. "show_if": [
  482. [
  483. "acl_enable",
  484. "=",
  485. true
  486. ]
  487. ],
  488. "attrs": []
  489. }
  490. }
  491. ]
  492. }
  493. },
  494. {
  495. "variable": "host_path_config",
  496. "label": "Host Path Configuration",
  497. "schema": {
  498. "type": "dict",
  499. "show_if": [
  500. [
  501. "type",
  502. "=",
  503. "host_path"
  504. ]
  505. ],
  506. "attrs": [
  507. {
  508. "variable": "acl_enable",
  509. "label": "Enable ACL",
  510. "description": "Enable ACL for the storage.",
  511. "schema": {
  512. "type": "boolean",
  513. "default": false
  514. }
  515. },
  516. {
  517. "variable": "acl",
  518. "label": "ACL Configuration",
  519. "schema": {
  520. "type": "dict",
  521. "show_if": [
  522. [
  523. "acl_enable",
  524. "=",
  525. true
  526. ]
  527. ],
  528. "attrs": [],
  529. "$ref": [
  530. "normalize/acl"
  531. ]
  532. }
  533. },
  534. {
  535. "variable": "path",
  536. "label": "Host Path",
  537. "description": "The host path to use for storage.",
  538. "schema": {
  539. "type": "hostpath",
  540. "show_if": [
  541. [
  542. "acl_enable",
  543. "=",
  544. false
  545. ]
  546. ],
  547. "required": true
  548. }
  549. }
  550. ]
  551. }
  552. }
  553. ]
  554. }
  555. },
  556. {
  557. "variable": "additional_storage",
  558. "label": "Additional Storage",
  559. "schema": {
  560. "type": "list",
  561. "default": [],
  562. "items": [
  563. {
  564. "variable": "storageEntry",
  565. "label": "Storage Entry",
  566. "schema": {
  567. "type": "dict",
  568. "attrs": [
  569. {
  570. "variable": "type",
  571. "label": "Type",
  572. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.\n",
  573. "schema": {
  574. "type": "string",
  575. "required": true,
  576. "default": "ix_volume",
  577. "enum": [
  578. {
  579. "value": "host_path",
  580. "description": "Host Path (Path that already exists on the system)"
  581. },
  582. {
  583. "value": "ix_volume",
  584. "description": "ixVolume (Dataset created automatically by the system)"
  585. },
  586. {
  587. "value": "cifs",
  588. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  589. }
  590. ]
  591. }
  592. },
  593. {
  594. "variable": "read_only",
  595. "label": "Read Only",
  596. "description": "Mount the volume as read only.",
  597. "schema": {
  598. "type": "boolean",
  599. "default": false
  600. }
  601. },
  602. {
  603. "variable": "mount_path",
  604. "label": "Mount Path",
  605. "description": "The path inside the container to mount the storage.",
  606. "schema": {
  607. "type": "path",
  608. "required": true
  609. }
  610. },
  611. {
  612. "variable": "host_path_config",
  613. "label": "Host Path Configuration",
  614. "schema": {
  615. "type": "dict",
  616. "show_if": [
  617. [
  618. "type",
  619. "=",
  620. "host_path"
  621. ]
  622. ],
  623. "attrs": [
  624. {
  625. "variable": "acl_enable",
  626. "label": "Enable ACL",
  627. "description": "Enable ACL for the storage.",
  628. "schema": {
  629. "type": "boolean",
  630. "default": false
  631. }
  632. },
  633. {
  634. "variable": "acl",
  635. "label": "ACL Configuration",
  636. "schema": {
  637. "type": "dict",
  638. "show_if": [
  639. [
  640. "acl_enable",
  641. "=",
  642. true
  643. ]
  644. ],
  645. "attrs": [],
  646. "$ref": [
  647. "normalize/acl"
  648. ]
  649. }
  650. },
  651. {
  652. "variable": "path",
  653. "label": "Host Path",
  654. "description": "The host path to use for storage.",
  655. "schema": {
  656. "type": "hostpath",
  657. "show_if": [
  658. [
  659. "acl_enable",
  660. "=",
  661. false
  662. ]
  663. ],
  664. "required": true
  665. }
  666. }
  667. ]
  668. }
  669. },
  670. {
  671. "variable": "ix_volume_config",
  672. "label": "ixVolume Configuration",
  673. "description": "The configuration for the ixVolume dataset.",
  674. "schema": {
  675. "type": "dict",
  676. "show_if": [
  677. [
  678. "type",
  679. "=",
  680. "ix_volume"
  681. ]
  682. ],
  683. "$ref": [
  684. "normalize/ix_volume"
  685. ],
  686. "attrs": [
  687. {
  688. "variable": "acl_enable",
  689. "label": "Enable ACL",
  690. "description": "Enable ACL for the storage.",
  691. "schema": {
  692. "type": "boolean",
  693. "default": false
  694. }
  695. },
  696. {
  697. "variable": "dataset_name",
  698. "label": "Dataset Name",
  699. "description": "The name of the dataset to use for storage.",
  700. "schema": {
  701. "type": "string",
  702. "required": true,
  703. "default": "storage_entry"
  704. }
  705. },
  706. {
  707. "variable": "acl_entries",
  708. "label": "ACL Configuration",
  709. "schema": {
  710. "type": "dict",
  711. "show_if": [
  712. [
  713. "acl_enable",
  714. "=",
  715. true
  716. ]
  717. ],
  718. "attrs": [],
  719. "$ref": [
  720. "normalize/acl"
  721. ]
  722. }
  723. }
  724. ]
  725. }
  726. },
  727. {
  728. "variable": "cifs_config",
  729. "label": "SMB Configuration",
  730. "description": "The configuration for the SMB dataset.",
  731. "schema": {
  732. "type": "dict",
  733. "show_if": [
  734. [
  735. "type",
  736. "=",
  737. "cifs"
  738. ]
  739. ],
  740. "attrs": [
  741. {
  742. "variable": "server",
  743. "label": "Server",
  744. "description": "The server to mount the SMB share.",
  745. "schema": {
  746. "type": "string",
  747. "required": true
  748. }
  749. },
  750. {
  751. "variable": "path",
  752. "label": "Path",
  753. "description": "The path to mount the SMB share.",
  754. "schema": {
  755. "type": "string",
  756. "required": true
  757. }
  758. },
  759. {
  760. "variable": "username",
  761. "label": "Username",
  762. "description": "The username to use for the SMB share.",
  763. "schema": {
  764. "type": "string",
  765. "required": true
  766. }
  767. },
  768. {
  769. "variable": "password",
  770. "label": "Password",
  771. "description": "The password to use for the SMB share.",
  772. "schema": {
  773. "type": "string",
  774. "required": true,
  775. "private": true
  776. }
  777. },
  778. {
  779. "variable": "domain",
  780. "label": "Domain",
  781. "description": "The domain to use for the SMB share.",
  782. "schema": {
  783. "type": "string"
  784. }
  785. }
  786. ]
  787. }
  788. }
  789. ]
  790. }
  791. }
  792. ]
  793. }
  794. }
  795. ]
  796. }
  797. },
  798. {
  799. "variable": "labels",
  800. "label": "",
  801. "group": "Labels Configuration",
  802. "schema": {
  803. "type": "list",
  804. "default": [],
  805. "items": [
  806. {
  807. "variable": "label",
  808. "label": "Label",
  809. "schema": {
  810. "type": "dict",
  811. "attrs": [
  812. {
  813. "variable": "key",
  814. "label": "Key",
  815. "schema": {
  816. "type": "string",
  817. "required": true
  818. }
  819. },
  820. {
  821. "variable": "value",
  822. "label": "Value",
  823. "schema": {
  824. "type": "string",
  825. "required": true
  826. }
  827. },
  828. {
  829. "variable": "containers",
  830. "label": "Containers",
  831. "description": "Containers where the label should be applied",
  832. "schema": {
  833. "type": "list",
  834. "items": [
  835. {
  836. "variable": "container",
  837. "label": "Container",
  838. "schema": {
  839. "type": "string",
  840. "required": true,
  841. "enum": [
  842. {
  843. "value": "handbrake-server",
  844. "description": "handbrake-server"
  845. },
  846. {
  847. "value": "handbrake-worker",
  848. "description": "handbrake-worker"
  849. }
  850. ]
  851. }
  852. }
  853. ]
  854. }
  855. }
  856. ]
  857. }
  858. }
  859. ]
  860. }
  861. },
  862. {
  863. "variable": "resources",
  864. "label": "",
  865. "group": "Resources Configuration",
  866. "schema": {
  867. "type": "dict",
  868. "attrs": [
  869. {
  870. "variable": "limits",
  871. "label": "Limits",
  872. "schema": {
  873. "type": "dict",
  874. "attrs": [
  875. {
  876. "variable": "cpus",
  877. "label": "CPUs",
  878. "description": "CPUs limit for Handbrake Web.",
  879. "schema": {
  880. "type": "int",
  881. "default": 2,
  882. "required": true
  883. }
  884. },
  885. {
  886. "variable": "memory",
  887. "label": "Memory (in MB)",
  888. "description": "Memory limit for Handbrake Web.",
  889. "schema": {
  890. "type": "int",
  891. "default": 4096,
  892. "required": true
  893. }
  894. }
  895. ]
  896. }
  897. },
  898. {
  899. "variable": "gpus",
  900. "group": "Resources Configuration",
  901. "label": "GPU Configuration",
  902. "schema": {
  903. "type": "dict",
  904. "$ref": [
  905. "definitions/gpu_configuration"
  906. ],
  907. "attrs": []
  908. }
  909. }
  910. ]
  911. }
  912. }
  913. ]
  914. },
  915. "readme": "<h1>Handbrake Web</h1> <p><a href=\"https://github.com/TheNickOfTime/handbrake-web\">Handbrake Web</a> is a self-hosted platform to use <a href=\"https://handbrake.fr/\">HandBrake</a> on your headless devices via a bespoke web interface.</p>",
  916. "changelog": null,
  917. "chart_metadata": {
  918. "app_version": "0.7.3",
  919. "capabilities": [],
  920. "categories": [
  921. "media"
  922. ],
  923. "changelog_url": "https://github.com/TheNickOfTime/handbrake-web/releases",
  924. "date_added": "2025-01-15",
  925. "description": "A self-hosted platform to use HandBrake on your headless devices via a bespoke web interface. Harness the processing power of multiple devices to work on a single queue.",
  926. "home": "https://github.com/TheNickOfTime/handbrake-web",
  927. "host_mounts": [],
  928. "icon": "https://media.sys.truenas.net/apps/handbrake-web/icons/icon.png",
  929. "keywords": [
  930. "media",
  931. "video",
  932. "transcoder"
  933. ],
  934. "lib_version": "2.1.49",
  935. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  936. "maintainers": [
  937. {
  938. "email": "dev@ixsystems.com",
  939. "name": "truenas",
  940. "url": "https://www.truenas.com/"
  941. }
  942. ],
  943. "name": "handbrake-web",
  944. "run_as_context": [
  945. {
  946. "description": "Handbrake Web runs as any non-root user.",
  947. "gid": 568,
  948. "group_name": "handbrake-web",
  949. "uid": 568,
  950. "user_name": "handbrake-web"
  951. }
  952. ],
  953. "screenshots": [
  954. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot1.png",
  955. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot2.png",
  956. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot3.png",
  957. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot4.png",
  958. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot5.png",
  959. "https://media.sys.truenas.net/apps/handbrake-web/screenshots/screenshot6.png"
  960. ],
  961. "sources": [
  962. "https://github.com/TheNickOfTime/handbrake-web"
  963. ],
  964. "title": "Handbrake Web",
  965. "train": "community",
  966. "version": "1.0.14"
  967. }
  968. }
  969. }