GNU bug report logs - #74748
Constructor created by define-configuration is slow (>25s) when many fields are defined

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix; Reported by: Tomas Volf <~@wolfsden.cz>; dated Mon, 9 Dec 2024 15:14:02 UTC; Maintainer for guix is bug-guix@HIDDEN.

Message received at 74748 <at> debbugs.gnu.org:


Received: (at 74748) by debbugs.gnu.org; 27 Dec 2024 22:50:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 27 17:50:13 2024
Received: from localhost ([127.0.0.1]:47925 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tRJ9p-0004kd-5I
	for submit <at> debbugs.gnu.org; Fri, 27 Dec 2024 17:50:13 -0500
Received: from wolfsden.cz ([37.205.8.62]:43434)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <~@wolfsden.cz>) id 1tRJ9m-0004im-K1
 for 74748 <at> debbugs.gnu.org; Fri, 27 Dec 2024 17:50:12 -0500
Received: by wolfsden.cz (Postfix, from userid 104)
 id 4E920338C03; Fri, 27 Dec 2024 22:50:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
 t=1735339808; bh=hRkZ0BGGlJhR2bJ/YU1HOiEKlKREB3LnibkG3rX6Y1w=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=uzLyvFdU3Q94oSj+Ogl9li/f5hfLVeENUYONidRT6ptjqzZJ1zVTjZisQxa5V18B1
 s+r0I+aI1bbLQeR5IYjmxnlhSn+hJpcKV8obwSmQlTbd/sqweQ2HvUOFolgVZ7ZC9e
 yonSHMa/a7KbphxnZJ/RPMBkd39py1vMQ+/m++amlsF29ss43KzDS5E79jlphJA+if
 CKnmTtDl72w0cIO7NjimmwTbxZepVvyOyjUtr8p6d5BzEzJkuHM7SSEo80wEEEGT+k
 oCtR0PRa0eJcz3r8/O2b7lNRYHCdfdVU8Gp7c8oIBn4qUvATjSYelP/34t3CTE+Tty
 Mjep4TDSTz74gG5jfUtBqmbFqn/9ZspBjtUTVtH3FqFJswqXedso9ELGl7EyPtEVOE
 q20TkH2plpHpu24lU7bhN8bERP7IedrofeHDW8hYQsCsVvQ5uP9GW7kSTszMZUWyBv
 ap1pee1yRxzRcmIcCBP7eGkTiV/BlLUmtD+w0i35HG8pV7O2IOtZaAFJpOY/zfWRiB
 gUJ1KGxCvtNLuu3wrhYv6HM6qvxw+SXdq62G9G77rsRRfNO5U4O5bMbIuqSq+af1Ky
 0TLdveQ87jnPfkz1Q1nkVaygAoZ8lwEen14qok5JOyx2Cf+S3HrfUouBoRiJBEaGpC
 1UvKcynC3jlet1xUyCgMWAJg=
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on wolfsden
X-Spam-Level: 
X-Spam-Status: No, score=-3.1 required=5.0 tests=ALL_TRUSTED,BAYES_00,
 DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED
 autolearn=ham autolearn_force=no version=3.4.6
Received: from localhost (unknown [128.0.188.242])
 by wolfsden.cz (Postfix) with ESMTPSA id 73B4733883B;
 Fri, 27 Dec 2024 22:50:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
 t=1735339807; bh=hRkZ0BGGlJhR2bJ/YU1HOiEKlKREB3LnibkG3rX6Y1w=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date;
 b=Sz11eS+xLWZKO0xXzCX2/Nc2CCU2jYKVGalMCyzmLe/VDXLsg+xjwk7l9kVG5lFSN
 6APM57kKks87jq7CwlBvu4f1PXwKWcLw4A9TJetQZCUU2h4RTaYSkmpnyvNXh9T1qJ
 BQ1RpwZBrusmg48kh3PBmdy8lfb/Ul9WLEGnk4K2lry4UCE/TIZW7284Exp89WZbXM
 3UwGJVXXmJenRLi+YCln0ZyAC8fHgEGHiV5fZf4fVmYjZOKNVfkhIE0ku3y0HxXjJN
 aepLQGHoG7uif4njBgVYy0J5x82DnyWgV98aH8NKRUbi9uTbnY4GbOQa/P5t9vJZCZ
 e3eJ2BaFG9k90VfA97HzDzr4dRbUw6thldt7flVe6Bl2Y5in5f8DF3o7eoUWKUaXrn
 40A+8mAkq62ysafYXWQe0Ku3KQ1l9A1tgjIo1z842RKe69gq02lxM81uZYq0T3zgqC
 Qk3Dm3hMY5/mjW9sp0dBqDNPvit46i5xslrUVl1M2XHIR19fVjRE/AhuHpBs44WAmm
 +wfDF+j5iHadApNhymyHj1kLfhMTgVQQQ1d0oRAWDQZnm9cA8i9UVEnJXHp7HBD5xx
 6xafFiQcjaO1lHBJfpguSPBNlIVs14GcWIUwuxISJ4TF6On5pQZdSk+P3pOc4DMQ6B
 DEW86FRxBwjlVHeYyMQ4EKLs=
From: Tomas Volf <~@wolfsden.cz>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#74748: Constructor created by define-configuration is slow
 (>25s) when many fields are defined
In-Reply-To: <87cyhh5eop.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Tue, 24 Dec 2024 15:38:30 +0100")
References: <87msh499f7.fsf@HIDDEN> <87cyhh5eop.fsf@HIDDEN>
Date: Fri, 27 Dec 2024 23:50:06 +0100
Message-ID: <87a5cg4u75.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
 micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 74748
Cc: 74748 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


Hello,

thank you for finding the time to look into this issue.  Replies below.

Ludovic Court=C3=A8s <ludo@HIDDEN> writes:

> Hi,
>
> Tomas Volf <~@wolfsden.cz> skribis:
>
>> I am writing a configuration for mpv and hit an issue of the generated
>> constructor (`home-mpv-configuration') is extremely slow.  While the
>> almost 800 fields is unusually high, initializing the instances of the
>> record should *not* take almost 30 seconds.  The full file is attached
>> to this email (as `mpv.scm').
>
> AFAICS, time is spent in one of the compilation steps:
>
> scheme@(gnu home services mpv)> ,o interp #t
> scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
> $13 =3D #<procedure 7f6ed3796700 at ice-9/eval.scm:330:13 ()>
> ;; 0.376347s real time, 0.375402s run time.  0.000000s spent in GC.
> scheme@(gnu home services mpv)> ,o interp #f
> scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
> $14 =3D #<procedure 7f6ec32088f8 at <unknown port>:40:3 ()>
> ;; 11.149828s real time, 12.052915s run time.  1.581736s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (macroexpand '(mpv-profile-con=
figuration)))
> $15 =3D #t
> ;; 0.373865s real time, 0.372698s run time.  0.000000s spent in GC.
>
>
> If we look more closely, it=E2=80=99s the optimizing compiler that takes =
time;
> the baseline compile (-O1) is doing okay:
>
> scheme@(gnu home services mpv)> ,use(system base compile)
> scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configu=
ration) #:to 'tree-il #:env (current-module)))
> $20 =3D #t
> ;; 0.378741s real time, 0.377043s run time.  0.000000s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configu=
ration) #:to 'bytecode #:env (current-module)))
> $21 =3D #t
> ;; 11.946879s real time, 12.961704s run time.  1.777478s spent in GC.
> scheme@(gnu home services mpv)> (define til (compile '(mpv-profile-config=
uration) #:to 'tree-il #:env (current-module)))
> scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #=
:to 'bytecode))
> $22 =3D #t
> ;; 11.403420s real time, 12.317183s run time.  1.581972s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #=
:to 'bytecode #:optimization-level 1))
> $23 =3D #t
> ;; 0.225455s real time, 0.156137s run time.  0.000000s spent in GC.
>
> Currently (guix build compile) applies these options to services:
>
>         ((string-contains file "gnu/services/")
>          ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' f=
or
>          ;; large files like gnu/services/mail.scm.
>          (override-option #:letrectify? #f
>                           (optimizations-for-level 2)))
>
> I think we should at least apply this patch:
>
> diff --git a/guix/build/compile.scm b/guix/build/compile.scm
> index 5b27b55d02..f90016b9ae 100644
> --- a/guix/build/compile.scm
> +++ b/guix/build/compile.scm
> @@ -127,7 +127,8 @@ (define (optimization-options file)
>           ;; Use '-O1' to have partial evaluation and primitive inlining =
so we
>           ;; can honor the "macro writer's bill of rights".
>           (optimizations-for-level 1))
> -        ((string-contains file "gnu/services/")
> +        ((or (string-contains file "gnu/services/")
> +             (string-contains file "gnu/home/services/"))
>           ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' =
for
>           ;; large files like gnu/services/mail.scm.
>           (override-option #:letrectify? #f
>
>
> Would that be enough for the home-mpv configuration records you wrote?

I admit I did not test the patch attached, but my understanding is that
even if the speed up was sufficient, it would take effect only for
compilation via the make command.  Assuming that is correct, it would
not change much.  I am (luckily) former C++ developer, so I am used to
compilations taking ~forever.  So, yes, while the compilation of mpv.scm
(via `make') took roughly 40s on my machine, it was annoying, but not
worthy of a bug report.

The actual problem for me was the slowness in REPL.  Would that be
addressed by the patch above?  If not, do we have any way to do that?

)tomas

=2D-=20
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQJCBAEBCgAsFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmdvLx4OHH5Ad29sZnNk
ZW4uY3oACgkQL7/ufbZ/wanyqQ/+IWaH5/3zSHoUTrz+j5Wj6IOPD6MX23oqzmrh
NJ5SpG4N6zl7oOI5UBOaYE/FQgBqvlgFcjHSrU+j/3k7GCx/1PY/Uuck72zFuDR7
Lx32SCOC2Rg5XoIhkhTm7iAiH7JXkRjD/jaQWvOBmxtc0i/jGsHycKrsKnfwBzdM
YzqFh9y4gNJw7KC2TFIubkRAW/9hdXMS3vjVcsxd8DUn2OW23jJA70Jf1vGA8njo
R3QA+PVFz280Ng/TTxt7gz8gxSP11J/CN2f1gDGAk48Wpi7+SjOv575I+P+f3mAj
HriqaCFGHdN/K5elvLBNWzFoN0V2VJ47CYOStlFDkPxiSw7J5TWKpPWA9vtF2XmZ
sobYVSW/59yihcvsNqkStj36IWveWDEccLG0B/uisjzgvh6V/TPu0ddbOE0ncbif
YtUSf2Cb2aKQq+xU5AomzLqsjs2DCJ46qB2e9u53iL5AzhxJjFsurWyUThF0cmT1
oQScABso3HKf3YSYinNby+aKRbNhVcB6FkEMHtmpU5WDiYt3wyhMnau8Xj0M94Me
fZJcHadDwn6bELxp3p4O5r2fsV+vtiP8Stpr4WB1ZPCmoHQglMa5R8DbzL25pQvI
rcgZB/A2N6oeLVfHZHqCRxIRuR9oCj3JYs5At8fmg+G1YFr0VAh+P8xi+qQl+q8Y
fuXkkdI=
=PAc9
-----END PGP SIGNATURE-----
--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#74748; Package guix. Full text available.

Message received at 74748 <at> debbugs.gnu.org:


Received: (at 74748) by debbugs.gnu.org; 24 Dec 2024 14:38:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 24 09:38:43 2024
Received: from localhost ([127.0.0.1]:60068 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tQ63W-0004G0-JP
	for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 09:38:43 -0500
Received: from eggs.gnu.org ([209.51.188.92]:42728)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1tQ63T-0004Fi-Nk
 for 74748 <at> debbugs.gnu.org; Tue, 24 Dec 2024 09:38:41 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1tQ63N-0007qn-LY; Tue, 24 Dec 2024 09:38:33 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
 From; bh=FngbVgWVrsYRyIDLwxin5BdpV8DOfQCd09vVy/G6x0Q=; b=kTbnAqyKGEkulqtA4FJy
 clcBI3JTXEajfk0kC55AuCT43OPj1+0eyQYzuSTAMXqOf1MqSgmUxeeGWx8NIQ73DVmb2O6gMOhmP
 wabpIPOzaYCU5Ve8AQezb4DXKUP9hA21BJ1ekoL63pMtj8RrhFzQW02ZLmn15KM7I9SRo1LfCbPeU
 auFfEgIygzJrtgV2HLOpAEQevAHaQOJx7y39eKZ1XNiG4Eoa8dEBgjxwpmMbaJ9uh+KAeqk6aQ1G9
 YlarPkU5ZFVv5fYLaq23DKv7v0h0KZAnspelWUSTAhbkjN52IiztO3ia+HYvwudbPvLytDv6ZPama
 TkWge4caQ/a+ag==;
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Tomas Volf <~@wolfsden.cz>
Subject: Re: bug#74748: Constructor created by define-configuration is slow
 (>25s) when many fields are defined
In-Reply-To: <87msh499f7.fsf@HIDDEN> (Tomas Volf's message of "Mon, 09
 Dec 2024 16:13:16 +0100")
References: <87msh499f7.fsf@HIDDEN>
Date: Tue, 24 Dec 2024 15:38:30 +0100
Message-ID: <87cyhh5eop.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 74748
Cc: 74748 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hi,

Tomas Volf <~@wolfsden.cz> skribis:

> I am writing a configuration for mpv and hit an issue of the generated
> constructor (`home-mpv-configuration') is extremely slow.  While the
> almost 800 fields is unusually high, initializing the instances of the
> record should *not* take almost 30 seconds.  The full file is attached
> to this email (as `mpv.scm').

AFAICS, time is spent in one of the compilation steps:

--8<---------------cut here---------------start------------->8---
scheme@(gnu home services mpv)> ,o interp #t
scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
$13 =3D #<procedure 7f6ed3796700 at ice-9/eval.scm:330:13 ()>
;; 0.376347s real time, 0.375402s run time.  0.000000s spent in GC.
scheme@(gnu home services mpv)> ,o interp #f
scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
$14 =3D #<procedure 7f6ec32088f8 at <unknown port>:40:3 ()>
;; 11.149828s real time, 12.052915s run time.  1.581736s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (macroexpand '(mpv-profile-confi=
guration)))
$15 =3D #t
;; 0.373865s real time, 0.372698s run time.  0.000000s spent in GC.
--8<---------------cut here---------------end--------------->8---

If we look more closely, it=E2=80=99s the optimizing compiler that takes ti=
me;
the baseline compile (-O1) is doing okay:

--8<---------------cut here---------------start------------->8---
scheme@(gnu home services mpv)> ,use(system base compile)
scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configura=
tion) #:to 'tree-il #:env (current-module)))
$20 =3D #t
;; 0.378741s real time, 0.377043s run time.  0.000000s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configura=
tion) #:to 'bytecode #:env (current-module)))
$21 =3D #t
;; 11.946879s real time, 12.961704s run time.  1.777478s spent in GC.
scheme@(gnu home services mpv)> (define til (compile '(mpv-profile-configur=
ation) #:to 'tree-il #:env (current-module)))
scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #:t=
o 'bytecode))
$22 =3D #t
;; 11.403420s real time, 12.317183s run time.  1.581972s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #:t=
o 'bytecode #:optimization-level 1))
$23 =3D #t
;; 0.225455s real time, 0.156137s run time.  0.000000s spent in GC.
--8<---------------cut here---------------end--------------->8---

Currently (guix build compile) applies these options to services:

        ((string-contains file "gnu/services/")
         ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' for
         ;; large files like gnu/services/mail.scm.
         (override-option #:letrectify? #f
                          (optimizations-for-level 2)))

I think we should at least apply this patch:


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline

diff --git a/guix/build/compile.scm b/guix/build/compile.scm
index 5b27b55d02..f90016b9ae 100644
--- a/guix/build/compile.scm
+++ b/guix/build/compile.scm
@@ -127,7 +127,8 @@ (define (optimization-options file)
          ;; Use '-O1' to have partial evaluation and primitive inlining so we
          ;; can honor the "macro writer's bill of rights".
          (optimizations-for-level 1))
-        ((string-contains file "gnu/services/")
+        ((or (string-contains file "gnu/services/")
+             (string-contains file "gnu/home/services/"))
          ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' for
          ;; large files like gnu/services/mail.scm.
          (override-option #:letrectify? #f

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable


Would that be enough for the home-mpv configuration records you wrote?

Thanks,
Ludo=E2=80=99.

--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#74748; Package guix. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 9 Dec 2024 15:13:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Dec 09 10:13:37 2024
Received: from localhost ([127.0.0.1]:55169 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tKfS5-00021m-0B
	for submit <at> debbugs.gnu.org; Mon, 09 Dec 2024 10:13:37 -0500
Received: from lists.gnu.org ([209.51.188.17]:57498)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <~@wolfsden.cz>) id 1tKfS3-00021b-36
 for submit <at> debbugs.gnu.org; Mon, 09 Dec 2024 10:13:35 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1tKfS2-0006E8-HN
 for bug-guix@HIDDEN; Mon, 09 Dec 2024 10:13:34 -0500
Received: from wolfsden.cz ([37.205.8.62])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1tKfRv-00035R-Pg
 for bug-guix@HIDDEN; Mon, 09 Dec 2024 10:13:33 -0500
Received: by wolfsden.cz (Postfix, from userid 104)
 id 75F7933BDCD; Mon,  9 Dec 2024 15:13:21 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
 t=1733757201; bh=clVgEzu8oOaVALtgpBdL368zwsXxFNauJRITJcvMx0o=;
 h=From:To:Subject:Date;
 b=KblYvTRiCafywawnTTM00oM60QwJbtNC/795fwuakKBBHNtD0sSMdI/b4PiAAjW//
 i2x5xOZcXcBlXVob4rAC8dE05ekTrYUGsuCak2bCR8anfCalfStSKhoXPBoxlMW104
 zidUfICmeqwtIq/r4GRgX7miqVqtnN85ROq5CRtZSAGmz4eJ0sngs59rQK81tTzBdE
 HydPz4omRJiUxJJxYYWdLhJ3VE6ys61iMe/Q4tfDSDymidi3YF98cHpvqgVoRmeT1J
 mVPyaAVkUN36OjLBtDV1AzXz6kKBeF5I/pcpXrr4CNapqsY82N5qfwr17Buk0KT/N1
 iD6J9OQyN5T278tFtL/KHlIgSNU98b5mvbfozJCgAG/hAoEMSLiAIUMtT1kd+6lyXY
 /P8ngmdcXs5QZaIcWOLGNixT4hDTsOm0PvJdxFpRfg+i/nKrDlWS7cLvqaYLWk4wzH
 5TZnbKSwavWkJYtS9bxRYoHVKQkguavKFZs8e2rYKenNVeZGYY9siTpoKVbyXGQDpk
 9jLrZ99dkMqI33TT5iLn85hyEu36YfOXoY1Wzb5jj0wyHwpso/80XUchDNMNCOgkV/
 kcNIJojr1dgayHpflDHhpL8UlFZqU+T63v7X2ZaswnIq2HuDG9vbj+rbbWGmCIJLUS
 3emIgryu+71R2pVGvVw114eE=
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on wolfsden
X-Spam-Level: 
X-Spam-Status: No, score=-3.1 required=5.0 tests=ALL_TRUSTED,BAYES_00,
 DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED
 autolearn=ham autolearn_force=no version=3.4.6
Received: from localhost (unknown [128.0.188.242])
 by wolfsden.cz (Postfix) with ESMTPSA id 5498A33B35B
 for <bug-guix@HIDDEN>; Mon,  9 Dec 2024 15:13:18 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
 t=1733757198; bh=clVgEzu8oOaVALtgpBdL368zwsXxFNauJRITJcvMx0o=;
 h=From:To:Subject:Date;
 b=H9UhpBS4Fcj1t96I29B2wt+YeQjfTx4LcIuHTQ+OW9lXqqOyIP0WcCUwuX2XAaxUr
 OkmtZoqKkT2gXguxqBJVBZcmDrZPfkiQV1pF2lHEoLUQOAviCvyh0lxZ3ZRb9g44KQ
 ez+rVOlkjzTpWYgNNJb7CqSUvnQfrtsGWdpRHa1XWQ7fCJLDnyL6tK6q92Ohdm5/AV
 AaifmrcVAbn5Os+GC16/tGbPOctcYYZ8xMTV1ZnoRpes1Ndx6KxmAXPI6DJ3D1MMsd
 QPexvOAl5z1wQNYByOQe7g4xmQ8SCgzaNUJDQo9/e2wNi1U+kmTKZRkoh61E0PtZdf
 occnobMaCjq6XZJ5k3tc3/BBz4x4E+oyqNn3GwXJiYd2zmIcaOguG4BqdwsKhKo1TD
 KWWAa/wNqCv1SOQGgnVymucv1guASk06mo8rf4knNDkKXrxIUt9g2XqvxRET3LsdPB
 w2JE3Zfjg5ooJJfjUVzyAC+1gt0dtgIO7zxfT/oQO0h/DehMrXVannQuJIymxMnQIR
 EmkIx5WRGcpvMKnStQA8k4K/DX40qBWYyx2QO33SWV1U1ygLUXNqqRc+lT5bUFGcwC
 AJqkPF4xy3IZTZtY+j6jIAOAPoSLMeQjj6OWUfKis6bFUd+kRKpcCGdyFgmWog1yEq
 0SattK+3WOaZGuHXJG+QkTOU=
From: Tomas Volf <~@wolfsden.cz>
To: bug-guix@HIDDEN
Subject: Constructor created by define-configuration is slow (>25s) when
 many fields are defined
Date: Mon, 09 Dec 2024 16:13:16 +0100
Message-ID: <87msh499f7.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="==-=-=";
 micalg=pgp-sha512; protocol="application/pgp-signature"
Received-SPF: pass client-ip=37.205.8.62; envelope-from=~@wolfsden.cz;
 helo=wolfsden.cz
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--==-=-=
Content-Type: multipart/mixed; boundary="=-=-="

--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable


Hello,

I am writing a configuration for mpv and hit an issue of the generated
constructor (`home-mpv-configuration') is extremely slow.  While the
almost 800 fields is unusually high, initializing the instances of the
record should *not* take almost 30 seconds.  The full file is attached
to this email (as `mpv.scm').

=2D-8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,use (gnu home services mpv)
scheme@(guix-user)> ,t (and (home-mpv-configuration (global (mpv-profile-co=
nfiguration (fullscreen #t)))) #t)=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
$1 =3D #t
;; 29.615315s real time, 50.896973s run time.  24.031723s spent in GC.
=2D-8<---------------cut here---------------end--------------->8---

Interestingly, profiling does not give us anything useful:

=2D-8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,pr (and (home-mpv-configuration (global (mpv-profile-c=
onfiguration (fullscreen #t)))) #t)=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
No samples recorded.
=2D-8<---------------cut here---------------end--------------->8---

I also tried to remove all my custom sanitizers, to make sure the issue
is not in my code, but that did not help.

I took a short look, but code of both the define-configuration and of
Guix records is complex, full of syntax magic and I did not have any
luck trying to debug it myself.  Hence this report.

Have a nice day,
Tomas


--=-=-=
Content-Type: text/x-guile; charset=utf-8
Content-Disposition: attachment; filename=mpv.scm
Content-Transfer-Encoding: quoted-printable
Content-Description: Reproducer.

;;; GNU Guix --- Functional package management for GNU
;;; Copyright =C2=A9 2024 Tomas Volf <~@wolfsden.cz>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu home services mpv)
  #:use-module (gnu home services)
  #:use-module (gnu services configuration)
  #:use-module (guix gexp)
  #:use-module (ice-9 match)
  #:use-module (ice-9 regex)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-2)
  #:use-module (srfi srfi-26)
  #:use-module (srfi srfi-71)
  #:export (home-mpv-configuration
            home-mpv-configuration?
            home-mpv-configuration-global
            home-mpv-configuration-profiles
            home-mpv-configuration-extra
            home-mpv-configuration-source-location

            mpv-profile-configuration
            mpv-profile-configuration?
            mpv-profile-configuration-source-location
            ;; Generated exports - START.
            ;; Generated exports - END.
            ))


;;;
;;; Basic types.
;;;
(define-maybe type/boolean)
(define (serialize-type/boolean field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(if value "yes" "no")
                   "\n"))
(define type/boolean?
  (const #t))

(define-maybe type/integer)
(define (serialize-type/integer field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(number->string value)
                   "\n"))
(define (type/integer? n)
  ;; We assume integer is a signed 32bit number.
  (and-let* (((integer? n))
             ((>=3D n -2147483648))
             ((<=3D n  2147483647)))))

(define-maybe type/integer64)
(define (serialize-type/integer64 field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(number->string value)
                   "\n"))
(define (type/integer64? n)
  ;; We assume integer is a signed 64bit number.
  (and-let* (((integer? n))
             ((>=3D n -9223372036854775808))
             ((<=3D n  9223372036854775807)))))

(define-maybe type/string)
(define (serialize-type/string field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$value
                   "\n"))
(define type/string?
  string?)

(define-maybe type/float)
(define (serialize-type/float field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(number->string (exact->inexact value))
                   "\n"))
(define type/float?
  ;; I am not sure how to validate floats.
  real?)

(define-maybe type/double)
(define (serialize-type/double field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(number->string (exact->inexact value))
                   "\n"))
(define (type/double? value)
  ;; I am not sure how to validate doubles.
  real?)




;;;
;;; Additional types (possible based on the basic ones).
;;;

;;; Aspect seems to be treated as an integer, so define it in terms of it.
(define-maybe type/aspect)
(define serialize-type/aspect serialize-type/integer)
(define type/aspect? type/integer?)

;;; `Audio channels or channel map' seems to be basically a free form string
;;; with no way to validate.
(define-maybe type/audio-channels-or-channel-map)
(define serialize-type/audio-channels-or-channel-map serialize-type/string)
(define type/audio-channels-or-channel-map? type/string?)

;;; Does not seem possible to validate.
(define-maybe type/audio-format)
(define serialize-type/audio-format serialize-type/string)
(define type/audio-format? type/string?)

;;; While most options list 4.6116860184274e+18 as a maximum value, we will
;;; use integer64 here.  That should be enough for everyone for few more
;;; years.
(define-maybe type/byte-size)
(define serialize-type/byte-size serialize-type/integer64)
(define type/byte-size? type/integer64?)

(define-maybe type/color)
(define (serialize-type/color field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(if (list? value)
                         (string-join (map number->string value) "/")
                         value)
                   "\n"))
(define (type/color? value)
  (define (ok-num? n)
    (and (number? n)
         (>=3D n 0)
         (<=3D n 1)))
  (if (list? value)
      ;; Either a list of 3(4) numbers encoding RGB(A) on range from 0 to 1=
...
      (match value
        (((? ok-num? r) (? ok-num? g) (? ok-num? b))
         #t)
        (((? ok-num? r) (? ok-num? g) (? ok-num? b) (? ok-num? alpha))
         #t)
        (_
         #f))
      ;; ... or RGB(A) hex encoding.
      (string-match "^#([A-Fa-f0-9]{2})?[A-Fa-f0-9]{6}$" value)))

;;; I do not see value mirroring fourcc.org's database here.  It is further
;;; complicated by arbitrary hex being accepted as well.  So string it is.
(define-maybe type/fourcc)
(define serialize-type/fourcc serialize-type/string)
(define type/fourcc? type/string?)

;;; No way to validate.
(define-maybe type/image-format)
(define serialize-type/image-format serialize-type/string)
(define type/image-format? type/string?)

;;; Looking at the documentation for --start, there is no way to make this
;;; bullet-proof, especially since even chapter numbers are accepted.
(define-maybe type/relative-time-or-percent-position)
(define serialize-type/relative-time-or-percent-position serialize-type/str=
ing)
(define type/relative-time-or-percent-position? type/string?)

(define-maybe type/time)
(define serialize-type/time serialize-type/string)
(define type/time? type/string?)

(define-maybe type/video-rectangle)
(define serialize-type/video-rectangle serialize-type/string)
(define (type/video-rectangle? value)
  (or (string-match "-?[0-9]+%?:-?[0-9]+%?" value)
      (string-match
       "^(-?[0-9]+%?(x-?[0-9]+%?)?)?([+-]-?[0-9]+%?[+-]-?[0-9]+%?)?$"
       value)))

(define-maybe type/window-geometry)
(define serialize-type/window-geometry serialize-type/string)
(define (type/window-geometry? value)
  (or (string-match "-?[0-9]+%?:-?[0-9]+%?" value)
      (string-match
       "^(-?[0-9]+%?(x-?[0-9]+%?)?)?([+-]-?[0-9]+%?[+-]-?[0-9]+%?)?(/[0-9]+=
)?$"
       value)))

(define-maybe type/window-size)
(define serialize-type/window-size serialize-type/string)
(define (type/window-size? value)
  (string-match "^([0-9]+%?(x[0-9]+%?)?)?$" value))

(define-maybe type/enumeration)
(define (serialize-type/enumeration field-name value)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   ;; This could be either symbol or (in case of enumeratio=
ns
                   ;; with alternate type) anything.  So just use `format'.
                   #$(format #f "~s" value)
                   "\n"))
(define (type/enumeration? value)
  ;; There is no general way to check enumerations.  The field always has to
  ;; define custom sanitizer.
  #t)




;;;
;;; List types.
;;;
(define-maybe type/list-of-string)
(define (serialize-type/list-of-string field-name lst)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(string-join lst ",")
                   "\n"))
(define (type/list-of-string? lst)
  (every type/string? lst))

(define-maybe type/list-of-key-value)
(define (serialize-type/list-of-key-value field-name lst)
  #~(string-append #$(symbol->string field-name)
                   "=3D"
                   #$(string-join (map (match-lambda
                                         ((k . v) (format #f "~a=3D~a" k v)=
))
                                       lst)
                                  ",")
                   "\n"))
(define (type/list-of-key-value? lst)
  (every (match-lambda
           (((? string?) . (? string?)) #t)
           (_ #f))
         lst))

(define-maybe type/list-of-object-setting)
(define serialize-type/list-of-object-setting serialize-type/list-of-string)
(define type/list-of-object-setting? type/list-of-string?)

(define-maybe type/list-of-output-verbosity)
(define serialize-type/list-of-output-verbosity serialize-type/list-of-key-=
value)
(define type/list-of-output-verbosity? type/list-of-key-value?)




;;;
;;; Actual configuration record.  Contains a lot of generated code.
;;;

;;; Generated code - START.
(define-configuration
  mpv-profile-configuration
  (ab-loop-a maybe-type/time "")
  (ab-loop-b maybe-type/time "")
  (ab-loop-count
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(inf))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (access-references maybe-type/boolean "")
  (ad maybe-type/string "")
  (ad-lavc-ac3drc
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 6))))))
  (ad-lavc-downmix maybe-type/boolean "")
  (ad-lavc-o maybe-type/list-of-key-value "")
  (ad-lavc-threads
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 16))))))
  (ad-queue-enable maybe-type/boolean "")
  (ad-queue-max-bytes
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (ad-queue-max-samples
   maybe-type/integer64
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer64? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (ad-queue-max-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (af maybe-type/list-of-object-setting "")
  (audio maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (or (memq val '(no auto))
                         (and (maybe-type/integer? val)
                              (>=3D val 0)
                              (<=3D val 8190))))))))
  (alang maybe-type/list-of-string "")
  (allow-delayed-peak-detect maybe-type/boolean "")
  (alsa-buffer-time
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 2147483647))))))
  (alsa-ignore-chmap maybe-type/boolean "")
  (alsa-mixer-device maybe-type/string "")
  (alsa-mixer-index
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 99))))))
  (alsa-mixer-name maybe-type/string "")
  (alsa-non-interleaved maybe-type/boolean "")
  (alsa-periods
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 2147483647))))))
  (alsa-resample maybe-type/boolean "")
  (ao maybe-type/list-of-object-setting "")
  (ao-null-broken-delay maybe-type/boolean "")
  (ao-null-broken-eof maybe-type/boolean "")
  (ao-null-buffer
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (ao-null-channel-layouts
   maybe-type/audio-channels-or-channel-map
   "")
  (ao-null-format maybe-type/audio-format "")
  (ao-null-latency
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (ao-null-outburst
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 100000))))))
  (ao-null-speed
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 10000))))))
  (ao-null-untimed maybe-type/boolean "")
  (ao-pcm-append maybe-type/boolean "")
  (ao-pcm-file maybe-type/string "")
  (ao-pcm-waveheader maybe-type/boolean "")
  (audio-backward-batch
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 1024))))))
  (audio-backward-overlap
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 1024))))))))
  (audio-buffer
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 10))))))
  (audio-channels
   maybe-type/audio-channels-or-channel-map
   "")
  (audio-client-name maybe-type/string "")
  (audio-delay maybe-type/float "")
  (audio-demuxer maybe-type/string "")
  (audio-device maybe-type/string "")
  (audio-display
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no embedded-first external-first)))))))
  (audio-exclusive maybe-type/boolean "")
  (audio-exts maybe-type/list-of-string "")
  (audio-fallback-to-null maybe-type/boolean "")
  (audio-file-auto
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no exact fuzzy all)))))))
  (audio-file-paths maybe-type/list-of-string "")
  (audio-files maybe-type/list-of-string "")
  (audio-format maybe-type/audio-format "")
  (audio-normalize-downmix maybe-type/boolean "")
  (audio-pitch-correction maybe-type/boolean "")
  (audio-resample-cutoff
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (audio-resample-filter-size
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 32))))))
  (audio-resample-linear maybe-type/boolean "")
  (audio-resample-max-output-size
   maybe-type/double
   "")
  (audio-resample-phase-shift
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 30))))))
  (audio-reversal-buffer
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (audio-samplerate
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 768000))))))
  (audio-spdif maybe-type/string "")
  (audio-stream-silence maybe-type/boolean "")
  (audio-swresample-o
   maybe-type/list-of-key-value
   "")
  (audio-wait-open
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 60))))))
  (auto-window-resize maybe-type/boolean "")
  (autocreate-playlist
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no filter same)))))))
  (autofit maybe-type/window-size "")
  (autofit-larger maybe-type/window-size "")
  (autofit-smaller maybe-type/window-size "")
  (autoload-files maybe-type/boolean "")
  (autosync
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 10000))))))))
  (background
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(none color tiles)))))))
  (background-color maybe-type/color "")
  (blend-subtitles
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes video)))))))
  (bluray-device maybe-type/string "")
  (border maybe-type/boolean "")
  (border-background
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(none color tiles)))))))
  (brightness
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -100)
               (<=3D val 100))))))
  (cache maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (memq val '(no auto yes)))))))
  (cache-on-disk maybe-type/boolean "")
  (cache-pause maybe-type/boolean "")
  (cache-pause-initial maybe-type/boolean "")
  (cache-pause-wait
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (cache-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (cdda-cdtext maybe-type/boolean "")
  (cdda-device maybe-type/string "")
  (cdda-overlap
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 75))))))
  (cdda-paranoia
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 2))))))
  (cdda-sector-size
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 100))))))
  (cdda-skip maybe-type/boolean "")
  (cdda-span-a maybe-type/integer "")
  (cdda-span-b maybe-type/integer "")
  (cdda-speed
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 100))))))
  (cdda-toc-offset maybe-type/integer "")
  (chapter-merge-threshold
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 10000))))))
  (chapter-seek-threshold maybe-type/double "")
  (chapters-file maybe-type/string "")
  (config maybe-type/boolean "")
  (container-fps-override
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (contrast
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -100)
               (<=3D val 100))))))
  (cookies maybe-type/boolean "")
  (cookies-file maybe-type/string "")
  (corner-rounding
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (correct-downscaling maybe-type/boolean "")
  (correct-pts maybe-type/boolean "")
  (cover-art-auto
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no exact fuzzy all)))))))
  (cover-art-files maybe-type/list-of-string "")
  (cover-art-whitelist
   maybe-type/list-of-string
   "")
  (cscale
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bilinear
                       bicubic_fast
                       oversample
                       spline16
                       spline36
                       spline64
                       sinc
                       lanczos
                       ginseng
                       bicubic
                       hermite
                       catmull_rom
                       mitchell
                       robidoux
                       robidouxsharp
                       box
                       nearest
                       triangle
                       gaussian
                       jinc
                       ewa_lanczos
                       ewa_hanning
                       ewa_ginseng
                       ewa_lanczossharp
                       ewa_lanczos4sharpest
                       ewa_lanczossoft
                       haasnsoft
                       ewa_robidoux
                       ewa_robidouxsharp
                       bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx)))))))
  (cscale-antiring
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (cscale-blur maybe-type/float "")
  (cscale-clamp
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (cscale-param1 maybe-type/float "")
  (cscale-param2 maybe-type/float "")
  (cscale-radius
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.5)
               (<=3D val 16))))))
  (cscale-taper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (cscale-window
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx
                       jinc)))))))
  (cscale-wparam maybe-type/float "")
  (cscale-wtaper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (cursor-autohide
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no always))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 30000))))))))
  (cursor-autohide-fs-only maybe-type/boolean "")
  (deband maybe-type/boolean "")
  (deband-grain
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 4096))))))
  (deband-iterations
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 16))))))
  (deband-range
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 64))))))
  (deband-threshold
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 4096))))))
  (deinterlace
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes auto)))))))
  (deinterlace-field-parity
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(tff bff auto)))))))
  (demuxer maybe-type/string "")
  (demuxer-backward-playback-step
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (demuxer-cache-dir maybe-type/string "")
  (demuxer-cache-unlink-files
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(immediate whendone no)))))))
  (demuxer-cache-wait maybe-type/boolean "")
  (demuxer-donate-buffer maybe-type/boolean "")
  (demuxer-hysteresis-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (demuxer-lavf-allow-mimetype
   maybe-type/boolean
   "")
  (demuxer-lavf-analyzeduration
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 3600))))))
  (demuxer-lavf-buffersize
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 10485760))))))
  (demuxer-lavf-format maybe-type/string "")
  (demuxer-lavf-hacks maybe-type/boolean "")
  (demuxer-lavf-linearize-timestamps
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no auto yes)))))))
  (demuxer-lavf-o maybe-type/list-of-key-value "")
  (demuxer-lavf-probe-info
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes auto nostreams)))))))
  (demuxer-lavf-probescore
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 100))))))
  (demuxer-lavf-probesize
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 32)
               (<=3D val 2147483647))))))
  (demuxer-lavf-propagate-opts
   maybe-type/boolean
   "")
  (demuxer-max-back-bytes
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (demuxer-max-bytes
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (demuxer-mkv-probe-start-time
   maybe-type/boolean
   "")
  (demuxer-mkv-probe-video-duration
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes full)))))))
  (demuxer-mkv-subtitle-preroll
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes index)))))))
  (demuxer-mkv-subtitle-preroll-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (demuxer-mkv-subtitle-preroll-secs-index
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (demuxer-rawaudio-channels
   maybe-type/audio-channels-or-channel-map
   "")
  (demuxer-rawaudio-format
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(u8 s8
                          u16le
                          u16be
                          s16le
                          s16be
                          u24le
                          u24be
                          s24le
                          s24be
                          u32le
                          u32be
                          s32le
                          s32be
                          floatle
                          floatbe
                          doublele
                          doublebe
                          u16
                          s16
                          u24
                          s24
                          u32
                          s32
                          float
                          double)))))))
  (demuxer-rawaudio-rate
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1000)
               (<=3D val 384000))))))
  (demuxer-rawvideo-codec maybe-type/string "")
  (demuxer-rawvideo-format maybe-type/fourcc "")
  (demuxer-rawvideo-fps
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.001)
               (<=3D val 1000))))))
  (demuxer-rawvideo-h
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 8192))))))
  (demuxer-rawvideo-mp-format
   maybe-type/image-format
   "")
  (demuxer-rawvideo-size
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 268435456))))))
  (demuxer-rawvideo-w
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 8192))))))
  (demuxer-readahead-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (demuxer-seekable-cache
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto no yes)))))))
  (demuxer-termination-timeout
   maybe-type/double
   "")
  (demuxer-thread maybe-type/boolean "")
  (directory-filter-types
   maybe-type/list-of-string
   "")
  (directory-mode
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto lazy recursive ignore)))))))
  (display-fps-override
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (display-tags maybe-type/list-of-string "")
  (dither
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(fruit ordered error-diffusion no)))))))
  (dither-depth
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no auto))
                   (and (maybe-type/integer? val)
                        (>=3D val -1)
                        (<=3D val 16))))))))
  (dither-size-fruit
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 2)
               (<=3D val 8))))))
  (drag-and-drop
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no auto replace append insert-next)))))))
  (drm-connector maybe-type/string "")
  (drm-device maybe-type/string "")
  (drm-draw-plane
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(primary overlay))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (drm-draw-surface-size maybe-type/window-size "")
  (drm-drmprime-video-plane
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(primary overlay))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (drm-format
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(xrgb8888 xrgb2101010 xbgr8888 xbgr2101010 yuyv)))))))
  (drm-mode maybe-type/string "")
  (drm-vrr-enabled
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes auto)))))))
  (dscale
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bilinear
                       bicubic_fast
                       oversample
                       spline16
                       spline36
                       spline64
                       sinc
                       lanczos
                       ginseng
                       bicubic
                       hermite
                       catmull_rom
                       mitchell
                       robidoux
                       robidouxsharp
                       box
                       nearest
                       triangle
                       gaussian
                       jinc
                       ewa_lanczos
                       ewa_hanning
                       ewa_ginseng
                       ewa_lanczossharp
                       ewa_lanczos4sharpest
                       ewa_lanczossoft
                       haasnsoft
                       ewa_robidoux
                       ewa_robidouxsharp
                       bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx)))))))
  (dscale-antiring
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (dscale-blur maybe-type/float "")
  (dscale-clamp
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (dscale-param1 maybe-type/float "")
  (dscale-param2 maybe-type/float "")
  (dscale-radius
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.5)
               (<=3D val 16))))))
  (dscale-taper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (dscale-window
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx
                       jinc)))))))
  (dscale-wparam maybe-type/float "")
  (dscale-wtaper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (dump-stats maybe-type/string "")
  (dvbin-card
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 15))))))
  (dvbin-channel-switch-offset
   maybe-type/integer
   "")
  (dvbin-file maybe-type/string "")
  (dvbin-full-transponder maybe-type/boolean "")
  (dvbin-prog maybe-type/string "")
  (dvbin-timeout
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 30))))))
  (dvd-angle
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 99))))))
  (dvd-device maybe-type/string "")
  (dvd-speed maybe-type/integer "")
  (edition
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 8190))))))))
  (egl-config-id maybe-type/integer "")
  (egl-output-format
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto rgb8
                            rgba8
                            rgb10
                            rgb10_a2
                            rgb16
                            rgba16
                            rgb16f
                            rgba16f
                            rgb32f
                            rgba32f)))))))
  (embeddedfonts maybe-type/boolean "")
  (end maybe-type/relative-time-or-percent-position
       "")
  (error-diffusion maybe-type/string "")
  (external-files maybe-type/list-of-string "")
  (fbo-format maybe-type/string "")
  (focus-on
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(never open all)))))))
  (force-media-title maybe-type/string "")
  (force-render maybe-type/boolean "")
  (force-rgba-osd-rendering maybe-type/boolean "")
  (force-seekable maybe-type/boolean "")
  (force-window
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes immediate)))))))
  (force-window-position maybe-type/boolean "")
  (framedrop
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no vo decoder decoder+vo)))))))
  (frames
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(all))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (fs-screen
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(all current))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 32))))))))
  (fs-screen-name maybe-type/string "")
  (fullscreen maybe-type/boolean "")
  (gamma maybe-type/float
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/float? val)
                     (>=3D val -100)
                     (<=3D val 100))))))
  (gamma-auto maybe-type/boolean "")
  (gamma-factor
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.1)
               (<=3D val 2))))))
  (gamut-mapping-mode
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto clip
                            perceptual
                            relative
                            saturation
                            absolute
                            desaturate
                            darken
                            warn
                            linear)))))))
  (gapless-audio
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes weak)))))))
  (geometry maybe-type/window-geometry "")
  (glsl-shader-opts
   maybe-type/list-of-key-value
   "")
  (glsl-shaders maybe-type/list-of-string "")
  (gpu-api maybe-type/list-of-object-setting "")
  (gpu-context
   maybe-type/list-of-object-setting
   "")
  (gpu-debug maybe-type/boolean "")
  (gpu-dumb-mode
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto yes no)))))))
  (gpu-hwdec-interop maybe-type/string "")
  (gpu-shader-cache maybe-type/boolean "")
  (gpu-shader-cache-dir maybe-type/string "")
  (gpu-sw maybe-type/boolean "")
  (gpu-tex-pad-x
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 4096))))))
  (gpu-tex-pad-y
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 4096))))))
  (hdr-compute-peak
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto yes no)))))))
  (hdr-contrast-recovery
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 2))))))
  (hdr-contrast-smoothness
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 100))))))
  (hdr-peak-decay-rate
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1000))))))
  (hdr-peak-percentile
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (hdr-scene-threshold-high
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 20))))))
  (hdr-scene-threshold-low
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 20))))))
  (hidpi-window-scale maybe-type/boolean "")
  (hls-bitrate
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no min max))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (hr-seek
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no absolute yes always default)))))))
  (hr-seek-demuxer-offset maybe-type/float "")
  (hr-seek-framedrop maybe-type/boolean "")
  (http-header-fields maybe-type/list-of-string "")
  (http-proxy maybe-type/string "")
  (hue maybe-type/float
       ""
       (sanitizer
        (lambda (val)
          (or (not (maybe-value-set? val))
              (and (maybe-type/float? val)
                   (>=3D val -100)
                   (<=3D val 100))))))
  (hwdec maybe-type/list-of-string "")
  (hwdec-codecs maybe-type/string "")
  (hwdec-extra-frames
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 256))))))
  (hwdec-image-format maybe-type/image-format "")
  (icc-3dlut-size maybe-type/string "")
  (icc-cache maybe-type/boolean "")
  (icc-cache-dir maybe-type/string "")
  (icc-force-contrast
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no inf))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 1000000))))))))
  (icc-intent maybe-type/integer "")
  (icc-profile maybe-type/string "")
  (icc-profile-auto maybe-type/boolean "")
  (icc-use-luma maybe-type/boolean "")
  (idle maybe-type/enumeration
        ""
        (sanitizer
         (lambda (val)
           (or (not (maybe-value-set? val))
               (and (maybe-type/enumeration? val)
                    (memq val '(no once yes)))))))
  (ignore-path-in-watch-later-config
   maybe-type/boolean
   "")
  (image-display-duration
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (image-exts maybe-type/list-of-string "")
  (image-lut maybe-type/string "")
  (image-lut-type
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto native normalized conversion)))))))
  (image-subs-video-resolution
   maybe-type/boolean
   "")
  (include maybe-type/string "")
  (index maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (memq val '(default recreate)))))))
  (initial-audio-sync maybe-type/boolean "")
  (input-ar-delay maybe-type/integer "")
  (input-ar-rate maybe-type/integer "")
  (input-builtin-bindings maybe-type/boolean "")
  (input-builtin-dragging maybe-type/boolean "")
  (input-commands maybe-type/list-of-string "")
  (input-conf maybe-type/string "")
  (input-cursor maybe-type/boolean "")
  (input-cursor-passthrough maybe-type/boolean "")
  (input-default-bindings maybe-type/boolean "")
  (input-doubleclick-time
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 1000))))))
  (input-dragging-deadzone maybe-type/integer "")
  (input-ipc-client maybe-type/string "")
  (input-ipc-server maybe-type/string "")
  (input-key-fifo-size
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 2)
               (<=3D val 65000))))))
  (input-media-keys maybe-type/boolean "")
  (input-preprocess-wheel maybe-type/boolean "")
  (input-right-alt-gr maybe-type/boolean "")
  (input-terminal maybe-type/boolean "")
  (input-test maybe-type/boolean "")
  (input-touch-emulate-mouse maybe-type/boolean "")
  (input-vo-keyboard maybe-type/boolean "")
  (interpolation maybe-type/boolean "")
  (interpolation-preserve maybe-type/boolean "")
  (interpolation-threshold maybe-type/float "")
  (inverse-tone-mapping maybe-type/boolean "")
  (jack-autostart maybe-type/boolean "")
  (jack-connect maybe-type/boolean "")
  (jack-name maybe-type/string "")
  (jack-port maybe-type/string "")
  (jack-std-channel-layout
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(waveext any)))))))
  (keep-open
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes always)))))))
  (keep-open-pause maybe-type/boolean "")
  (keepaspect maybe-type/boolean "")
  (keepaspect-window maybe-type/boolean "")
  (lavfi-complex maybe-type/string "")
  (length
   maybe-type/relative-time-or-percent-position
   "")
  (libplacebo-opts maybe-type/list-of-key-value "")
  (linear-downscaling maybe-type/boolean "")
  (linear-upscaling maybe-type/boolean "")
  (load-auto-profiles
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes auto)))))))
  (load-osd-console maybe-type/boolean "")
  (load-scripts maybe-type/boolean "")
  (load-select maybe-type/boolean "")
  (load-stats-overlay maybe-type/boolean "")
  (load-unsafe-playlists maybe-type/boolean "")
  (log-file maybe-type/string "")
  (loop-file
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no inf yes))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 10000))))))))
  (loop-playlist
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no inf yes force))
                   (and (maybe-type/integer? val)
                        (>=3D val 1)
                        (<=3D val 10000))))))))
  (lut maybe-type/string "")
  (lut-type
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto native normalized conversion)))))))
  (mc maybe-type/float
      ""
      (sanitizer
       (lambda (val)
         (or (not (maybe-value-set? val))
             (and (maybe-type/float? val)
                  (>=3D val 0)
                  (<=3D val 100))))))
  (media-controls
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no player yes)))))))
  (merge-files maybe-type/boolean "")
  (metadata-codepage maybe-type/string "")
  (mf-fps maybe-type/double "")
  (mf-type maybe-type/string "")
  (monitoraspect
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 9))))))
  (monitorpixelaspect
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.03125)
               (<=3D val 32))))))
  (msg-color maybe-type/boolean "")
  (msg-level
   maybe-type/list-of-output-verbosity
   "")
  (msg-module maybe-type/boolean "")
  (msg-time maybe-type/boolean "")
  (mute maybe-type/boolean "")
  (native-fs maybe-type/boolean "")
  (native-keyrepeat maybe-type/boolean "")
  (native-touch maybe-type/boolean "")
  (network-timeout
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (oac maybe-type/string "")
  (oacopts maybe-type/list-of-key-value "")
  (ocopy-metadata maybe-type/boolean "")
  (of maybe-type/string "")
  (ofopts maybe-type/list-of-key-value "")
  (on-all-workspaces maybe-type/boolean "")
  (ontop maybe-type/boolean "")
  (ontop-level
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(window system desktop))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (opengl-check-pattern-a maybe-type/integer "")
  (opengl-check-pattern-b maybe-type/integer "")
  (opengl-early-flush
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes auto)))))))
  (opengl-es
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto yes no)))))))
  (opengl-glfinish maybe-type/boolean "")
  (opengl-pbo maybe-type/boolean "")
  (opengl-rectangle-textures maybe-type/boolean "")
  (opengl-swapinterval maybe-type/integer "")
  (opengl-waitvsync maybe-type/boolean "")
  (orawts maybe-type/boolean "")
  (ordered-chapters maybe-type/boolean "")
  (ordered-chapters-files maybe-type/string "")
  (oremove-metadata maybe-type/list-of-string "")
  (osc maybe-type/boolean "")
  (osd-align-x
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(left center right)))))))
  (osd-align-y
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(top center bottom)))))))
  (osd-back-color maybe-type/color "")
  (osd-bar maybe-type/boolean "")
  (osd-bar-align-x
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1))))))
  (osd-bar-align-y
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1))))))
  (osd-bar-h
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.1)
               (<=3D val 50))))))
  (osd-bar-outline-size
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1000))))))
  (osd-bar-w
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 100))))))
  (osd-blur
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 20))))))
  (osd-bold maybe-type/boolean "")
  (osd-border-style
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(outline-and-shadow opaque-box background-box)))))))
  (osd-color maybe-type/color "")
  (osd-duration
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 3600000))))))
  (osd-font maybe-type/string "")
  (osd-font-provider
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto none fontconfig)))))))
  (osd-font-size
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 9000))))))
  (osd-fonts-dir maybe-type/string "")
  (osd-fractions maybe-type/boolean "")
  (osd-italic maybe-type/boolean "")
  (osd-justify
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto left center right)))))))
  (osd-level
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(#{0}# #{1}# #{2}# #{3}#)))))))
  (osd-margin-x
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 300))))))
  (osd-margin-y
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 600))))))
  (osd-msg1 maybe-type/string "")
  (osd-msg2 maybe-type/string "")
  (osd-msg3 maybe-type/string "")
  (osd-on-seek
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no bar msg msg-bar)))))))
  (osd-outline-color maybe-type/color "")
  (osd-outline-size maybe-type/float "")
  (osd-playing-msg maybe-type/string "")
  (osd-playing-msg-duration
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 3600000))))))
  (osd-playlist-entry
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(title filename both)))))))
  (osd-scale
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (osd-scale-by-window maybe-type/boolean "")
  (osd-shadow-offset maybe-type/float "")
  (osd-spacing
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -10)
               (<=3D val 10))))))
  (osd-status-msg maybe-type/string "")
  (oset-metadata maybe-type/list-of-key-value "")
  (ovc maybe-type/string "")
  (ovcopts maybe-type/list-of-key-value "")
  (panscan
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (pause maybe-type/boolean "")
  (pitch maybe-type/double
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/double? val)
                     (>=3D val 0.01)
                     (<=3D val 100))))))
  (play-direction
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(forward + backward -)))))))
  (player-operation-mode
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(cplayer pseudo-gui)))))))
  (playlist-start
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto no))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 2147483647))))))))
  (prefetch-playlist maybe-type/boolean "")
  (profile maybe-type/list-of-string "")
  (pulse-allow-suspended maybe-type/boolean "")
  (pulse-buffer
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(native))
                   (and (maybe-type/integer? val)
                        (>=3D val 1)
                        (<=3D val 2000))))))))
  (pulse-host maybe-type/string "")
  (pulse-latency-hacks maybe-type/boolean "")
  (quiet maybe-type/boolean "")
  (really-quiet maybe-type/boolean "")
  (rebase-start-time maybe-type/boolean "")
  (referrer maybe-type/string "")
  (replaygain
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no track album)))))))
  (replaygain-clip maybe-type/boolean "")
  (replaygain-fallback
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -200)
               (<=3D val 60))))))
  (replaygain-preamp
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -150)
               (<=3D val 150))))))
  (reset-on-next-file maybe-type/list-of-string "")
  (resume-playback maybe-type/boolean "")
  (resume-playback-check-mtime
   maybe-type/boolean
   "")
  (rtsp-transport
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(lavf udp tcp http udp_multicast)))))))
  (saturation
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -100)
               (<=3D val 100))))))
  (save-position-on-quit maybe-type/boolean "")
  (scale maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (memq val
                           '(bilinear
                             bicubic_fast
                             oversample
                             spline16
                             spline36
                             spline64
                             sinc
                             lanczos
                             ginseng
                             bicubic
                             hermite
                             catmull_rom
                             mitchell
                             robidoux
                             robidouxsharp
                             box
                             nearest
                             triangle
                             gaussian
                             jinc
                             ewa_lanczos
                             ewa_hanning
                             ewa_ginseng
                             ewa_lanczossharp
                             ewa_lanczos4sharpest
                             ewa_lanczossoft
                             haasnsoft
                             ewa_robidoux
                             ewa_robidouxsharp
                             bartlett
                             cosine
                             hanning
                             tukey
                             hamming
                             quadric
                             welch
                             kaiser
                             blackman
                             sphinx)))))))
  (scale-antiring
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (scale-blur maybe-type/float "")
  (scale-clamp
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (scale-param1 maybe-type/float "")
  (scale-param2 maybe-type/float "")
  (scale-radius
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.5)
               (<=3D val 16))))))
  (scale-taper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (scale-window
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx
                       jinc)))))))
  (scale-wparam maybe-type/float "")
  (scale-wtaper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (scaler-resizes-only maybe-type/boolean "")
  (screen
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(default))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 32))))))))
  (screen-name maybe-type/string "")
  (screenshot-avif-encoder maybe-type/string "")
  (screenshot-avif-opts
   maybe-type/list-of-key-value
   "")
  (screenshot-avif-pixfmt maybe-type/string "")
  (screenshot-directory maybe-type/string "")
  (screenshot-format
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(jpg jpeg png webp jxl avif)))))))
  (screenshot-high-bit-depth maybe-type/boolean "")
  (screenshot-jpeg-quality
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (screenshot-jpeg-source-chroma
   maybe-type/boolean
   "")
  (screenshot-jxl-distance
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 15))))))
  (screenshot-jxl-effort
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 9))))))
  (screenshot-png-compression
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 9))))))
  (screenshot-png-filter
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 5))))))
  (screenshot-sw maybe-type/boolean "")
  (screenshot-tag-colorspace maybe-type/boolean "")
  (screenshot-template maybe-type/string "")
  (screenshot-webp-compression
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 6))))))
  (screenshot-webp-lossless maybe-type/boolean "")
  (screenshot-webp-quality
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (script-opts maybe-type/list-of-key-value "")
  (scripts maybe-type/list-of-string "")
  (secondary-sid
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 8190))))))))
  (secondary-sub-ass-override
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes scale force strip)))))))
  (secondary-sub-delay maybe-type/float "")
  (secondary-sub-pos
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 150))))))
  (secondary-sub-visibility maybe-type/boolean "")
  (sharpen maybe-type/float "")
  (show-in-taskbar maybe-type/boolean "")
  (shuffle maybe-type/boolean "")
  (sub maybe-type/enumeration
       ""
       (sanitizer
        (lambda (val)
          (or (not (maybe-value-set? val))
              (and (maybe-type/enumeration? val)
                   (or (memq val '(no auto))
                       (and (maybe-type/integer? val)
                            (>=3D val 0)
                            (<=3D val 8190))))))))
  (sigmoid-center
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (sigmoid-slope
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 20))))))
  (sigmoid-upscaling maybe-type/boolean "")
  (slang maybe-type/list-of-string "")
  (snap-window maybe-type/boolean "")
  (speed maybe-type/double
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/double? val)
                     (>=3D val 0.01)
                     (<=3D val 100))))))
  (spirv-compiler
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto)))))))
  (sstep maybe-type/double
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/double? val)
                     (>=3D val 0)
                     (<=3D val +inf.0))))))
  (start maybe-type/relative-time-or-percent-position
         "")
  (stop-playback-on-init-failure
   maybe-type/boolean
   "")
  (stop-screensaver
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes always)))))))
  (stream-buffer-size
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 4096)
               (<=3D val 536870912))))))
  (stream-dump maybe-type/string "")
  (stream-lavf-o maybe-type/list-of-key-value "")
  (stream-record maybe-type/string "")
  (stretch-dvd-subs maybe-type/boolean "")
  (stretch-image-subs-to-screen
   maybe-type/boolean
   "")
  (sub-align-x
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(left center right)))))))
  (sub-align-y
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(top center bottom)))))))
  (sub-ass maybe-type/boolean "")
  (sub-ass-force-margins maybe-type/boolean "")
  (sub-ass-hinting
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(none light normal native)))))))
  (sub-ass-justify maybe-type/boolean "")
  (sub-ass-line-spacing
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1000)
               (<=3D val 1000))))))
  (sub-ass-override
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes scale force strip)))))))
  (sub-ass-scale-with-window maybe-type/boolean "")
  (sub-ass-shaper
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(simple complex)))))))
  (sub-ass-style-overrides
   maybe-type/list-of-string
   "")
  (sub-ass-styles maybe-type/string "")
  (sub-ass-use-video-data
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(none aspect-ratio all)))))))
  (sub-ass-video-aspect-override
   maybe-type/aspect
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/aspect? val)
               (>=3D val 0)
               (<=3D val 10))))))
  (sub-ass-vsfilter-color-compat
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no basic full force-601)))))))
  (sub-auto
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no exact fuzzy all)))))))
  (sub-auto-exts maybe-type/list-of-string "")
  (sub-back-color maybe-type/color "")
  (sub-blur
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 20))))))
  (sub-bold maybe-type/boolean "")
  (sub-border-style
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(outline-and-shadow opaque-box background-box)))))))
  (sub-clear-on-seek maybe-type/boolean "")
  (sub-codepage maybe-type/string "")
  (sub-color maybe-type/color "")
  (sub-create-cc-track maybe-type/boolean "")
  (sub-delay maybe-type/float "")
  (sub-demuxer maybe-type/string "")
  (sub-file-paths maybe-type/list-of-string "")
  (sub-files maybe-type/list-of-string "")
  (sub-filter-jsre maybe-type/list-of-string "")
  (sub-filter-regex maybe-type/list-of-string "")
  (sub-filter-regex-enable maybe-type/boolean "")
  (sub-filter-regex-plain maybe-type/boolean "")
  (sub-filter-regex-warn maybe-type/boolean "")
  (sub-filter-sdh maybe-type/boolean "")
  (sub-filter-sdh-enclosures maybe-type/string "")
  (sub-filter-sdh-harder maybe-type/boolean "")
  (sub-fix-timing maybe-type/boolean "")
  (sub-font maybe-type/string "")
  (sub-font-provider
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto none fontconfig)))))))
  (sub-font-size
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 9000))))))
  (sub-fonts-dir maybe-type/string "")
  (sub-forced-events-only maybe-type/boolean "")
  (sub-fps maybe-type/float "")
  (sub-gauss
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 3))))))
  (sub-gray maybe-type/boolean "")
  (sub-italic maybe-type/boolean "")
  (sub-justify
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto left center right)))))))
  (sub-lavc-o maybe-type/list-of-key-value "")
  (sub-margin-x
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 300))))))
  (sub-margin-y
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 600))))))
  (sub-outline-color maybe-type/color "")
  (sub-outline-size maybe-type/float "")
  (sub-past-video-end maybe-type/boolean "")
  (sub-pos
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 150))))))
  (sub-scale
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (sub-scale-by-window maybe-type/boolean "")
  (sub-scale-with-window maybe-type/boolean "")
  (sub-shadow-offset maybe-type/float "")
  (sub-spacing
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -10)
               (<=3D val 10))))))
  (sub-speed maybe-type/float "")
  (sub-stretch-durations maybe-type/boolean "")
  (sub-use-margins maybe-type/boolean "")
  (sub-visibility maybe-type/boolean "")
  (sub-vsfilter-bidi-compat maybe-type/boolean "")
  (subs-fallback
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no default yes)))))))
  (subs-fallback-forced
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes always)))))))
  (subs-match-os-language maybe-type/boolean "")
  (subs-with-matching-audio
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no forced yes)))))))
  (swapchain-depth
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 8))))))
  (sws-allow-zimg maybe-type/boolean "")
  (sws-bitexact maybe-type/boolean "")
  (sws-cgb
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (sws-chs maybe-type/integer "")
  (sws-cs
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -100)
               (<=3D val 100))))))
  (sws-cvs maybe-type/integer "")
  (sws-fast maybe-type/boolean "")
  (sws-lgb
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (sws-ls
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -100)
               (<=3D val 100))))))
  (sws-scaler
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(fast-bilinear
                       bilinear
                       bicubic
                       x
                       point
                       area
                       bicublin
                       gauss
                       sinc
                       lanczos
                       spline)))))))
  (target-colorspace-hint maybe-type/boolean "")
  (target-contrast
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto inf))
                   (and (maybe-type/integer? val)
                        (>=3D val 10)
                        (<=3D val 1000000))))))))
  (target-gamut
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto bt.601-525
                            bt.601-625
                            bt.709
                            bt.2020
                            bt.470m
                            apple
                            adobe
                            prophoto
                            cie1931
                            dci-p3
                            display-p3
                            v-gamut
                            s-gamut
                            ebu3213
                            film-c
                            aces-ap0
                            aces-ap1)))))))
  (target-lut maybe-type/string "")
  (target-peak
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 10)
                        (<=3D val 10000))))))))
  (target-prim
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto bt.601-525
                            bt.601-625
                            bt.709
                            bt.2020
                            bt.470m
                            apple
                            adobe
                            prophoto
                            cie1931
                            dci-p3
                            display-p3
                            v-gamut
                            s-gamut
                            ebu3213
                            film-c
                            aces-ap0
                            aces-ap1)))))))
  (target-trc
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto bt.1886
                            srgb
                            linear
                            gamma1.8
                            gamma2.0
                            gamma2.2
                            gamma2.4
                            gamma2.6
                            gamma2.8
                            prophoto
                            pq
                            hlg
                            v-log
                            s-log1
                            s-log2
                            st428)))))))
  (taskbar-progress maybe-type/boolean "")
  (teletext-page
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val -1)
               (<=3D val 999))))))
  (temporal-dither maybe-type/boolean "")
  (temporal-dither-period
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 128))))))
  (term-osd
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(force auto no)))))))
  (term-osd-bar maybe-type/boolean "")
  (term-osd-bar-chars maybe-type/string "")
  (term-playing-msg maybe-type/string "")
  (term-status-msg maybe-type/string "")
  (term-title maybe-type/string "")
  (terminal maybe-type/boolean "")
  (title maybe-type/string "")
  (title-bar maybe-type/boolean "")
  (tls-ca-file maybe-type/string "")
  (tls-cert-file maybe-type/string "")
  (tls-key-file maybe-type/string "")
  (tls-verify maybe-type/boolean "")
  (tone-mapping
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto clip
                            mobius
                            reinhard
                            hable
                            gamma
                            linear
                            spline
                            bt.2390
                            bt.2446a
                            st2094-40
                            st2094-10)))))))
  (tone-mapping-max-boost
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 1)
               (<=3D val 10))))))
  (tone-mapping-param maybe-type/float "")
  (tone-mapping-visualize maybe-type/boolean "")
  (track-auto-selection maybe-type/boolean "")
  (tscale
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(oversample
                       linear
                       spline16
                       spline36
                       spline64
                       sinc
                       lanczos
                       ginseng
                       bicubic
                       hermite
                       catmull_rom
                       mitchell
                       robidoux
                       robidouxsharp
                       box
                       nearest
                       triangle
                       gaussian
                       bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx
                       jinc)))))))
  (tscale-antiring
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (tscale-blur maybe-type/float "")
  (tscale-clamp
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (tscale-param1 maybe-type/float "")
  (tscale-param2 maybe-type/float "")
  (tscale-radius
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0.5)
               (<=3D val 16))))))
  (tscale-taper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (tscale-window
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(bartlett
                       cosine
                       hanning
                       tukey
                       hamming
                       quadric
                       welch
                       kaiser
                       blackman
                       sphinx
                       jinc)))))))
  (tscale-wparam maybe-type/float "")
  (tscale-wtaper
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (untimed maybe-type/boolean "")
  (use-embedded-icc-profile maybe-type/boolean "")
  (use-filedir-conf maybe-type/boolean "")
  (user-agent maybe-type/string "")
  (vaapi-device maybe-type/string "")
  (vd maybe-type/string "")
  (vd-apply-cropping maybe-type/boolean "")
  (vd-lavc-assume-old-x264 maybe-type/boolean "")
  (vd-lavc-bitexact maybe-type/boolean "")
  (vd-lavc-check-hw-profile maybe-type/boolean "")
  (vd-lavc-dr
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto no yes)))))))
  (vd-lavc-fast maybe-type/boolean "")
  (vd-lavc-film-grain
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto cpu gpu)))))))
  (vd-lavc-framedrop
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(none default nonref bidir nonkey all)))))))
  (vd-lavc-o maybe-type/list-of-key-value "")
  (vd-lavc-show-all maybe-type/boolean "")
  (vd-lavc-skipframe
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(none default nonref bidir nonkey all)))))))
  (vd-lavc-skipidct
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(none default nonref bidir nonkey all)))))))
  (vd-lavc-skiploopfilter
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(none default nonref bidir nonkey all)))))))
  (vd-lavc-software-fallback
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no yes))
                   (and (maybe-type/integer? val)
                        (>=3D val 1)
                        (<=3D val 2147483647))))))))
  (vd-lavc-threads
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (vd-queue-enable maybe-type/boolean "")
  (vd-queue-max-bytes
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (vd-queue-max-samples
   maybe-type/integer64
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer64? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (vd-queue-max-secs
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (vf maybe-type/list-of-object-setting "")
  (video maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (or (memq val '(no auto))
                         (and (maybe-type/integer? val)
                              (>=3D val 0)
                              (<=3D val 8190))))))))
  (video-align-x
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1))))))
  (video-align-y
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1))))))
  (video-aspect-method
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(bitstream container)))))))
  (video-aspect-override
   maybe-type/aspect
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/aspect? val)
               (>=3D val -1)
               (<=3D val 10))))))
  (video-backward-batch
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 1024))))))
  (video-backward-overlap
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 1024))))))))
  (video-crop maybe-type/video-rectangle "")
  (video-exts maybe-type/list-of-string "")
  (video-latency-hacks maybe-type/boolean "")
  (video-margin-ratio-bottom
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-margin-ratio-left
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-margin-ratio-right
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-margin-ratio-top
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-osd maybe-type/boolean "")
  (video-output-levels
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto limited full)))))))
  (video-pan-x maybe-type/float "")
  (video-pan-y maybe-type/float "")
  (video-reversal-buffer
   maybe-type/byte-size
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/byte-size? val)
               (>=3D val 0)
               (<=3D val 4.6116860184274e18))))))
  (video-rotate
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(no))
                   (and (maybe-type/integer? val)
                        (>=3D val 0)
                        (<=3D val 359))))))))
  (video-scale-x
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 10000))))))
  (video-scale-y
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 10000))))))
  (video-sync
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(audio display-resample
                             display-resample-vdrop
                             display-resample-desync
                             display-tempo
                             display-adrop
                             display-vdrop
                             display-desync
                             desync)))))))
  (video-sync-max-audio-change
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-sync-max-factor
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 10))))))
  (video-sync-max-video-change
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (video-timing-offset
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (video-unscaled
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes downscale-big)))))))
  (video-zoom
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -20)
               (<=3D val 20))))))
  (vlang maybe-type/list-of-string "")
  (vo maybe-type/list-of-object-setting "")
  (vo-image-avif-encoder maybe-type/string "")
  (vo-image-avif-opts
   maybe-type/list-of-key-value
   "")
  (vo-image-avif-pixfmt maybe-type/string "")
  (vo-image-format
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(jpg jpeg png webp jxl avif)))))))
  (vo-image-high-bit-depth maybe-type/boolean "")
  (vo-image-jpeg-quality
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (vo-image-jpeg-source-chroma
   maybe-type/boolean
   "")
  (vo-image-jxl-distance
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 15))))))
  (vo-image-jxl-effort
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 9))))))
  (vo-image-outdir maybe-type/string "")
  (vo-image-png-compression
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 9))))))
  (vo-image-png-filter
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 5))))))
  (vo-image-tag-colorspace maybe-type/boolean "")
  (vo-image-webp-compression
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 6))))))
  (vo-image-webp-lossless maybe-type/boolean "")
  (vo-image-webp-quality
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 100))))))
  (vo-kitty-alt-screen maybe-type/boolean "")
  (vo-kitty-cols maybe-type/integer "")
  (vo-kitty-config-clear maybe-type/boolean "")
  (vo-kitty-height maybe-type/integer "")
  (vo-kitty-left maybe-type/integer "")
  (vo-kitty-rows maybe-type/integer "")
  (vo-kitty-top maybe-type/integer "")
  (vo-kitty-use-shm maybe-type/boolean "")
  (vo-kitty-width maybe-type/integer "")
  (vo-null-fps
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0)
               (<=3D val 10000))))))
  (vo-sixel-alt-screen maybe-type/boolean "")
  (vo-sixel-buffered maybe-type/boolean "")
  (vo-sixel-cols maybe-type/integer "")
  (vo-sixel-config-clear maybe-type/boolean "")
  (vo-sixel-dither
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto none
                            atkinson
                            fs
                            jajuni
                            stucki
                            burkes
                            arithmetic
                            xor)))))))
  (vo-sixel-fixedpalette maybe-type/boolean "")
  (vo-sixel-height maybe-type/integer "")
  (vo-sixel-left maybe-type/integer "")
  (vo-sixel-pad-x maybe-type/integer "")
  (vo-sixel-pad-y maybe-type/integer "")
  (vo-sixel-reqcolors maybe-type/integer "")
  (vo-sixel-rows maybe-type/integer "")
  (vo-sixel-threshold maybe-type/integer "")
  (vo-sixel-top maybe-type/integer "")
  (vo-sixel-width maybe-type/integer "")
  (vo-tct-256 maybe-type/boolean "")
  (vo-tct-algo
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(plain half-blocks)))))))
  (vo-tct-buffering
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(pixel line frame)))))))
  (vo-tct-height maybe-type/integer "")
  (vo-tct-width maybe-type/integer "")
  (vo-vaapi-scaled-osd maybe-type/boolean "")
  (vo-vaapi-scaling
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(default fast hq nla)))))))
  (vo-vdpau-chroma-deint maybe-type/boolean "")
  (vo-vdpau-colorkey maybe-type/color "")
  (vo-vdpau-composite-detect maybe-type/boolean "")
  (vo-vdpau-denoise
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 1))))))
  (vo-vdpau-force-yuv maybe-type/boolean "")
  (vo-vdpau-fps maybe-type/double "")
  (vo-vdpau-hqscaling
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 9))))))
  (vo-vdpau-output-surfaces
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 2)
               (<=3D val 15))))))
  (vo-vdpau-pullup maybe-type/boolean "")
  (vo-vdpau-queuetime-fs maybe-type/integer "")
  (vo-vdpau-queuetime-windowed
   maybe-type/integer
   "")
  (vo-vdpau-sharpen
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1))))))
  (volume
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -1)
               (<=3D val 1000))))))
  (volume-gain
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -150)
               (<=3D val 150))))))
  (volume-gain-max
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 0)
               (<=3D val 150))))))
  (volume-gain-min
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val -150)
               (<=3D val 0))))))
  (volume-max
   maybe-type/float
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/float? val)
               (>=3D val 100)
               (<=3D val 1000))))))
  (vulkan-async-compute maybe-type/boolean "")
  (vulkan-async-transfer maybe-type/boolean "")
  (vulkan-device maybe-type/string "")
  (vulkan-display-display maybe-type/integer "")
  (vulkan-display-mode maybe-type/integer "")
  (vulkan-display-plane maybe-type/integer "")
  (vulkan-queue-count
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 8))))))
  (vulkan-swap-mode
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(auto fifo fifo-relaxed mailbox immediate)))))))
  (watch-later-directory maybe-type/string "")
  (watch-later-options
   maybe-type/list-of-string
   "")
  (wayland-app-id maybe-type/string "")
  (wayland-configure-bounds
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto no yes)))))))
  (wayland-content-type
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto none photo video game)))))))
  (wayland-disable-vsync maybe-type/boolean "")
  (wayland-edge-pixels-pointer
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 2147483647))))))
  (wayland-edge-pixels-touch
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val 2147483647))))))
  (wayland-present maybe-type/boolean "")
  (wid maybe-type/integer64 "")
  (window-dragging maybe-type/boolean "")
  (window-maximized maybe-type/boolean "")
  (window-minimized maybe-type/boolean "")
  (window-scale
   maybe-type/double
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/double? val)
               (>=3D val 0.001)
               (<=3D val 100))))))
  (write-filename-in-watch-later-config
   maybe-type/boolean
   "")
  (x11-bypass-compositor
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no yes fs-only never)))))))
  (x11-name maybe-type/string "")
  (x11-netwm
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(auto no yes)))))))
  (x11-present
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no auto yes)))))))
  (x11-wid-title maybe-type/boolean "")
  (xv-adaptor
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val -1)
               (<=3D val +inf.0))))))
  (xv-buffers
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 1)
               (<=3D val 10))))))
  (xv-ck maybe-type/enumeration
         ""
         (sanitizer
          (lambda (val)
            (or (not (maybe-value-set? val))
                (and (maybe-type/enumeration? val)
                     (memq val '(use set cur)))))))
  (xv-ck-method
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(none bg man auto)))))))
  (xv-colorkey maybe-type/integer "")
  (xv-port
   maybe-type/integer
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/integer? val)
               (>=3D val 0)
               (<=3D val +inf.0))))))
  (ytdl maybe-type/boolean "")
  (ytdl-format maybe-type/string "")
  (ytdl-raw-options
   maybe-type/list-of-key-value
   "")
  (zimg-dither
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val '(no ordered random error-diffusion)))))))
  (zimg-fast maybe-type/boolean "")
  (zimg-scaler
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(point bilinear
                             bicubic
                             spline16
                             spline36
                             lanczos)))))))
  (zimg-scaler-chroma
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (memq val
                     '(point bilinear
                             bicubic
                             spline16
                             spline36
                             lanczos)))))))
  (zimg-scaler-chroma-param-a maybe-type/double "")
  (zimg-scaler-chroma-param-b maybe-type/double "")
  (zimg-scaler-param-a maybe-type/double "")
  (zimg-scaler-param-b maybe-type/double "")
  (zimg-threads
   maybe-type/enumeration
   ""
   (sanitizer
    (lambda (val)
      (or (not (maybe-value-set? val))
          (and (maybe-type/enumeration? val)
               (or (memq val '(auto))
                   (and (maybe-type/integer? val)
                        (>=3D val 1)
                        (<=3D val 64)))))))))

;;; Generated code - END.

(set-object-property!
 (module-ref (current-module) 'mpv-profile-configuration)
 'documentation
 (generate-documentation
  `((mpv-profile-configuration ,mpv-profile-configuration-fields))
  'mpv-profile-configuration))




;;;
;;; Configuration base.
;;;
(define-maybe type/mpv-profile-configurations)
(define (serialize-type/mpv-profile-configurations _ profiles)
  #~(string-append
     #$@(map (match-lambda
               ((name . config)
                #~(string-append
                   #$(format #f "[~a]~%" name)
                   #$(serialize-mpv-profile-configuration _ config))))
             profiles)))
(define (type/mpv-profile-configurations? alist)
  (every (match-lambda
           (((? symbol?) . (? mpv-profile-configuration?)) #t)
           (_ #f))
         alist))

(define-maybe type/extra)
(define (serialize-type/extra _ value)
  #~(string-append #$value "\n"))
(define type/extra? string?)

(define (serialize-mpv-profile-configuration _ config)
  (serialize-configuration config mpv-profile-configuration-fields))

(define-configuration home-mpv-configuration
  (global
   mpv-profile-configuration
   "Globally valid settings, outputted before any profile.")
  (profiles
   maybe-type/mpv-profile-configurations
   "Alist mapping additional settings to specific profiles.  Key should be a
symbol, value an instance of @code{mpv-profile-configuration}.")
  (extra
   maybe-type/extra
   "Additional content to append to the end of the configuration file."))

(set-object-property!
 (module-ref (current-module) 'home-mpv-configuration)
 'documentation
 (generate-documentation
  `((home-mpv-configuration ,home-mpv-configuration-fields))
  'home-mpv-configuration))

--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable



=2D-=20
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

--=-=-=--

--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQJCBAEBCgAsFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmdXCQwOHH5Ad29sZnNk
ZW4uY3oACgkQL7/ufbZ/wamT4hAAg8D+H05v8RtRA4NjEP/K429gwVFI+rwBZ8Qh
kHr9JRHcUyeW6KoWXaE+ugRIqFALTv9wDj8LlZeA6XMKVar55ZvJN42JNKr9Vxi9
Su3aXSwZ8ou8NwiVs/2bkS9PpEM2yEA1vclQ5R1w4MybuJ3OCXkDNZ/st++CzKiJ
ydZLy4bkxwvpX4KG0L1m0V9cA0rEn8lo09TpGLdwyptJd4OJMZ691MoFEnwZUVlx
3O7JyO3mh7ZeaGZvH3y8g1qG65/f3HAtk9Af3nr1ukHJ1NEu4czb9vSE8DL9mTKx
Je9mOUqKn6e6r8oYfpgk1KcANpiv+s4nXSx4vtmcWstVKpkss0vH/FuYepvN2eUp
70EyMSDA3MoZ6Af9+sS3XFx8J8nNfacqkvqWS1QV1jykEk++s4xRjsZkb+ki56sj
jj4O3wF1PwzZZg4tKgJvOtCnwGZt59XOK8ZpM5KdwNhdIeMsVu6/9wVB+bWoXdC3
HX2XoDw1KugQXgFr6xKfoyvktOkxYfCN7TTGiWhYxOGK2GBUlnVki4J5VYfsokqx
u18wjBYxQQZkKz196UBPRAW/SM0tjXbj6xGr0yePPQVpChxANvZRqiEoxjEYZ4sH
TMbAlfEwUTfgS20yv5p9Bssw4d4p7CY9FUS4pLiiXOMlJ9APGM2DiKE8jnFsTvQh
oTgtbD4=
=4w6D
-----END PGP SIGNATURE-----
--==-=-=--




Acknowledgement sent to Tomas Volf <~@wolfsden.cz>:
New bug report received and forwarded. Copy sent to bug-guix@HIDDEN. Full text available.
Report forwarded to bug-guix@HIDDEN:
bug#74748; Package guix. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.