Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 03:00 UTC

Servarr / FFmpeg

Mirror of https://git.ffmpeg.org/ffmpeg.git

CLicencia propia★ 1 estrella⑂ 2 forksdesde sept 2021forkVer en GitHub ↗

Servarr/FFmpeg tiene un índice de salud de 33 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Sustainability & Governance (76/100) y la más baja, Community & Adoption (9/100). Se actualizó por última vez hace 31 días. 5 personas concentran la mayor parte del trabajo reciente.

33
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

33
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

ServarrOrganización
207 seguidores28 repositorios públicosdesde oct 2019

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

11Crítico · 22% del índice global
Cómo se puntúa
18/36Recencia de push — último push hace 31 días
0/36Cadencia de commits — 0/52 semanas con commits
0/18Volumen de commits — 0 commits en el último año
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Datos de entrada utilizados
commits_last_year0
human_commit_share1
days_since_last_push31
active_weeks_last_year0
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

9Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 2 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks2
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
0/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

76Bueno · 24% del índice global
Cómo se puntúa
45.9/54Factor bus — la mitad de los commits recae en 5 contribuyente(s)
15.4/22.5Distribución de commits — el principal contribuyente firma el 31% de los commits
13.5/13.5Amplitud de contribuyentes — 100 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 18 contributing companies or organizations
Datos de entrada utilizados
bus_factor5
contributors_sampled100
top_contributor_share0,314
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 1/1 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
16.7/25Alcance del propietario — 207 seguidores de Servarr
22.6/25Trayectoria — 28 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers207
owner_typeOrganization
is_verified
owner_loginServarr
public_repos28
account_age_days2464

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

34En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

40En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://ffmpeg.org/
0/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepagehttps://ffmpeg.org/
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

25Crítico · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 18 contributing companies or organizations
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.2/2.5Licencia — license file detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 32 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,6
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

54Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
35.7/40Historial de commits legible — 67 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,67
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, doc/Makefile, doc/examples/Makefile, fftools/Makefile, libavcodec/Makefile, libavcodec/aarch64/Makefile, libavcodec/alpha/Makefile, libavcodec/arm/Makefile, libavcodec/loongarch/Makefile, libavcodec/mips/Makefile, libavcodec/neon/Makefile, libavcodec/ppc/Makefile, libavcodec/riscv/Makefile, libavcodec/x86/Makefile, libavdevice/Makefile, libavfilter/Makefile, libavfilter/aarch64/Makefile, libavfilter/dnn/Makefile, libavfilter/x86/Makefile, libavformat/Makefile, libavutil/Makefile, libavutil/aarch64/Makefile, libavutil/arm/Makefile, libavutil/loongarch/Makefile, libavutil/mips/Makefile, libavutil/ppc/Makefile, libavutil/riscv/Makefile, libavutil/x86/Makefile, libpostproc/Makefile, libswresample/Makefile, libswresample/aarch64/Makefile, libswresample/arm/Makefile, libswresample/x86/Makefile, libswscale/Makefile, libswscale/aarch64/Makefile, libswscale/arm/Makefile, libswscale/loongarch/Makefile, libswscale/ppc/Makefile, libswscale/riscv/Makefile, libswscale/x86/Makefile, tests/Makefile, tests/api/Makefile, tests/checkasm/Makefile, tools/Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C (tipado estático)
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_filesMakefile, doc/Makefile, doc/examples/Makefile, fftools/Makefile, libavcodec/Makefile, libavcodec/aarch64/Makefile, libavcodec/alpha/Makefile, libavcodec/arm/Makefile, libavcodec/loongarch/Makefile, libavcodec/mips/Makefile, libavcodec/neon/Makefile, libavcodec/ppc/Makefile, libavcodec/riscv/Makefile, libavcodec/x86/Makefile, libavdevice/Makefile, libavfilter/Makefile, libavfilter/aarch64/Makefile, libavfilter/dnn/Makefile, libavfilter/x86/Makefile, libavformat/Makefile, libavutil/Makefile, libavutil/aarch64/Makefile, libavutil/arm/Makefile, libavutil/loongarch/Makefile, libavutil/mips/Makefile, libavutil/ppc/Makefile, libavutil/riscv/Makefile, libavutil/x86/Makefile, libpostproc/Makefile, libswresample/Makefile, libswresample/aarch64/Makefile, libswresample/arm/Makefile, libswresample/x86/Makefile, libswscale/Makefile, libswscale/aarch64/Makefile, libswscale/arm/Makefile, libswscale/loongarch/Makefile, libswscale/ppc/Makefile, libswscale/riscv/Makefile, libswscale/x86/Makefile, tests/Makefile, tests/api/Makefile, tests/checkasm/Makefile, tools/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — C (tipado estático)
52.7/55Tamaños de archivo manejables — 172/4170 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC
largest_source_bytes920.659
source_files_sampled4170
oversized_source_files172
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

1estrellas de GitHub
100contribuidores
0commits en los últimos 12 meses
31días desde el último push
0versiones publicadas
5factor bus
0issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Community profile unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 2 ⇿
0Estrellas
2Forks

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

111222212022-102024-082026-06

Cada punto abarca 4 días.

OpenSSF Scorecard 2.6 / 10
2.6agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-26 02:59 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 18 contributing companies or organizations
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
9Licenselicense file detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities32 existing vulnerabilities detected
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": true,
      "size_kb": 383324,
      "has_wiki": false,
      "homepage": "https://ffmpeg.org/",
      "languages": {
        "C": 61642836,
        "Awk": 1912,
        "C++": 121723,
        "Cuda": 84917,
        "HTML": 1631,
        "Perl": 24964,
        "Roff": 132,
        "Ruby": 1462,
        "Metal": 7961,
        "Shell": 56461,
        "Python": 5992,
        "Verilog": 729,
        "Assembly": 4862105,
        "Makefile": 885107,
        "Objective-C": 104903
      },
      "pushed_at": "2026-06-24T17:45:12Z",
      "created_at": "2021-09-08T13:11:13Z",
      "owner_type": "Organization",
      "updated_at": "2022-05-06T04:14:59Z",
      "description": "Mirror of https://git.ffmpeg.org/ffmpeg.git",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "C",
      "significant_languages": [
        "C"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "Servarr",
      "company": null,
      "location": null,
      "followers": 207,
      "avatar_url": "https://avatars.githubusercontent.com/u/57051827?v=4",
      "created_at": "2019-10-27T01:09:02Z",
      "is_verified": null,
      "public_repos": 28,
      "account_age_days": 2464
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "fa4c2884dd568d4fc0d657d3622437aebc3563b3",
          "body": "…e timestamps",
          "is_bot": false,
          "headline": "avfilter/avf_showcwt: do not return initial black frames with negativ…",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-11T16:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09f783692e218b446cf5778ce9271360458ebadc",
          "body": "Signed-off-by: James Almer <jamrial@gmail.com>",
          "is_bot": false,
          "headline": "avcodec/cbs_h266: H266RawSliceHeader, expose curr_subpic_idx",
          "author_name": "Nuo Mi",
          "author_login": "nuomi2021",
          "committed_at": "2023-11-11T14:53:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa81de4af045317aefeae941cf54f349c39e81e0",
          "body": "We can directly get data ptr from tensor, so that extral memory\nallocation can be removed.\n\nSigned-off-by: Wenbin Chen <wenbin.chen@intel.com>",
          "is_bot": false,
          "headline": "libavfilter/dnn/openvino: Reduce redundant memory allocation",
          "author_name": "Wenbin Chen",
          "author_login": "wenbinc-Bin",
          "committed_at": "2023-11-11T01:32:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49719d3cb58c03bc0a976f47d2c82e8ca48d1b3d",
          "body": null,
          "is_bot": false,
          "headline": "avfilter/avf_showcwt: add fm frequency scaler",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-11T00:19:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "409b29d3f92c8f0347527c3807c473094574f163",
          "body": "Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "doc/APIchanges: Fill in missing values",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-10T01:04:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac4e3e188af8bf6f0c4a808a24f6ff0daba78248",
          "body": "Fixes: out of array access\nFixes: 62467/clusterfuzz-testcase-minimized-ffmpeg_BSF_EVC_FRAME_MERGE_fuzzer-6092990982258688\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nReviewed-by: \"Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics\" <d.kozinski@samsung.com>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/evc_parse: Check num_remaining_tiles_in_slice_minus1",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-09T23:15:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb0a684d93f793457f7bff3940a1398eb9e91703",
          "body": "Fixes: index -1 out of bounds for type 'CFrameBuffer [100]'\nFixes: 63877/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_FOURXM_fuzzer-5854263397711872\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/4xm: Check for cfrm exhaustion",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-09T23:14:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19fcf4313148e86aa47d81a8d5d5e8d056f1f906",
          "body": "Fixes: Assertion !c->fc->nb_streams failed at libavformat/mov.c:7799\nFixes: 63875/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5479178702815232\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avformat/mov: Disallow FTYP after streams",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-09T23:14:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96d2a40b9ee0ddd1844b82c23a074804c316caa5",
          "body": "PGMYUV seems to be always limited range. This was a format originally\ninvented by FFmpeg at a time when YUVJ distinguished limited from full\nrange YUV, and this codec never appeared to output YUVJ in any\ncircumstance, so hard-coding limited range preserves the status quo.\n\nThe other formats are expl\n[…]\nag them yet, due to outstanding bugs w.r.t\ngrayscale formats and color range handling.\n\nThis change in behavior updates a bunch of FATE tests in trivial ways\n(added tagging being the only difference).",
          "is_bot": false,
          "headline": "avcodec/pnm: explicitly tag color range",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf60046cdcdb67fce8cea11c4dbab5bb8f931430",
          "body": "When using vf_scale to force a specific output color space, also tag\nthis on the AVFrame. (Mirroring existing logic for output range)\n\nMove the sanity fix for RGB after the new assignment, to avoid leaking\nbogus YUV colorspace metadata for RGB spaces.",
          "is_bot": false,
          "headline": "avfilter/vf_scale: tag output color space",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d5bb77af11eb6e9bea8b5eb5f1ecba10c72dcfd",
          "body": "No need to write a custom string parser when we can just use an integer\noption with preset values. The various bits of fallback logic are wholly\nredundant with equivalent logic already inside sws_getCoefficients.\n\nNote: I disallowed setting 'out_color_matrix=auto', because this does\nnot do anything meaningful in the current code (just hard-codes\nAVCOL_SPC_BT470BG fallback).",
          "is_bot": false,
          "headline": "avfilter/vf_scale: simplify color matrix parsing logic",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9557043e9e23a0b7e9709fbb2b2668d00522ef",
          "body": "Alpha planes must always be full range, so complain loudly if fed\nlimited range grayscale input.",
          "is_bot": false,
          "headline": "avfilter/vf_alphamerge: warn if input not full range",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7284f24105c5f37aa8e6262e3ccc7b4ed157095",
          "body": "Alpha planes are explicitly full range, even for limited range YUVA\nformats. Mark them as such.",
          "is_bot": false,
          "headline": "avfilter/vf_extractplanes: tag alpha plane as full range",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "736284e7b98cebadbc5b248f1080950c207bb5a2",
          "body": "The documentation states that invalid entries default to SWS_CS_DEFAULT.\nA value of 0 is not a valid SWS_CS_*, yet the code incorrectly\nhard-codes it to BT.709 coefficients instead of SWS_CS_DEFAULT.",
          "is_bot": false,
          "headline": "swscale/yuv2rgb: fix sws_getCoefficients for colorspace=0",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d043e5c54c3f8e98be1a4bc1bcb76407af0e8ac7",
          "body": "This was a complete hack seemingly designed to work around a different\nbug, which was fixed in the previous commit. As such, there is no more\nreason not to do this, as it simply breaks changing color range in\nsws_setColorspaceDetails for no reason.",
          "is_bot": false,
          "headline": "swscale: don't omit ff_sws_init_range_convert for high-bit",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cedf589c09c567b72bf4c1a58db53d94622567e1",
          "body": "More commonly, this fixes the case of sws_setColorspaceDetails after\nsws_getContext, since the latter implies sws_init_context.\n\nThe problem here is that sws_init_context sets up the range conversion\nand fast path tables based on the values of srcRange/dstRange at init\ntime. This may result in locki\n[…]\n reason\nabout.\n\nReword the av_log message to make it clear that this special converter\nis not necessarily used, depending on whether or not there is range\nconversion or YUV matrix conversion going on.",
          "is_bot": false,
          "headline": "swscale: fix sws_setColorspaceDetails after sws_init_context",
          "author_name": "Niklas Haas",
          "author_login": "haasn",
          "committed_at": "2023-11-09T11:53:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acf63d5350adeae551d412db699f8ca03f7e76b9",
          "body": null,
          "is_bot": false,
          "headline": "lavu/log: do not assume AVClass.item_name is always set",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-09T10:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26ebd96371d8d32ea5c227e0b97af5bbd847332f",
          "body": null,
          "is_bot": false,
          "headline": "fftools/ffmpeg_filter: return an error on ofilter_alloc() failure",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-09T10:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5db07311a073a7ce7f2ea72bd80049403f3f7589",
          "body": null,
          "is_bot": false,
          "headline": "fftools/ffmpeg_filter: fail on ifilter_alloc() failure",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-09T10:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed0a50923a8fb36ff6535f5a87bfede41f6fac0e",
          "body": null,
          "is_bot": false,
          "headline": "fftools/cmdutils: only set array size after allocation succeeded",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-09T10:25:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e900a559c25251398e6d0e0268ef836771fbec06",
          "body": "Adds another test that uses the start_duration and stop_duration\noptions instead of start and stop.\n\nSigned-off-by: Anton Khirnov <anton@khirnov.net>",
          "is_bot": false,
          "headline": "fate: enhance tpad filter test",
          "author_name": "Marvin Scholz",
          "author_login": "ePirat",
          "committed_at": "2023-11-09T10:11:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6667741029bce9a79b48caedf24d6cb69c5ead7d",
          "body": "The check if drawing needs to be initialized and supported formats\nshould be drawable ones was flawed, as pad_stop/pad_start is only\npopulated from stop_duration/start_duration after these checks.\n\nTo fix that, check the _duration variants as well and for better\nreadability and maintainability break the check out into its own\nhelper.\n\nFixes a regression from 86b252ea9dee18006910e30646ad1067f2d1323f\nFix #10621\n\nSigned-off-by: Anton Khirnov <anton@khirnov.net>",
          "is_bot": false,
          "headline": "avfilter/vf_tpad: fix check for drawing initialization",
          "author_name": "Marvin Scholz",
          "author_login": "ePirat",
          "committed_at": "2023-11-09T10:11:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99fcdee5e80db8a2a8ff1ea9b66a9b74d8f96f67",
          "body": "We calculated offsets as pairs, but addressed them in the shader\nas single float values, while reading them as ivec2s.\n\nAlso removes unused code (was provisionally added if cooperative matrices\ncould be used, but that turned out to be impossible).",
          "is_bot": false,
          "headline": "nlmeans_vulkan: fix offsets calculation and various stride issues",
          "author_name": "Lynne",
          "author_login": "cyanreg",
          "committed_at": "2023-11-09T08:14:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "854012ec59623736a12db0b5f99ca4b602fb5206",
          "body": "Rather than the VkFormatFeatureFlagBits enum\n\nSigned-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com>",
          "is_bot": false,
          "headline": "avutil/hwcontext_vulkan: get VkFormatFeatureFlagBits2",
          "author_name": "Víctor Manuel Jáquez Leal",
          "author_login": "ceyusa",
          "committed_at": "2023-11-09T08:13:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f39dee9747144106c6f4d6be9ebf9fe50491162",
          "body": "VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME is required on macOS,\nand VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR flag should\nbe set.\n\nSigned-off-by: Zhao Zhili <zhilizhao@tencent.com>",
          "is_bot": false,
          "headline": "avutil/hwcontext_vulkan: fix run on macOS",
          "author_name": "Zhao Zhili",
          "author_login": "quink-black",
          "committed_at": "2023-11-09T11:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f16900bda23414caf9ec3f9dc50db7d4caf59a8b",
          "body": "Texinfo 7.0 produces quite different HTML to Texinfo 6.8. Without\nthis change, enumerated option flags (i.e. Possible values of x\nare...) render as white text on a white background with Texinfo 7.0\nand are unreadable. This change removes a style for the selector\n`.table .table` which causes the background to turn white for these\nelements. As far as I can tell, it is not actually used anywhere in\nfiles generated by Texinfo 6.8.\n\nSigned-off-by: Frank Plowman <post@frankplowman.com>",
          "is_bot": false,
          "headline": "doc/html: fix styling issue with Texinfo 7.0",
          "author_name": "Frank Plowman",
          "author_login": "frankplow",
          "committed_at": "2023-11-08T22:54:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f01fdedb69e4accb1d1555106d8f682ff1f1ddc7",
          "body": "Resolves trac ticket #10636 (http://trac.ffmpeg.org/ticket/10636).\n\nTexinfo 7.0, released in November 2022, changed the names of various\nfunctions. Compiling docs with Texinfo 7.0 resulted in warnings and\nimproperly formatted documentation. More old names appear to have\nbeen removed in Texinfo 7.1, \n[…]\ntion before and after the patch.\n\nCC\nhttps://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1938238.html\nhttps://bugs.gentoo.org/916104\n\nSigned-off-by: Frank Plowman <post@frankplowman.com>",
          "is_bot": false,
          "headline": "doc/html: support texinfo 7.0",
          "author_name": "Frank Plowman",
          "author_login": "frankplow",
          "committed_at": "2023-11-08T22:53:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b4035d1dc57bc751c28dd8969856b269fad787e",
          "body": "By intent, and in practice, the \"active contributor\" criterion applies\nto the person authoring the commits, not the one pushing them into the\nrepository.",
          "is_bot": false,
          "headline": "doc/community: improve wording",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-08T16:01:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88f9164f97bbb4a3de539fb25a478d154176d16d",
          "body": "Cf.:\n* http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2023-October/316054.html\n* http://lists.ffmpeg.org/pipermail/ffmpeg-devel/2023-November/316618.html",
          "is_bot": false,
          "headline": "doc/community: update the rules according to voting results",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-08T16:01:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b82957a66a725568226db4746aa220375c2fbad1",
          "body": "Signed-off-by: James Almer <jamrial@gmail.com>",
          "is_bot": false,
          "headline": "avutil: bump minor version after recent commits",
          "author_name": "James Almer",
          "author_login": "jamrial",
          "committed_at": "2023-11-08T13:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04e53927ad8d4e12c2d16ce749b906147a5c2070",
          "body": "Mapping to ITU-R BS.2051-3 \"Sound System G\" and ITU-R BS.1196-8 \"Channel\nConfiguration 20\".\n\nSigned-off-by: James Almer <jamrial@gmail.com>",
          "is_bot": false,
          "headline": "avutil/channel_layout: add a 9.1.4 channel layout",
          "author_name": "James Almer",
          "author_login": "jamrial",
          "committed_at": "2023-11-08T13:09:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4169760b0d535a77b607acf8c8934864252a4f5",
          "body": "Mapping to ITU-R BS.2051-3 \"Sound System F\" and ITU-R BS.1196-8 \"Channel\nConfiguration 15\".\n\nSigned-off-by: James Almer <jamrial@gmail.com>",
          "is_bot": false,
          "headline": "avutil/channel_layout: add a 7.2.3 channel layout",
          "author_name": "James Almer",
          "author_login": "jamrial",
          "committed_at": "2023-11-08T13:09:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed8ddf0bd3b188a08ae0b4e21235f7e3e6ce501b",
          "body": "When operating on large blocks of data it's common to repeatedly use\nan instruction on multiple registers. Using the REPX macro makes it\neasy to quickly write dense code to achieve this without having to\nexplicitly duplicate the same instruction over and over.\n\nFor example,\n\n    REPX {paddw x, m4}, \n[…]\nm x264:\nhttps://code.videolan.org/videolan/x264/-/commit/6d10612ab0007f8f60dd2399182efd696da3ffe4\n\nSigned-off-by: Frank Plowman <post@frankplowman.com>\nSigned-off-by: Anton Khirnov <anton@khirnov.net>",
          "is_bot": false,
          "headline": "x86inc: Add REPX macro to repeat instructions/operations",
          "author_name": "Henrik Gramner",
          "author_login": "Gramner",
          "committed_at": "2023-11-08T12:49:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a2ca4bf7a3f8ba566283b48f0b8558d8c221e41",
          "body": "Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>",
          "is_bot": false,
          "headline": "MAINTAINERS: add myself as a mediacodec and videotoolbox maintainer",
          "author_name": "Zhao Zhili",
          "author_login": "quink-black",
          "committed_at": "2023-11-08T08:15:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10869cd849504f0792770722be52884644c54fcf",
          "body": "Partially fixes ticket #798\n\nReviewed-by: James Almer <jamrial@gmail.com>\nReviewed-by: Michael Niedermayer <michael@niedermayer.cc>\nReviewed-by: Paul B Mahol <onemda@gmail.com>\nSigned-off-by: Peter Ross <pross@xvid.org>",
          "is_bot": false,
          "headline": "avcodec: LEAD MCMP decoder",
          "author_name": "Peter Ross",
          "author_login": "rouseabout",
          "committed_at": "2023-11-08T06:37:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f084e9b0beca71129f36d8ae58e027adddf37fa1",
          "body": "Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>",
          "is_bot": false,
          "headline": "avdevice/android_camera: fix build failure due to typo",
          "author_name": "Zhao Zhili",
          "author_login": "quink-black",
          "committed_at": "2023-11-07T03:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adc87a5f7c99c89364b89e51d7c42fcb36cf15b0",
          "body": "This uses a more traditional approach allowing up processing of up to\nperiod minus two elements per iteration. This also allows the algorithm\nto work for all and any vector length.\n\nAs the T-Head C908 device under test can load 16 elements loop, there is\nunsurprisingly a little performance drop when\n[…]\nr:\npostfilter_15_c:         20189.5\npostfilter_15_rvv_f32:    7057.2\npostfilter_512_c:        20189.5\npostfilter_512_rvv_f32:   5667.2\npostfilter_1022_c:       20192.7\npostfilter_1022_rvv_f32:  5667.2",
          "is_bot": false,
          "headline": "lavc/opusdsp: rewrite R-V V postfilter",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-06T20:09:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02594c8c011ca2cdc20334e9bb812ec8f6f37cf3",
          "body": "As in the aligned case, we can use VLSE64.V, though the way of doing so\ngets more convoluted, so the performance gains are more modest:\n\nget_pixels_unaligned_c:       126.7\nget_pixels_unaligned_rvv_i32: 145.5 (before)\nget_pixels_unaligned_rvv_i64:  62.2 (after)\n\nFor the reference, those are the aligned benchmarks (unchanged) on the\nsame T-Head C908 hardware:\n\nget_pixels_c:                 126.7\nget_pixels_rvi:                85.7\nget_pixels_rvv_i64:            33.2",
          "is_bot": false,
          "headline": "lavc/pixblockdsp: rework R-V V get_pixels_unaligned",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-06T17:42:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f68ad5d2de40e42b57b9f44ec69d9cbc0f709460",
          "body": "hf_g_filt_c:      1552.5\nhf_g_filt_rvv_f32: 679.5",
          "is_bot": false,
          "headline": "lavc/sbrdsp: R-V V sbr_hf_g_filt",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-06T17:42:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44a0148fadc97798acf6c93016a14e7c956f0825",
          "body": "Makes better results in final output if multiple filters are cascaded at once.",
          "is_bot": false,
          "headline": "avfilter/af_adynamicequalizer: do detection of threshold first",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-05T15:00:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "799fad18280382e67b2a7d1834a7aed7e5f159d5",
          "body": null,
          "is_bot": false,
          "headline": "avfilter/af_adynamicequalizer: always start filtering from unit gain",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-05T15:00:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9fdaa2ca92f1d111c5797e202ea48e6c3eb914f",
          "body": "Explicitly state what the implications of this are.",
          "is_bot": false,
          "headline": "configure: warn when threading is disabled",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-05T10:30:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad3df6bf35825fe94a673e2be515067acd61769c",
          "body": "Partially fixes #10617",
          "is_bot": false,
          "headline": "lavf/smacker: export sample_aspect_ratio",
          "author_name": "Anton Khirnov",
          "author_login": "elenril",
          "committed_at": "2023-11-05T10:30:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a7a85137e593f5164027da7ce53219829253f65",
          "body": "Without this flag, timestamps were embedded into the final\nbinary if CUDA was enabled.\n\nSigned-off-by: Rob Hall <robxnanocode@outlook.com>\nSigned-off-by: Anton Khirnov <anton@khirnov.net>",
          "is_bot": false,
          "headline": "ffbuild: Add gzip -n flag to fix reproducible builds",
          "author_name": "Rob Hall",
          "author_login": "robxnano",
          "committed_at": "2023-11-05T10:30:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd1712b6fb8b7acc04ccaa7c02b9a5c9f233cfb3",
          "body": "More user-friendly and self-explanatory what certain mode does.",
          "is_bot": false,
          "headline": "avfilter/af_adynamicequalizer: merge direction option with mode option",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-04T14:39:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43226efc2188ec2cd16d3b9c4e189bcde1a2a0e5",
          "body": null,
          "is_bot": false,
          "headline": "avfilter/af_adynamicequalizer: add new structure to hold filtering state",
          "author_name": "Paul B Mahol",
          "author_login": "richardpl",
          "committed_at": "2023-11-04T14:39:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f890fbfd9014843c51408c8f7ab3ba4aef7d354",
          "body": "Fixes: VUI extension leak\nFixes: 63004/clusterfuzz-testcase-minimized-ffmpeg_BSF_VVC_METADATA_fuzzer-4928832253329408\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/cbs_h2645: Fix leak of SPS VUI extension data",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:27:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de4846dd184bd5a7a66d8fec2e81922188906b17",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/deshake: Merge header into its only user",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fdaeec41bef822df6a0c6294878a723300035b6",
          "body": "Redundant since ea043cc53ed3506775ec6239ed5f8a20718b1098\n(which made 16x16 no longer use MMX).\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_deshake: Remove unnecessary emms_c",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "392ab35db1300141220e2e772e2f785c5bae8784",
          "body": "Unnecessary now that the pixelutils API abides by the ABI.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_mpdecimate: Remove emms_c",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b85ca5317f28a73eadf10d604d2a7421b84bed8",
          "body": "We currently mostly do not empty the MMX state in our MMX\nDSP functions; instead we only do so before code that might\nbe using x87 code. This is a violation of the System V i386 ABI\n(and maybe of other ABIs, too):\n\"The CPU shall be in x87 mode upon entry to a function. Therefore,\nevery function that\n[…]\n fn(src1, 8, src2, 8);\n    av_assert0_fpu();\n\n[1]: https://raw.githubusercontent.com/wiki/hjl-tools/x86-psABI/intel386-psABI-1.1.pdf\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avutil/x86/pixelutils: Empty MMX state in ff_pixelutils_sad_8x8_mmxext",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:26:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8661b5e8f9e63d2775978f2aa3ee6fae4d515c53",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_format: Deduplicate inputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c32c1a18b9bbc342521853aca320e08d1c871fb3",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vsrc_testsrc: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "748c168f8eabc1800c6096d521a3a32954b7b50f",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_xmedian: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93abb9b560e8398191383fb439810f775348e32c",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_hsvkey: Deduplicate inputs and outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50d3c5bd8ca5a1181c1a57dbb8006c9aa87d3c4d",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_convolve: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e557d89ac109e4c6353481803f2feeb3313fc6ce",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_chromakey: Deduplicate inputs and outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e2c28119ff179f9acd33b9b226f17ba625aa0af",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_blend: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d33a310df4efe717dee4cc1eede7adcfc2547d1",
          "body": "Also avoid using the avfilter-prefix for static objects.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/vf_aspect: Deduplicate inputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a40f833bac72866dfc48de56d31432e27e7075dd",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/f_graphmonitor: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a02670ded71ef718799799d9f92b65c02852bd40",
          "body": "Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avfilter/f_drawgraph: Deduplicate outputs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5935423e1e8bf02362590ee5843f0a869872af9e",
          "body": "swb_offset_960_48 and swb_offset_960_32 coincide.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/aactab: Deduplicate swb_offset_960 tabs",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-04T00:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fb9d946883ba8a3e21a9e756aa27349e6e22cef",
          "body": "Fixes: Timeout\nFixes: 63661/clusterfuzz-testcase-minimized-ffmpeg_dem_LAF_fuzzer-6615365234589696\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nReviewed-by: Sean McGovern <gseanmcg@gmail.com>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avformat/lafdec: Check for 0 parameters",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-03T21:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03a4aa9699c397f157394af3394fb065bd0a8166",
          "body": "Fixes: out of array write\nFixes: 63520/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_FLIC_fuzzer-4876198087622656\nRegression since: c7f8d42c12582b0626ea38117df6c9aea9fcf5b1 (was not posted to ffmpeg-devel)\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nReviewed-by: Sean McGovern <gseanmcg@gmail.com>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/flicvideo: consider width in copy loops",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-03T21:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0a18e884c2d24d1052147082c358cb6929e97f1",
          "body": "Reviewed-by: Sean McGovern <gseanmcg@gmail.com>\nReviewed-by: Nicolas George <george@nsup.org>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avfilter/buffersink: fix order of operation with = and <0",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-03T21:17:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9450a4a7fef5816ee893177c903f0232724c57c6",
          "body": "Reviewed-by: Sean McGovern <gseanmcg@gmail.com>\nReviewed-by: Nicolas George <george@nsup.org>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avfilter/framesync: fix order of operation with = and <0",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-03T21:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "155f0c8ef7430e1f963c811e6bd4e2d85ee9f81b",
          "body": "Addresses the issue reported in ticket #4609.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avformat/webpenc: Check seeks",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-03T13:47:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e920a8480185ff9112b2369a8f3418fa5d0ce5f0",
          "body": "Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>",
          "is_bot": false,
          "headline": "mailmap: remap my email accounts",
          "author_name": "Zhao Zhili",
          "author_login": "quink-black",
          "committed_at": "2023-11-03T12:57:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dd49c8b52c3f6f5a486764fce42ec5d5fac8d16",
          "body": "This is cleaner, but it is also a workaround for when\nthe header exists, but cannot be compiled.\nThis will happen when the compiler has no inline asm\nsupport.\nPossibly the configure check should be improved as well.",
          "is_bot": false,
          "headline": "libavutil/log.c: only include valgrind header when used.",
          "author_name": "Reimar Döffinger",
          "author_login": "rdoeffinger",
          "committed_at": "2023-11-02T20:03:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ea184fc39b48096713dbdf9c9b39de3a976d6eb",
          "body": "Fixes compilation with tcc, which does not have aarch64\ninline asm support.",
          "is_bot": false,
          "headline": "libavutil/aarch64/cpu.c: HWCAPS requires inline asm support.",
          "author_name": "Reimar Döffinger",
          "author_login": "rdoeffinger",
          "committed_at": "2023-11-02T20:03:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a31992634f0d3b1ab2d2a6b89440dd0120af5b97",
          "body": "The test can currently pass when _Pragma is not supported, since\n_Pragma might be treated as a implicitly declared function.\nThis happens e.g. with tinycc.\nExtending the check to 2 pragmas both matches the actual use\nbetter and avoids this misdetection.",
          "is_bot": false,
          "headline": "configure: fix _Pragma check.",
          "author_name": "Reimar Döffinger",
          "author_login": "rdoeffinger",
          "committed_at": "2023-11-02T20:03:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02064ba3a37754183cf7e7a4c1ffd3cdf971b5dc",
          "body": "…data\n\nFixes ticket #10638 (and should also fix ticket #10482)\nby restoring the behaviour from before\n3c7dd5ed37da6d2de06c4850de5a319ca9cdd47f.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "fftools/ffmpeg_mux_init: Restrict disabling automatic copying of meta…",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-02T12:24:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dbfb52230c4993e58598386ac79b964589dc00e",
          "body": "The `-caption_encoding` option was reported as having a default value of\n'ass', whereas it's actually 'auto'.\n\nSigned-off-by: zheng qian <xqq@xqq.im>\nSigned-off-by: Gyan Doshi <ffmpeg@gyani.pro>",
          "is_bot": false,
          "headline": "doc/decoders: correctly note an option's default in libaribcaption",
          "author_name": "zheng qian",
          "author_login": "xqq",
          "committed_at": "2023-11-02T08:37:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d06fd18f8f4c6a81ef94cbb600620d83ad51269d",
          "body": "With 128-bit vectors, this is mostly pointless but also harmless.\nPerformance gains should be more noticeable with larger vector sizes.\n\nneg_odd_64_c:       76.2\nneg_odd_64_rvv_i64: 74.7",
          "is_bot": false,
          "headline": "lavc/sbrdsp: R-V V neg_odd_64",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T20:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0aba7dd0c1ee34941370997fd20049150f04a36",
          "body": "sum_square_c:       803.5\nsum_square_rvv_f32: 283.2",
          "is_bot": false,
          "headline": "lavc/sbrdsp: R-V V sum_square",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T20:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86bee424730bc0dcba0e101773e6f3c71e39bd29",
          "body": "sum64x5_c:       385.0\nsum64x5_rvv_f32: 116.0",
          "is_bot": false,
          "headline": "lavc/sbrdsp: R-V V sum64x5",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T20:53:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eba73142adc776d7fe0639d3cff23d878da0174a",
          "body": "Up until now each thread had its own buffer pool for extradata\nbuffers when using frame-threading. Each thread can have at most\nthree references to extradata and in the long run, each thread's\nbufferpool seems to fill up with three entries. But given\nthat at any given time there can be at most 2 + n\n[…]\nno references to any other frames),\nthis is wasteful. This commit therefore uses a single buffer pool\nthat is synced across threads.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/vp9: Join extradata buffer pools",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:16:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0c44f63b0282e2e830d5bf479016984cff69221a",
          "body": "To do this, make FFRefStructPool itself refcounted according\nto the RefStruct API.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/refstruct: Allow to share pools",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:15:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92abc7266b5a7139d85699cce2b2c94c1e4ed2ed",
          "body": "Up until now, the VAAPI encoder uses fake data with the\nAVBuffer-API: The data pointer does not point to real memory,\nbut is instead just a VABufferID converted to a pointer.\nThis has probably been copied from the VAAPI-hwcontext-API\n(which presumably does it to avoid allocations).\n\nThis commit chan\n[…]\nes this without causing additional allocations\nby switching to the RefStruct-pool API. This also fixes an\nunchecked av_buffer_ref().\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/vaapi_encode: Use RefStruct pool API, stop abusing AVBuffer API",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:14:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c0350f57ef4c5f7ff4ec56865029e30cbf2877e",
          "body": "It avoids allocations and corresponding error checks.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/vp9: Use RefStruct-pool API for extradata",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:14:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "090d9956fd092023e63f61a37bde36bba55d0258",
          "body": "This is in preparation for the following commit.\n\nReviewed-by: Anton Khirnov <anton@khirnov.net>\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/refstruct: Allow to always return zeroed pool entries",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:13:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e01e30ede1d0a06df90c0c7816cb51941bcd3bc9",
          "body": "It involves less allocations, in particular no allocations\nafter the entry has been created. Therefore creating a new\nreference from an existing one can't fail and therefore\nneed not be checked. It also avoids indirections and casts.\n\nAlso note that nvdec_decoder_frame_init() (the callback\nto initia\n[…]\n nvdec (like\nmost other hwaccels) not being run in a truely frame-threaded\nway.\n\nTested-by: Timo Rothenpieler <timo@rothenpieler.org>\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/nvdec: Use RefStruct-pool API for decoder pool",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:13:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd2e65871c6fdc79cba5e3eef877a81ec83d57c6",
          "body": "It involves less allocations and therefore has the nice property\nthat deriving a reference from a reference can't fail,\nsimplifying hevc_ref_frame().\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/hevcdec: Use RefStruct-pool API instead of AVBufferPool API",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:10:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "736b510fcc386df89a403a3ed11c4d1dec599cd1",
          "body": "It involves less allocations and therefore has the nice property\nthat deriving a reference from a reference can't fail.\nThis allows for considerable simplifications in\nff_h264_(ref|replace)_picture().\nSwitching to the RefStruct API also allows to make H264Picture\nsmaller, because some AVBufferRef* pointers could be removed\nwithout replacement.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/h264dec: Use RefStruct-pool API instead of AVBufferPool API",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:07:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26c0a7321fdef730050156fcef0b986ac4373b6c",
          "body": "Very similar to the AVBufferPool API, but with some differences:\n1. Reusing an already existing entry does not incur an allocation\nat all any more (the AVBufferPool API needs to allocate an AVBufferRef).\n2. The tasks done while holding the lock are smaller; e.g.\nallocating new entries is now perform\n[…]\nuct API; an FFRefStructPool\nwould then be freed via ff_refstruct_unref().)\n\nReviewed-by: Michael Niedermayer <michael@niedermayer.cc>\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/refstruct: Add RefStruct pool API",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-11-01T19:07:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92bcc6703acf346f0a5257de2410400a2e81a754",
          "body": "In the aligned case, the existing RVI assembler is actually much\nfaster. In the unaligned case, there is nothing much to gain over C.",
          "is_bot": false,
          "headline": "lavc/pixblockdsp: remove R-V V get_pixels_16",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T17:27:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28840cf499ad0149d690385d8d36666efe15aa95",
          "body": "jpeg2000_rct_int_c:       2592.2\njpeg2000_rct_int_rvv_i32: 1154.2",
          "is_bot": false,
          "headline": "lavc/jpeg2000dsp: R-V V rct_int",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T16:52:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73dea2bb917456e197cbb57b31275b6231e07acc",
          "body": "jpeg2000_ict_float_c:       3112.2\njpeg2000_ict_float_rvv_f32: 1225.0",
          "is_bot": false,
          "headline": "lavc/jpeg2000dsp: R-V V ict_float",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T16:52:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2a441a3bed281a74b7fced77ef974897e407e32",
          "body": "This is so that they can be loaded from assembler, rather than\nduplicated.",
          "is_bot": false,
          "headline": "lavc/jpeg2000dsp: make coefficients extern",
          "author_name": "Rémi Denis-Courmont",
          "author_login": null,
          "committed_at": "2023-11-01T16:52:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5259f326bcaf933a25df64aa49417c25990f7d3",
          "body": "This makes the code more testable as uninitialized fields are 0\nand not random values from the last call\n\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/vlc: Pass VLC_MULTI_ELEM directly not by pointer",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8516609edde98391017fb145b4f492c01b360a03",
          "body": "Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/vlc: Replace mysterious max computation code in multi vlc",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "356b1ba765623ec1640a366e587232f1631800f8",
          "body": "These entries do not correspond to VLC symbols that can be used\nthey do corrupt various variables like min/max bits\n\nThis also no longer assumes that there is a single non subtable\nentry\nProbably fixes some infinite loops too\n\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/vlc: Skip subtable entries in multi VLC",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2f2bf82c1b3987e2d1a75cc79c4b58d286a2291",
          "body": "Fixes: Timeout\nFixes: 63362/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_CSCD_fuzzer-4694620065628160\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "tools/target_dec_fuzzer: Adjust threshold for CSCD",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2817efbba331ac1d3a39fbee78b480008ce20a93",
          "body": "Fixes: shift exponent 32 is too large for 32-bit type 'int'\nFixes: 63151/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_HEVC_fuzzer-5067531154751488\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/dovi_rpu: Use 64 bit in get_us/se_coeff()",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2def61778777e998e2ac538f56b8e6779b0ca8c1",
          "body": "Fixes: signed integer overflow: 1900031961 + 553590817 cannot be represented in type 'int'\nFixes: 63061/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_APE_fuzzer-5166188298371072\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/apedec: Fix integer overflow in predictor_decode_stereo_3950()",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98c2711b58ce65eae02cb2ece3a664e1119fd8fe",
          "body": "Fixes: Assertion failure in mov_read_iloc( in mov_read_iloc())\nFixes: 62866/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5282997370486784\n\nFound-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avformat/mov: Check that is_still_picture_avif has no trak based streams",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68cc1744db828e929b74f96478c18f1d226510be",
          "body": "The check is based on not infinite looping. It is likely\na more strict check can be done\n\nFixes: Infinite loop\nFixes: 62473/clusterfuzz-testcase-minimized-ffmpeg_BSF_EVC_FRAME_MERGE_fuzzer-5719883750703104\nFixes: 62765/clusterfuzz-testcase-minimized-ffmpeg_dem_EVC_fuzzer-6448531252314112\nFixes: 6337\n[…]\nree/master/projects/ffmpeg\nReviewed-by: \"Dawid Kozinski/Multimedia (PLT) /SRPOL/Staff Engineer/Samsung Electronics\" <d.kozinski@samsung.com>\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/evc_parse: Check tid",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d35eecd24fb62a4060ef89dfdd1c45f5549fb71d",
          "body": "The use of float based functions is both unneeded and wrong due to unpredictable rounding\n\nSigned-off-by: Michael Niedermayer <michael@niedermayer.cc>",
          "is_bot": false,
          "headline": "avcodec/evc_parse: remove pow() and log2()",
          "author_name": "Michael Niedermayer",
          "author_login": "michaelni",
          "committed_at": "2023-11-01T15:40:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2687a3b691d98ffa9ce356279ed37e9e18af9a9",
          "body": "Everything besides VLC.table is basically write-only\nand even VLC.table can be removed by accessing the\nunderlying table directly.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/wmavoice: Avoid unnecessary VLC structure",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-10-31T20:44:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5615f9dab4e7f911ce8799c34c0ca425b0e2a090",
          "body": "For all VLCs here, the number of bits of the VLC is write-only,\nbecause it is hardcoded at the call site. Therefore one can replace\nthese VLC structures with the only thing that is actually used:\nThe pointer to the VLCElem table. And in most cases one can even\navoid this.\n\nSigned-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>",
          "is_bot": false,
          "headline": "avcodec/wmaprodec: Avoid superfluous VLC structures",
          "author_name": "Andreas Rheinhardt",
          "author_login": "mkver",
          "committed_at": "2023-10-31T20:44:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 0,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 31,
      "active_weeks_last_year": 0,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 2,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2022-10-28",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 2,
        "total_forks": 2
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "doc/Makefile",
        "doc/examples/Makefile",
        "fftools/Makefile",
        "libavcodec/Makefile",
        "libavcodec/aarch64/Makefile",
        "libavcodec/alpha/Makefile",
        "libavcodec/arm/Makefile",
        "libavcodec/loongarch/Makefile",
        "libavcodec/mips/Makefile",
        "libavcodec/neon/Makefile",
        "libavcodec/ppc/Makefile",
        "libavcodec/riscv/Makefile",
        "libavcodec/x86/Makefile",
        "libavdevice/Makefile",
        "libavfilter/Makefile",
        "libavfilter/aarch64/Makefile",
        "libavfilter/dnn/Makefile",
        "libavfilter/x86/Makefile",
        "libavformat/Makefile",
        "libavutil/Makefile",
        "libavutil/aarch64/Makefile",
        "libavutil/arm/Makefile",
        "libavutil/loongarch/Makefile",
        "libavutil/mips/Makefile",
        "libavutil/ppc/Makefile",
        "libavutil/riscv/Makefile",
        "libavutil/x86/Makefile",
        "libpostproc/Makefile",
        "libswresample/Makefile",
        "libswresample/aarch64/Makefile",
        "libswresample/arm/Makefile",
        "libswresample/x86/Makefile",
        "libswscale/Makefile",
        "libswscale/aarch64/Makefile",
        "libswscale/arm/Makefile",
        "libswscale/loongarch/Makefile",
        "libswscale/ppc/Makefile",
        "libswscale/riscv/Makefile",
        "libswscale/x86/Makefile",
        "tests/Makefile",
        "tests/api/Makefile",
        "tests/checkasm/Makefile",
        "tools/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 920659,
      "source_files_sampled": 4170,
      "oversized_source_files": 172,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [],
      "dependencies": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 5,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "michaelni",
          "commits": 28887,
          "avatar_url": "https://avatars.githubusercontent.com/u/729390?v=4"
        },
        {
          "type": "User",
          "login": "richardpl",
          "commits": 5744,
          "avatar_url": "https://avatars.githubusercontent.com/u/469155?v=4"
        },
        {
          "type": "User",
          "login": "mkver",
          "commits": 5201,
          "avatar_url": "https://avatars.githubusercontent.com/u/18448094?v=4"
        },
        {
          "type": "User",
          "login": "elenril",
          "commits": 5044,
          "avatar_url": "https://avatars.githubusercontent.com/u/1765950?v=4"
        },
        {
          "type": "User",
          "login": "DonDiego",
          "commits": 4681,
          "avatar_url": "https://avatars.githubusercontent.com/u/3358278?v=4"
        },
        {
          "type": "User",
          "login": "jamrial",
          "commits": 3708,
          "avatar_url": "https://avatars.githubusercontent.com/u/2442845?v=4"
        },
        {
          "type": "User",
          "login": "mansr",
          "commits": 2794,
          "avatar_url": "https://avatars.githubusercontent.com/u/322231?v=4"
        },
        {
          "type": "User",
          "login": "ubitux",
          "commits": 2711,
          "avatar_url": "https://avatars.githubusercontent.com/u/34467?v=4"
        },
        {
          "type": "User",
          "login": "mstorsjo",
          "commits": 2431,
          "avatar_url": "https://avatars.githubusercontent.com/u/69727?v=4"
        },
        {
          "type": "User",
          "login": "cehoyos",
          "commits": 2165,
          "avatar_url": "https://avatars.githubusercontent.com/u/3754917?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.314
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 18 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "32 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fa4c2884dd568d4fc0d657d3622437aebc3563b3",
        "ran_at": "2026-07-26T02:59:59Z",
        "aggregate_score": 2.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2022-10-28T19:33:37Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Servarr/FFmpeg",
    "host": "github.com",
    "name": "FFmpeg",
    "owner": "Servarr"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 33,
      "inputs": {
        "security": 25,
        "vitality": 11,
        "community": 9,
        "governance": 76,
        "engineering": 34
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "critical",
        "name": "Vitality",
        "value": 11,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "commits_last_year": 0,
              "human_commit_share": 1,
              "days_since_last_push": 31,
              "active_weeks_last_year": 0
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 31 days ago",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 31
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "0/52 weeks with commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "0 commits in the last year",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "dormant",
              "guards": [
                "no_open_demand"
              ],
              "signals": [
                "scorecard_unmaintained"
              ],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": 1366,
              "days_since_last_human_commit": 987,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 987 days, with nothing left unanswered; held at dormant by nothing open to answer",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_quiet",
                    "params": {
                      "days": 987
                    }
                  },
                  {
                    "code": "abandonment_guarded",
                    "params": {
                      "guards": "nothing open to answer"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 9,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 2,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "2 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 76,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "bus_factor": 5,
              "contributors_sampled": 100,
              "top_contributor_share": 0.314
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "5 contributor(s) cover half of all commits",
                "points": 45.9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 31% of commits",
                "points": 15.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 31
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 18 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "followers": 207,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Servarr",
              "public_repos": 28,
              "account_age_days": 2464
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "207 followers of Servarr",
                "points": 16.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 207,
                      "login": "Servarr"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "28 public repos, account ~6 yr old",
                "points": 22.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 28
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 34,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://ffmpeg.org/",
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://ffmpeg.org/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 25,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 18 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "32 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 54,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.67,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "67 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 35.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 67,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "doc/Makefile",
                "doc/examples/Makefile",
                "fftools/Makefile",
                "libavcodec/Makefile",
                "libavcodec/aarch64/Makefile",
                "libavcodec/alpha/Makefile",
                "libavcodec/arm/Makefile",
                "libavcodec/loongarch/Makefile",
                "libavcodec/mips/Makefile",
                "libavcodec/neon/Makefile",
                "libavcodec/ppc/Makefile",
                "libavcodec/riscv/Makefile",
                "libavcodec/x86/Makefile",
                "libavdevice/Makefile",
                "libavfilter/Makefile",
                "libavfilter/aarch64/Makefile",
                "libavfilter/dnn/Makefile",
                "libavfilter/x86/Makefile",
                "libavformat/Makefile",
                "libavutil/Makefile",
                "libavutil/aarch64/Makefile",
                "libavutil/arm/Makefile",
                "libavutil/loongarch/Makefile",
                "libavutil/mips/Makefile",
                "libavutil/ppc/Makefile",
                "libavutil/riscv/Makefile",
                "libavutil/x86/Makefile",
                "libpostproc/Makefile",
                "libswresample/Makefile",
                "libswresample/aarch64/Makefile",
                "libswresample/arm/Makefile",
                "libswresample/x86/Makefile",
                "libswscale/Makefile",
                "libswscale/aarch64/Makefile",
                "libswscale/arm/Makefile",
                "libswscale/loongarch/Makefile",
                "libswscale/ppc/Makefile",
                "libswscale/riscv/Makefile",
                "libswscale/x86/Makefile",
                "tests/Makefile",
                "tests/api/Makefile",
                "tests/checkasm/Makefile",
                "tools/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, doc/Makefile, doc/examples/Makefile, fftools/Makefile, libavcodec/Makefile, libavcodec/aarch64/Makefile, libavcodec/alpha/Makefile, libavcodec/arm/Makefile, libavcodec/loongarch/Makefile, libavcodec/mips/Makefile, libavcodec/neon/Makefile, libavcodec/ppc/Makefile, libavcodec/riscv/Makefile, libavcodec/x86/Makefile, libavdevice/Makefile, libavfilter/Makefile, libavfilter/aarch64/Makefile, libavfilter/dnn/Makefile, libavfilter/x86/Makefile, libavformat/Makefile, libavutil/Makefile, libavutil/aarch64/Makefile, libavutil/arm/Makefile, libavutil/loongarch/Makefile, libavutil/mips/Makefile, libavutil/ppc/Makefile, libavutil/riscv/Makefile, libavutil/x86/Makefile, libpostproc/Makefile, libswresample/Makefile, libswresample/aarch64/Makefile, libswresample/arm/Makefile, libswresample/x86/Makefile, libswscale/Makefile, libswscale/aarch64/Makefile, libswscale/arm/Makefile, libswscale/loongarch/Makefile, libswscale/ppc/Makefile, libswscale/riscv/Makefile, libswscale/x86/Makefile, tests/Makefile, tests/api/Makefile, tests/checkasm/Makefile, tools/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, doc/Makefile, doc/examples/Makefile, fftools/Makefile, libavcodec/Makefile, libavcodec/aarch64/Makefile, libavcodec/alpha/Makefile, libavcodec/arm/Makefile, libavcodec/loongarch/Makefile, libavcodec/mips/Makefile, libavcodec/neon/Makefile, libavcodec/ppc/Makefile, libavcodec/riscv/Makefile, libavcodec/x86/Makefile, libavdevice/Makefile, libavfilter/Makefile, libavfilter/aarch64/Makefile, libavfilter/dnn/Makefile, libavfilter/x86/Makefile, libavformat/Makefile, libavutil/Makefile, libavutil/aarch64/Makefile, libavutil/arm/Makefile, libavutil/loongarch/Makefile, libavutil/mips/Makefile, libavutil/ppc/Makefile, libavutil/riscv/Makefile, libavutil/x86/Makefile, libpostproc/Makefile, libswresample/Makefile, libswresample/aarch64/Makefile, libswresample/arm/Makefile, libswresample/x86/Makefile, libswscale/Makefile, libswscale/aarch64/Makefile, libswscale/arm/Makefile, libswscale/loongarch/Makefile, libswscale/ppc/Makefile, libswscale/riscv/Makefile, libswscale/x86/Makefile, tests/Makefile, tests/api/Makefile, tests/checkasm/Makefile, tools/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "C (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "C",
              "largest_source_bytes": 920659,
              "source_files_sampled": 4170,
              "oversized_source_files": 172
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "172/4170 source files over 60KB",
                "points": 52.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 4170,
                      "oversized": 172
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Community profile unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T03:00:22.229391Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/s/Servarr/FFmpeg.svg",
  "full_name": "Servarr/FFmpeg",
  "license_state": "custom",
  "license_spdx": null
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.