Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

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

New Here ,
May 20, 2025 May 20, 2025

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();
    }
}



 

TOPICS
Editing , Error or problem , Freeze or hang
93
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
no replies

Have something to add?

Join the conversation