app_versions.json 59 KB

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