Skip to main content
Participant
May 20, 2025
Answered

Mon extension Premiere Pro ne s'affiche pas dans la liste – besoin d’aide pour l’intégration

  • May 20, 2025
  • 2 replies
  • 431 views

Bonjour,

Je suis en train de développer une extension (CEP) pour Premiere Pro (version 25.2.3 sur Windows 11 Home) et je rencontre un problème bloquant : mon extension ne s’affiche pas dans la liste des extensions dans Premiere Pro.

Objectif de l’extension

Mon but est de créer une extension nommée Randomizer qui, après avoir mis mes rushs sur la timeline, me permettrait de :

  • Mélanger de manière aléatoire tous les éléments (clips) présents sur la séquence.

  • Coller automatiquement tous les clips mélangés contre le bord gauche de la timeline.

En gros, je fais mes cuts, et un simple clic sur le bouton de l'extension déclenche le shuffle complet des éléments présents.

Structure du projet

Mon dossier principal s'appelle Randomizer Extension, et il contient 3 sous-dossiers :

Randomizer Extension/
├── client/
│       ├── index.html
│       └── index.js
├── csxs/
│       └── manifest.xml
└── src/
          └── main.js

Emplacements testés

J’ai placé le dossier Randomizer Extension à deux endroits pour tester son chargement :

ici : C:\Program Files (x86)\Common Files\Adobe\CEP\extensions

et ici : C:\Users\Admin\AppData\Roaming\Adobe\CEP\extensions

et pourtant il n'apparait toujours pas sur premiere pro


Dans le dossier standard des extensions CEP

Le problème :
Mon extension n’apparaît pas du tout dans Premiere Pro, malgré la structure respectée et les bons emplacements utilisés. Mon objectif principal à ce stade est simplement qu’elle apparaisse dans la liste des extensions, avec un bouton cliquable qui, plus tard, déclenchera le mélange des clips.

index.html : 

<!DOCTYPE html>
<html>
<head>
    <title>Randomize Extension</title>
    <script src="index.js"></script>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; padding: 20px; }
        button { padding: 10px 20px; font-size: 16px; cursor: pointer; }
        button:disabled { background-color: #ccc; cursor: not-allowed; }
        #status { margin-top: 10px; color: #555; }
    </style>
</head>
<body>
    <h2>Randomize Clips</h2>
    <button id="randomizeBtn" onclick="randomizeClips()">Randomize</button>
    <p id="status"></p>
</body>
</html>

Index.js : 

function randomizeClips() {
    alert("Bouton cliqué !");
    try {
        var button = document.getElementById('randomizeBtn');
        var status = document.getElementById('status');
        button.disabled = true;
        status.innerText = "Mélange en cours...";

        if (typeof CSInterface === 'undefined') {
            throw new Error("CSInterface n'est pas défini. Problème de chargement.");
        }

        var csInterface = new CSInterface();
        alert("CSInterface initialisé !");

        csInterface.addEventListener("com.adobe.csxs.events.ScriptErrorEvent", function(event) {
            status.innerText = "Erreur lors de l'exécution du script : " + event.data;
            alert("Erreur lors de l'exécution du script : " + event.data);
            button.disabled = false;
        });

        // Test simple pour vérifier si CSInterface peut exécuter un script
        csInterface.evalScript('alert("Test direct via CSInterface !")', function(result) {
            alert("Résultat du test direct : " + result);
        });

        csInterface.evalScript('randomizeTimelineClips()', function(result) {
            alert("Résultat de evalScript : " + result);
            button.disabled = false;
            if (result) {
                status.innerText = "Résultat : " + result;
            } else {
                status.innerText = "Mélange terminé.";
            }
        });
    } catch (error) {
        document.getElementById('status').innerText = "Erreur Javascript &colon; " + error.message;
        alert("Erreur Javascript &colon; " + error.message);
        document.getElementById('randomizeBtn').disabled = false;
    }
}

manifest.xml : 

<?xml version="1.0" encoding="UTF-8"?>
<ExtensionManifest Version="5.0" ExtensionBundleId="com.example.randomizeExtension" ExtensionBundleVersion="1.0.0"
    ExtensionBundleName="Randomize Extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ExtensionList>
        <Extension Id="com.example.randomizeExtension.panel" Version="1.0.0"/>
    </ExtensionList>
    <ExecutionEnvironment>
        <HostList>
            <Host Name="PPRO" Version="[15.0,99.9]"/>
        </HostList>
        <LocaleList>
            <Locale Code="All"/>
        </LocaleList>
        <RequiredRuntimeList>
            <RequiredRuntime Name="CSXS" Version="5.0"/>
        </RequiredRuntimeList>
    </ExecutionEnvironment>
    <DispatchInfoList>
        <Extension Id="com.example.randomizeExtension.panel">
            <DispatchInfo>
                <Resources>
                    <MainPath>client/index.html</MainPath>
                    <ScriptPath>src/main.jsx</ScriptPath>
                </Resources>
                <UI>
                    <Type>Panel</Type>
                    <Menu>Randomize Extension</Menu>
                    <Geometry>
                        <MinWidth>200</MinWidth>
                        <MinHeight>200</MinHeight>
                    </Geometry>
                </UI>
            </DispatchInfo>
        </Extension>
    </DispatchInfoList>
</ExtensionManifest>

Main.jsx (Pour tester) : 

function randomizeTimelineClips() {
    $.writeln("Test minimal - Début");
    alert("Test minimal - Fonction appelée !");
    return "Test réussi";
}

Mais je veux que Main.jsx fasse ceci : 

function randomizeTimelineClips() {
    $.writeln("Début de randomizeTimelineClips - TEST");
    alert("Fonction randomizeTimelineClips appelée !");

    try {
        $.writeln("Vérification de app...");
        if (!app) {
            throw new Error("Erreur : app n'est pas défini.");
        }

        $.writeln("Récupération du projet...");
        var project = app.project;
        $.writeln("Projet récupéré : " + (project ? "OK" : "Échec"));

        $.writeln("Récupération de la séquence active...");
        var activeSeq = project.activeSequence;
        $.writeln("Séquence active : " + (activeSeq ? activeSeq.name : "Aucune"));
        if (!activeSeq) {
            $.writeln("Erreur : Aucune séquence active");
            alert("Aucune séquence active. Ouvre une séquence !");
            return "Échec : Aucune séquence active";
        }

        $.writeln("Récupération des pistes vidéo...");
        var videoTracks = activeSeq.videoTracks;
        $.writeln("Nombre de pistes vidéo : " + videoTracks.numTracks);

        var selectedClips = [];
        for (var trackIndex = 0; trackIndex < videoTracks.numTracks; trackIndex++) {
            var track = videoTracks[trackIndex];
            $.writeln("Piste " + trackIndex + " : " + track.clips.numItems + " clips");
            if (track.isLocked()) {
                $.writeln("Piste " + trackIndex + " est verrouillée, ignorez.");
                continue;
            }
            for (var clipIndex = 0; clipIndex < track.clips.numItems; clipIndex++) {
                var clip = track.clips[clipIndex];
                var isSelected = clip.isSelected();
                $.writeln("Clip " + clipIndex + " (" + clip.name + ") sélectionné ? " + isSelected);
                if (isSelected) {
                    selectedClips.push({
                        clip: clip,
                        trackIndex: trackIndex,
                        originalStart: clip.start.seconds,
                        originalDuration: clip.duration.seconds
                    });
                    $.writeln("Clip ajouté : " + clip.name);
                }
            }
        }

        if (selectedClips.length === 0) {
            $.writeln("Erreur : Aucun clip sélectionné");
            alert("Aucun clip sélectionné ! Sélectionne des clips dans la timeline.");
            return "Échec : Aucun clip sélectionné";
        }

        if (selectedClips.length < 2) {
            $.writeln("Erreur : Moins de 2 clips sélectionnés");
            alert("Sélectionne au moins 2 clips pour mélanger !");
            return "Échec : Moins de 2 clips sélectionnés";
        }

        $.writeln("Début du mélange des clips...");
        for (var i = selectedClips.length - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            
            var clipI = selectedClips[i].clip;
            var clipJ = selectedClips[j].clip;
            var tempStart = selectedClips[i].originalStart;
            var tempDuration = selectedClips[i].originalDuration;

            $.writeln("Échange entre clip " + i + " et clip " + j);
            clipI.setStart(selectedClips[j].originalStart, true);
            clipJ.setStart(tempStart, true);

            clipI.end.seconds = clipI.start.seconds + selectedClips[j].originalDuration;
            clipJ.end.seconds = clipJ.start.seconds + tempDuration;

            $.writeln("Clip " + i + " repositionné à " + clipI.start.seconds + "s");
            $.writeln("Clip " + j + " repositionné à " + clipJ.start.seconds + "s");
        }

        activeSeq.setPlayerPosition(activeSeq.getPlayerPosition());
        $.writeln("Mise à jour de la timeline effectuée");

        alert("Clips sélectionnés mélangés avec succès !");
        $.writeln("Mélange terminé avec succès");
        return "Succès : Clips mélangés";
    } catch (error) {
        $.writeln("Erreur dans randomizeTimelineClips : " + error.toString());
        alert("Erreur : " + error.toString());
        return "Erreur : " + error.toString();
    }
}



 

Correct answer Bruce Bullis

>my extension isn't showing up in the extensions list in Premiere Pro.

Have you enabled the loading of unsigned extensions on that system?


2 replies

Bruce Bullis
Community Manager
Bruce BullisCommunity ManagerCorrect answer
Community Manager
July 17, 2025

>my extension isn't showing up in the extensions list in Premiere Pro.

Have you enabled the loading of unsigned extensions on that system?


Kevin J. Monahan Jr.
Community Manager
Community Manager
July 17, 2025

Hi,

Thanks for the message. I changed the tag of this post to "SDK." With this newer tag, it should call the proper developer or community expert to the post. I hope we can help you soon. Sorry for the problem.

 

Thanks,
Kevin

 

Kevin Monahan - Sr. Community and Engagement Strategist – Adobe Pro Video and Audio