forked from mattblovell/kodi_panel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup1080pold.toml
1384 lines (1220 loc) · 34.9 KB
/
setup1080pold.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# --------------------------------------------------------------------
# Setup file for kodi_panel using 800x480 resolution
#
# For documentation regarding TOML (Tom's Obvious Minimal Language),
# see references at https://toml.io/en/
#
# TOML is context sensitive, so the order of the entries below
# (particularly the arrays of tables) DOES matter unfortunately.
#
# --------------------------------------------------------------------
# Specify the Kodi instance to query. Use localhost if running on
# the same box as Kodi, otherwise specify a resolvable machine name or
# IP address.
#BASE_URL = "http://192.168.1.111:8080"
BASE_URL = "http://192.168.1.51:80"
# --------------------------------------------------------------------
#
# GPIO setup, display options
#
# Specify the size of the display in pixels. These values get stored
# into a tuple within kodi_panel and MUST match how the display (or
# framebuffer) is configured.
DISPLAY_WIDTH = 1920
DISPLAY_HEIGHT = 1080
# GPIO assignment for screen's touch interrupt (T_IRQ), using RPi.GPIO
# numbering.
#
# Assuming your display has a touchscreen with an active-low
# interrupt, find a pin that's unused by luma. The touchscreen chip
# in my display has its own internal pullup resistor, so no GPIO
# pullup is needed.
#
# I found the following pins to work on the two SBCs.
#
# Odroid C4: GPIO19 (physical Pin 35)
# RPi 3: GPIO16 (physical Pin 36)
#
# Pin choices are fixed if using the header on the Waveshare displays
# to connect directly to GPIO pins:
#
# Waveshare 3.5" LCD (B): GPIO17 (physical pin 11)
# Waveshare 4" HDMI (H): GPIO25 (physical pin 22)
#
USE_TOUCH = false # Set false to disable interrupt use
TOUCH_INT = 25
# On RPi Zero, the debounce time seems like it needs to be longer to
# avoid a single screen press being interpreted as two events.
# Other SBCs can leave this commented out.
# TOUCH_DEBOUNCE = 2000 # milliseconds
# The USE_BACKLIGHT boolean controls whether calls are made to
# luma.lcd at all to change backlight state. Users with OLED displays
# (or using luma.core's linux_framebuffer) should set it to false.
#
# This variable should likely be set false if using the PWM control
# through sysfs files (as presently implemented in kodi_panel_fb.py).
#
# Note that the framebuffer version (kodi_panel_fb.py) may ignore or
# override this setting, in favor of the group below.
#
USE_BACKLIGHT = false
# Hardware PWM is available on many SBCs. For the Raspberry Pi
# with new-ish kernels, one can add
#
# dtoverlay=pwm_2chan
#
# to /boot/config.txt to get an appropriate kernel module loaded.
#
# The clock period below is expressed in nanoseconds (1e-9). The
# brightness level is a float between 0 and 1. Using 0 would yield no
# backlight, so that value isn't particularly useful.
#
# As of Dec 2020, only kodi_panel_fb.py examines these settings.
# They are not used within kodi_panel_display itself
#
USE_HW_PWM = false
HW_PWM_FREQ = 1000000 # results in clock frequency of 1 kHz
HW_PWM_LEVEL = 0.55
# --------------------------------------------------------------------
#
# Info screens, colors, & fonts
#
# Audio and video screens are enabled and disabled separately.
#
# Slideshow screens are also possible, controlled by yet another
# layout (or layouts).
#
ENABLE_AUDIO_SCREENS = true
ENABLE_VIDEO_SCREENS = true
ENABLE_SLIDESHOW_SCREENS = true
# Should the idle status screen always be shown? That could be
# desired if no touch interrupt is available.
ENABLE_IDLE_STATUS = true
# The script has built-in lists of Kodi InfoLabels to retrieve for the
# various screens that are possible, defined at the beginning of the
# file. Each list can be augmented, if needed, via the *_LABELS lists
# below.
#
# To make use of this feature, uncomment the associated assignment and
# add additional InfoLabels as strings. Here is an example, although
# both of the InfoLabels listed are part of the built-in set:
#
# STATUS_LABELS = [
# "System.Date",
# "System.CPUTemperature"
# ]
#
#
# See the Kodi wiki:
#
# https://kodi.wiki/view/InfoLabels
#
# to see what InfoLabels are available; these can change from one
# version of Kodi to another.
#
# List of additional InfoLabels to retrieve for status screen
STATUS_LABELS = [
"Weather.Conditions",
"Weather.Temperature",
"System.TotalUptime",
"System.Time(hh:mm:ss)",
"PVR.BackendDiskSpace",
"PVR.BackendTimers",
"PVR.BackendRecordings",
]
# List of additional InfoLabels to retrieve for audio screen(s)
AUDIO_LABELS = [
"MusicPlayer.BitRate",
"MusicPlayer.BitsPerSample",
"MusicPlayer.SampleRate",
"MusicPlayer.Channels",
"MusicPlayer.PlaylistLength",
]
# List of additional InfoLabels to retrieve for video screen(s)
VIDEO_LABELS = [
"VideoPlayer.AudioChannels",
"VideoPlayer.Duration",
"VideoPlayer.PlayCount",
"Player.FinishTime",
"System.Time(hh:mm:ss)",
"Player.chapter",
"Player.chaptercount",
"Player.chaptername",
"System.Time",
"PVR.EpgEventDuration",
"PVR.EpgEventElapsedTime",
"PVR.TimeShiftOffset",
"VideoPlayer.TimeRemaining",
"VideoPlayer.Plot",
"Player.Art(season.poster)",
"Player.Art(tvshow.poster)",
]
#
# With v1.44, InfoBooleans can also be retrieved
#
# https://kodi.wiki/view/List_of_boolean_conditions
#
# STATUS_BOOLEANS = []
# AUDIO_BOOLEANS = []
VIDEO_BOOLEANS = [
"Pvr.IsTimeShift",
]
# SLIDESHOW_BOOLEANS = []
# Paths to default thumbnails for audio and status screen. These now
# get resized, to whatever is specified for the audio screen used.
KODI_THUMB = "images/kodi_thumb.jpg" # Kodi icon
DEFAULT_AUDIO = "images/music_icon2_lg.png" # standard music file w/o artwork
DEFAULT_AIRPLAY = "images/airplay_thumb.png" # Airplay file w/o artwork
# Audio Layout Names
# ------------------
#
# Specify the names of layouts that are available when playing an
# audio file. The strings used must correspond to those used within
# the ALAYOUT dictionary defined below.
#
ALAYOUT_NAMES = [
"A_DEFAULT", # artwork, elapsed time, track info
"A_FULLSCREEN", # fullscreen cover only
"A_FULL_PROG", # fullscreen cover with vertical progress bar
"A_NOTIME", # similar to default, but dropping elapsed time
]
# Initial mode to use upon startup
ALAYOUT_INITIAL = "A_DEFAULT"
# Video Layout Names
# ------------------
#
# Similar to audio screen modes above, except for the
# following tidbit ...
#
# Should the layout for video screens be auto-selected (within the
# video_screens() function) based upon content of InfoLabel fields or
# InfoBooleans? If so, then set VLAYOUT_AUTOSELECT to true.
#
# If that flag is set to true, then VLAYOUT_NAMES should be
# populated with entries that match the heuristic if-then that is
# used by video_screens().
#
# If that variable is to false or left undeclared, then video modes
# just form a cycle that gets advanced via the touch interrupt, as
# happens for the audio screens.
#
VLAYOUT_AUTOSELECT = true
# Array of layout names
VLAYOUT_NAMES = [
"V_DEFAULT", # movie poster, movie name, elapsed time
"V_FULLSCREEN", # movie poster
"V_PVR",
"V_TV_SHOW",
"V_MOVIE",
"V_LIVETV"
]
# Initial mode to use upon startup
VLAYOUT_INITIAL = "V_DEFAULT"
#[STATUS_LAYOUT.thumb]
#[[V_LAYOUT.V_DEFAULT.fields]]
# Slideshow Layout Names
# ----------------------
#
# Similar to audio screen modes and video screen modes
#
SLAYOUT_AUTOSELECT = false
SLAYOUT_NAMES = [ "DEFAULT" ]
SLAYOUT_INITIAL = "DEFAULT"
# Codec Lookup
#
# The codec_name lookup table can be augmented, or existing entries
# changed. The style of entries is identical to what is done for
# the COLORS table below.
#
[CODECS]
"vc1" = "VC1"
"dts" = "DTS"
#"dtshd_hra" = "DTS-xxxHRA"
# Colors
#
# Specify color names to use elsewhere. To know whether this
# dictionary needs to be consulted, all names MUST begin with
# "color_". Color references without those initial characters just
# get passed through, without a lookup in this dictionary.
#
[COLORS]
color_gray = '#424242' # progress bar background (used 'dimgrey' for a while)
color_7S = '#00FFD0' # 7-Segment color (used 'SpringGreen' for a while)
color_artist = 'yellow' # artist name
# Font list
#
# These entries create an array that kodi_panel processes at startup
# time, pulling the fonts into Pillow. The font name that is
# assigned must match those that get used further below in the
# layouts.
#
# A "font_main" MUST be defined and successfully loaded!
#
# Standard fonts
[[fonts]]
name = "font_main"
path = "fonts/Roboto-Medium.ttf"
size = 63
encoding = 'unic'
[[fonts]]
name = "font_bold"
path = "fonts/RobotoCondensed-Regular.ttf"
size = 90
encoding = 'unic'
[[fonts]]
name = "font_sm"
path = "fonts/Roboto-Medium.ttf"
size = 62
encoding = 'unic'
[[fonts]]
name = "font_tiny"
path = "fonts/Roboto-Medium.ttf"
size = 49
encoding = 'unic'
# 7-segment font used for elapsed time and track number
[[fonts]]
name = "font7S"
path = "fonts/DSEG14Classic-Regular.ttf"
size = 125
[[fonts]]
name = "font7S_sm"
path = "fonts/DSEG14Classic-Regular.ttf"
size = 49
# --------------------------------------------------------------------
# Shared Elements
#
# The intent of the shared_element table (which becomes a dictionary
# in Python) is to define display elements that can be used by
# multiple layouts.
#
# The details of each entry must correspond to what one would
# normally populate within a layout (e.g., a textfield needs a name,
# posx, posy, font, fill, etc).
#
# With any layout that desired to use such an element, one
# references it by the name (key) given to it within the
# shared_element table. For instance, defining a shared progress
# bar and elapsed time display could be done as follows:
#
# [shared_element.elapsed_time]
# name = "MusicPlayer.Time"
# posx = 420
# posy = 36
# font = "font7S"
# fill = "color_7S"
# dynamic = 1
#
# [shared_element.progress_bar]
# posx = 420
# posy = 8
# height = 12
# short_len = 196
# long_len = 300
# color_fg = "color_7S"
# color_bg = "color_gray"
#
# Given the above definitions, a layout can then include a shared
# element by refering to it by name (with no other keys listed).
# Here is an example, which includes one normal directly-specified
# element.
#
# [A_LAYOUT.A_FULLSCREEN.thumb]
# center = 1
# size = 480
#
# [A_LAYOUT.A_FULLSCREEN.prog]
# shared_element = "progress_bar"
#
# [[A_LAYOUT.A_FULLSCREEN.fields]]
# shared_element = "elapsed_time"
#
#
# [shared_element.replace_name]
#
# --------------------------------------------------------------------
# Audio Screens
#
# This data structure gets used by audio_screens() to control the
# layout and contents of any audio information screens. Content can
# be omitted from a screen just by commenting it out here, particular
# for text fields.
#
# Entries within the "fields" array generally correspond to text
# fields, but the introduction of the ELEMENT_CB lookup table (if
# customized) does permit for additional graphical elements. Such
# customization does require a bit of Python programming.
#
# Note that the available InfoLabels can be augmented via use of
# the AUDIO_LABELS list (see earlier in this file).
#
# All entries in the "fields" array" MUST have a name (either
# specified explicitly or inherited from a shared element
# reference). The 'name' key corresponds to ONE of the following:
#
# - An exact match for one of the InfoLabels retrieved from Kodi.
# The entry is only rendered if the corresponding InfoLabel is
# non-empty.
#
# - An exact match for one of the callback functions named in the
# ELEMENT_CB table or the STRING_CB table. That match triggers
# execution of the corresponding callback function.
#
# - An arbitrary string (not matching an InfoLabel or any callback
# function names), provided that the entry ALSO specifies a
# 'format_str' key. The interpolated format_str always gets
# rendered.
#
# The execution path followed by any of the above naming choices is
# typically expected to yield a text string to display. Remaining
# keys that control the rendering of that text are as follows:
#
# posx X-coordinate for display (horizontal position)
# posy Y-coordinate for display (vertical position)
# font Font to use for rendering
# fill Text color
#
# dynamic A boolean flag to true/1 to indicate that the
# field should be considered dynamic, re-drawn
# upon every update loop.
#
# prefix Optional string ahead of InfoLabel text
# suffix Optional string following InfoLabel text
#
# format_str Alternatively, rather than using prefix and suffix,
# and if one is NOT triggering a callback function, a
# formatting string can be specified. The string
# should contain one or more InfoLabels to substitute,
# enclosed within curly braces. See the status layout
# screen text fields for examples.
#
# Terms to be substituted can also make use of any
# entries defined within the string-manipulation
# callback table (see the STRING_CB dictionary in
# kodi_panel_display.py)
#
# trunc Flag indicating that single line string should
# truncated at the right-hand edge of the display
#
# wrap Flag indication that the string should be wrapped.
# When wrapping, further information is needed...
#
# max_width Maximum horizontal width string can occupy
# max_lines Maximum number of lines to occupy; additional
# text gets truncated on the final line
#
# label Separate text to display, with an independent
# font and independent fill color, when the InfoLabel
# is non-empty. Labels require several additional
# keys, all of which start with "l". These are
# still keys at the same level in the field's
# dictionary.
#
# lposx Horizontal position for label string
# lpoxy Vertical position for label string
# lfont Font for label string
# lfill Font fill color for label string
#
# exclude A string or an array strings that, if the text to
# be displayed exactly matches, causes the element to
# not be drawn.
#
# display_if / display_ifnot
# An alternative mechanism for controlling element
# display. The value must be a two-element list
# providing two strings.
#
# The first string must be either an InfoLabel or a
# string callback function (entry in STRING_CB).
#
# The second string is then compared for equality (or
# inequality, when using ifnot) against the string
# resulting from "evaluating" the InfoLabel or callback
# function.
#
# Examples:
#
# display_if = [ "MusicPlayer.TrackNumber", "02" ]
# display_if = [ "Player.Paused", "true" ]
#
#
# Internal callbacks are used for the 'codec' and 'artist' text
# fields. End-user scripts are free to augment or modify the
# callback tables (look for ELEMENT_CB and STRING_CB).
#
# --------------------------------------------------------------------
#
# Background
#
# Every layout, including the status screens, can optional specify a
# background entry at the top-level. A few examples are as follows:
#
# [A_LAYOUT.A_FULLSCREEN.background]
# fill = "navy" # uniform fill color
#
# or
#
# [A_LAYOUT.A_FULLSCREEN.background]
# rectangle = 1 # rectangle with frame/border
# fill = "navy"
# outline = "yellow"
# width = 3
#
# or
#
# [STATUS_LAYOUT.background]
# image = "images/mickey-sprite.png" # assumed sized correctly
#
#
# As shown, the entry must be named "background".
#
# --------------------------------------------------------------------
#
# Default audio info screen
#
# Note that one can optionally specify a display_if or display_ifnot
# expression for the cover art thumbnail (thumb)
[A_LAYOUT.A_DEFAULT.thumb] # Artwork
posx = 3
posy = 4
size = 1000
# If artwork is smaller than the above size, should it be centered
# where the fullsize artwork would have been placed?
center_sm = 1
# Normally, artwork only gets reduced in size. Setting this flag
# enables upsizing to occur. Note that the result may be blocky or
# blurry in appearance.
# enlarge = 1
# Note that one can optionally specify a display_if or display_ifnot
# expression for the progress bar (prog)
[A_LAYOUT.A_DEFAULT.prog] # Progress Bar
posx = 960 # upper-left corner x position
posy = 5 # upper-left corner y position
height = 12 # pixel height
short_len = 388 # length when elapsed time matches 00:00 (min, seconds)
long_len = 600 # length when elapsed time matches 00:00:00 (hrs, mins, seconds)
color_fg = "color_7S"
color_bg = "color_gray"
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Time"
posx = 960
posy = 29
font = "font7S"
fill = "color_7S"
dynamic = 1
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.TrackNumber"
posx = 960
posy = 300
font = "font7S"
fill = "color_7S"
# Label only appears if the field is present and non-empty
label = "Track"
lposx = 960
lposy = 230
lfont = "font_tiny"
lfill = "white"
#
# This group of fields all appear to the right of the cover art
# and track number, in a small font.
#
# The duration NEVER has decending characters, so it can be somewhat
# closer to the next row
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Duration"
posx = 1400
posy = 230
font = "font_tiny"
fill = "white"
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Duration" # special treatment in audio_screens()
posx = 1400
posy = 270
font = "font_tiny"
fill = "white"
format_str = "{codec} {MusicPlayer.BitsPerSample}/{MusicPlayer.SampleRate}KHz"
# NOTE: For UPnP/DLNA playback, Kodi Leia doesn't seem to capture
# dc:date. Fortunately, the InfoLabel is left blank, unlike what
# happens for videos.
[[A_LAYOUT.A_DEFAULT.fields]]
name = "channelnumber"
posx = 1400
posy = 400
font = "font_tiny"
fill = "white"
suffix = "Ch"
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Genre"
posx = 1400
posy = 350
font = "font_tiny"
fill = "white"
trunc = 1
# NOTE: For UPnP/DLNA playback, Kodi Leia doesn't seem to capture
# dc:date. Fortunately, the InfoLabel is left blank, unlike what
# happens for videos.
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.PlaylistLength"
posx = 960
posy = 450
font = "font_tiny"
fill = "white"
prefix = "/"
#
# Finally, the track title in this layout appears below the cover art...
#
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Title"
posx = 4
posy = 800
font = "font_bold"
fill = "white"
trunc = 1
#
# ... while the album title and artist are moved over to the right of
# the cover.
#
[[A_LAYOUT.A_DEFAULT.fields]]
name = "artist" # special treatment in audio_screens()
posx = 4
posy = 1200
font = "font_sm"
fill = "color_artist"
trunc = 1
drop_unknown = 1
[[A_LAYOUT.A_DEFAULT.fields]]
name = "MusicPlayer.Album"
posx = 4
posy = 700
format_str = "({MusicPlayer.Year}) {MusicPlayer.Album}"
font = "font_sm"
fill = "white"
wrap = 1
max_width = 1600
max_lines = 1
[[A_LAYOUT.A_DEFAULT.fields]]
name = "acodeclogo"
posx =1300
posy =850
# --------------------------------------------------------------------
#
# Fullscreen artwork (by itself)
#
[A_LAYOUT.A_FULLSCREEN.thumb]
center = 1
size = 480
# --------------------------------------------------------------------
#
# Fullscreen artwork with progress bar
#
[A_LAYOUT.A_FULL_PROG.thumb]
center = 1
size = 480
[A_LAYOUT.A_FULL_PROG.prog]
vertical = 1
posx = 786 # upper-left corner x-position
posy = 1 # upper-left corner y-position
len = 11 # pixel width for a vertical bar
height = 476 # total height for the vertical bar
color_fg = "color_7S"
color_bg = "color_gray"
# --------------------------------------------------------------------
#
# The A_NOTIME screen serves primarily as an example, It is similar
# to the default (audio) info screen, but without the elapsed time
# display.
#
[A_LAYOUT.A_NOTIME.thumb] # Artwork
posx = 3
posy = 4
size = 405
center_sm = 1
[A_LAYOUT.A_NOTIME.prog] # Progress Bar
posx = 380 # upper-left corner x position
posy = 12 # upper-left corner y position
height = 11 # pixel height
short_len = 300 # length when elapsed time matches 00:00 (min, seconds)
long_len = 300 # length when elapsed time matches 00:00:00 (hrs, mins, seconds)
color_fg = "color_7S"
color_bg = "color_gray"
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.TrackNumber"
posx = 420
posy = 58
font = "font7S"
fill = "color_7S"
# Label only appears if the field is present and non-empty
label = "Track"
lposx = 420
lposy = 30
lfont = "font_tiny"
lfill = "white"
#
# This group of fields all appear to the right of the cover art
# and track number, in a small font.
#
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.Duration"
posx = 580
posy = 30
font = "font_tiny"
fill = "white"
[[A_LAYOUT.A_NOTIME.fields]]
name = "codec" # internal callback
posx = 580
posy = 58
font = "font_tiny"
fill = "white"
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.Genre"
posx = 580
posy = 86
font = "font_tiny"
fill = "white"
trunc = 1
# NOTE: For UPnP/DLNA playback, Kodi Leia doesn't seem to capture
# dc:date. Fortunately, the InfoLabel is left blank, unlike what
# happens for videos.
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.Year"
posx = 580
posy = 114
font = "font_tiny"
fill = "white"
#
# Finally, the track title in this layout appears below the cover art...
#
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.Title"
posx = 4
posy = 410
font = "font_bold"
fill = "white"
trunc = 1
#
# ... while the album title and artist are moved over to the right of
# the cover.
#
[[A_LAYOUT.A_NOTIME.fields]]
name = "artist" # internal callback
posx = 420
posy = 240
font = "font_sm"
fill = "color_artist"
trunc = 1
[[A_LAYOUT.A_NOTIME.fields]]
name = "MusicPlayer.Album"
posx = 420
posy = 280
font = "font_sm"
fill = "white"
wrap = 1
max_width = 375
max_lines = 4
# --------------------------------------------------------------------
# Video Screens
#
# This data structure gets used by video_screens() to control the
# layout and contents of any audio information screens. Content can
# be omitted from a screen just by commenting it out here, particular
# for text fields.
#
# Top-level entries within this V_LAYOUT table MUST have names that
# correspond to the VLAYOUT_NAMES list specified earlier in this
# file.
#
# New top-level content requires corresponding changes to
# video_screens(). If a completely new text field is desired, then
# the JSON-RPC call made in update_display() needs to be updated as
# well.
#
# Special treatment may exist for text fields within video_screens()
#
# --------------------------------------------------------------------
[shared_element.time]
name = "VideoPlayer.Time"
posx = 1000
posy = 61
font = "font7S"
fill = "color_7S"
dynamic = 1
[shared_element.duration]
name = "VideoPlayer.Duration"
posx = 1000
posy = 230
font = "font7S"
fill = "color_7S"
[shared_element.vtitle]
name = "VideoPlayer.Title"
posx = 4
posy = 900
font = "font_bold"
fill = "white"
wrap = 1
max_width = 635
max_lines = 1
[shared_element.chapter]
name = "Player.chapter"
format_str = "chapter {Player.chapter}/{Player.chaptercount} {Player.chaptername} "
posx = 1050
posy = 400
font = "font_tiny"
fill = "white"
dynamic = 1
display_ifnot = [ "Player.chaptercount", "00" ]
[shared_element.vcodec]
name = "vcodec" # special treatment in audio_screens()
posx = 1050
posy = 450
font = "font_tiny"
fill = "white"
prefix= "Video Codec "
[shared_element.resolution]
name = "VideoPlayer.VideoResolution"
posx = 1000
posy = 450
font = "font_tiny"
fill = "white"
format_str = "{vcodec} {VideoPlayer.VideoResolution}p"
[shared_element.acodec]
name = "VideoPlayer.Title" # special treatment in audio_screens()
posx = 1000
posy = 500
font = "font_tiny"
fill = "white"
format_str = "{channelnumber} {acodec} "
[shared_element.channelnumber]
name = "channelnumber"
posx = 1000
posy = 560
font = "font_tiny"
fill = "white"
format_str = "{channelnumber} {acodec} "
[shared_element.vplaycount]
name = "VideoPlayer.PlayCount"
posx = 1000
posy = 600
font = "font_tiny"
fill = "white"
prefix = "Play count: "
suffix = ""
[shared_element.finishtime]
name = "Player.FinishTime"
posx = 1000
posy = 700
font = "font_tiny"
fill = "white"
prefix = "End "
suffix = ""
dynamic = 1
#
[shared_element.progress_bar]
posx = 1000 # upper-left corner x position
posy = 15 # upper-left corner y position
height = 35 # pixel height
short_len = 400 # length when elapsed time matches 00:00 (min, seconds)
long_len = 600 # length when elapsed time matches 00:00:00 (hrs, mins, seconds)
color_fg = "color_7S"
color_bg = "color_gray"
#
[shared_element.thumb] # artwork / movie poster
posx = 0
posy = 0
width = 1000
height = 1080
center_sm = 1
display_ifnot = [ "VideoPlayer.Cover", "DefaultVideoCover.png"]
[shared_element.plot]
name= "VideoPlayer.Plot"
posx = 10
posy = 10
font = "font_bold"
fill = "white"
trunc = 1
wrap = 1
max_width = 700
max_lines = 8
display_if = [ "VideoPlayer.Cover", "DefaultVideoCover.png"]
[shared_element.acodeclogo]
name = "acodeclogo"
posx =1000
posy =750
[shared_element.vcodeclogo]
name = "vcodeclogo"
posx =1000
posy =750
# Default video info
#
################################ DEFAULT ##################################
[V_LAYOUT.V_DEFAULT.thumb] # artwork / movie poster
shared_element = "thumb"
[V_LAYOUT.V_DEFAULT.prog] # Progress Bar
shared_element = "progress_bar"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "time"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "duration"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "vtitle"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "chapter"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "resolution"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "acodec"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "vplaycount"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "finishtime"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "acodeclogo"
[[V_LAYOUT.V_DEFAULT.fields]]
shared_element = "vcodeclogo"
[[V_LAYOUT.V_DEFAULT.fields]]
name = "System.Time(hh:mm:ss)"
posx = 1500
posy = 750
font = "font_tiny"
fill = "white"
dynamic = 1
################################ PVR ##################################