By Samuel Zimmermann aka Parandroid
Audionerdz Editorial

There’s a new kind of illusionist in the psytrance scene: DJs pretending to be producers, blurring the line between curation and creation. And no—they’re not wielding synths, samplers, or secret VST chains. They’re wielding USB sticks, vague branding, and a heavy dose of strategic ambiguity.

Recently, I stumbled upon a tutorial video that left me somewhere between laughter and despair. The title? Something along the lines of ā€œCreate Ajja, Arjuna, and Giuseppe Style Leads From Any Sample.ā€ A catchy hook—until you realize the glaring problem: Giuseppe, as in DJ Giuseppe of Parvati Records fame, has never made a lead in his life. Nor a kick, nor a bassline, nor any actual production to speak of.djs pretending to be producers giuseppe parvati records psytrance

This isn’t a diss. Giuseppe is a legend. A cornerstone of underground psytrance culture. But he’s a DJ and label head, not a producer. Yet here we are, with tutorials suggesting otherwise—repackaging DJ personas as sound designers, content creators, and sonic architects.

Disclaimer: Normally, we would put the video tutorial here for you to check out. To prevent spreading this misinformation, we decided not to.

šŸŒ€ The Producer-DJ Confusion Spiral

This isn’t an isolated incident. In fact, it’s becoming the norm. A sort of mass hallucination where being behind the decks automatically implies being behind the DAW. It’s particularly rampant in subgenres like Hi-Tech, where a handful of highly visible DJanes craft a deliberately ambiguous image: using ā€œartistā€ as a stand-in for ā€œproducer,ā€ letting the audience assume credit where none is due.

The result? A generation of fans—and even aspiring creators—convinced that track selection equals track creation.

This is more than just a minor detail. It’s a cultural distortion. And if we’re not careful, it risks eroding the integrity of an entire ecosystem built on sonic craftsmanship.

šŸ” The Craft Gets Erased

Let’s be clear: DJing is an art. It’s a skill, and when done well, it’s pure magic. But it is not music production. The hours producers spend agonizing over modulation curves, transient shaping, harmonic layering, and mix clarity—those aren’t transferable just because someone can beatmatch or curate a wild set at 170 BPM.

When DJs are marketed (or market themselves) as ā€œproducersā€ without ever touching a DAW, it cheapens the work of actual creators. Even worse, it confuses audiences, who are increasingly unable to distinguish between someone who plays tracks and someone who makes them.

In the TikTok age, where a polished persona sells more than a polished track, the temptation to blur these lines is understandable—but it’s also dishonest.

šŸ’£ Why DJs Pretending to Be Producers is a Growing Issue in Psytrance

Some might say it’s harmless. Who cares if fans think their favorite DJ is also a producer? Isn’t it all part of the show?

Here’s why it matters:

  • It sets false expectations for aspiring artists.

  • It erodes respect for production as a craft

Imagine Gordon Ramsay reviewing a dish and people thinking he cooked it. Now imagine Gordon never having cooked, just yelling about it—loudly, and stylishly—and suddenly people are paying for his cooking classes. That’s where we are.

🌿 Let’s Re-Center the Culture

This isn’t a crusade against DJs. Some of the most powerful energies I’ve felt on a dancefloor came from selectors who knew exactly how to read a crowd and ignite a fire. But let’s stop dressing them up as producers if they’ve never actually produced.

Let DJs be DJs. Let producers be producers. Let artists be honest about what they do and what they don’t.

Psytrance—and electronic music as a whole—has always been about authenticity. About pushing boundaries. About crafting soundscapes that defy explanation. If we let performance outshine production, illusion replace substance, and clout override craft, we lose something vital.

And honestly? The scene deserves better than that.

```javascript /* TrackForge MVP — Vanilla JS Storage: window.localStorage under key TF_DATA_V1 */ (function () { const LS_KEY = 'TF_DATA_V1'; const THEME_KEY = 'TF_THEME'; const EL = { // Main App grid: document.getElementById('projectGrid'), form: document.getElementById('projectForm'), trackName: document.getElementById('trackName'), genre: document.getElementById('genre'), status: document.getElementById('status'), deadline: document.getElementById('deadline'), themeToggle: document.getElementById('themeToggle'), search: document.getElementById('search'), filterStatus: document.getElementById('filterStatus'), clearAll: document.getElementById('clearAllBtn'), newProjectBtn: document.getElementById('newProjectBtn'), // Modal Elements modal: document.getElementById('projectModal'), modalForm: document.getElementById('modalForm'), modalTitle: document.getElementById('modalTitle'), m_name: document.getElementById('m_name'), m_genre: document.getElementById('m_genre'), m_status: document.getElementById('m_status'), m_deadline: document.getElementById('m_deadline'), newTaskText: document.getElementById('newTaskText'), addTaskBtn: document.getElementById('addTaskBtn'), taskList: document.getElementById('taskList'), deleteProjectBtn: document.getElementById('deleteProjectBtn'), saveProjectBtn: document.getElementById('saveProjectBtn'), }; let projects = []; // Array to hold all project data let currentProjectId = null; // To track which project is open in the modal // --- Helper Functions --- const generateId = () => Date.now().toString(36) + Math.random().toString(36).substring(2); const getStatusClass = (status) => { return status.toLowerCase().replace(/\s/g, '-'); }; const formatDate = (dateString) => { if (!dateString) return 'N/A'; const date = new Date(dateString); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); }; const calculateDaysLeft = (deadline) => { if (!deadline) return null; const today = new Date(); const deadlineDate = new Date(deadline); today.setHours(0, 0, 0, 0); // Normalize today to start of day deadlineDate.setHours(0, 0, 0, 0); // Normalize deadline to start of day const diffTime = deadlineDate.getTime() - today.getTime(); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return diffDays; }; // --- Local Storage Operations --- const loadProjects = () => { const data = localStorage.getItem(LS_KEY); if (data) { projects = JSON.parse(data); } else { // Initialize with some dummy data if no projects exist projects = [ { id: generateId(), name: "Nova Spektrum 01", genre: "Psytrance", status: "In Progress", deadline: "2024-07-30", tasks: [ { id: generateId(), text: "Write main bassline", completed: true }, { id: generateId(), text: "Arrange breakdown 1", completed: false }, { id: generateId(), text: "Mix kick & bass", completed: false }, ] }, { id: generateId(), name: "Dream Sequence", genre: "Ambient", status: "Idea", deadline: "", tasks: [ { id: generateId(), text: "Brainstorm chord progressions", completed: false }, { id: generateId(), text: "Gather field recordings", completed: false }, ] }, { id: generateId(), name: "Urban Pulse", genre: "Techno", status: "Finished", deadline: "2024-05-15", tasks: [ { id: generateId(), text: "Final Master", completed: true }, { id: generateId(), text: "Upload to platforms", completed: true }, ] } ]; } renderProjects(); }; const saveProjects = () => { localStorage.setItem(LS_KEY, JSON.stringify(projects)); }; const clearAllData = () => { if (confirm('Are you sure you want to clear ALL demo data? This cannot be undone.')) { localStorage.removeItem(LS_KEY); projects = []; renderProjects(); } }; // --- Project Rendering --- const createProjectCard = (project) => { const card = document.createElement('div'); card.className = 'project-card'; card.dataset.id = project.id; const daysLeft = calculateDaysLeft(project.deadline); const deadlineInfoHtml = project.deadline ? `
${daysLeft !== null && daysLeft < 0 ? 'Overdue' : ''} ${formatDate(project.deadline)} ${daysLeft !== null && daysLeft >= 0 ? ` (${daysLeft} day${daysLeft === 1 ? '' : 's'} left)` : ''}
` : '
No deadline set
'; card.innerHTML = `

${project.name}

Genre: ${project.genre || 'N/A'} ${project.status}
${deadlineInfoHtml} `; card.addEventListener('click', () => openProjectModal(project.id)); return card; }; const renderProjects = () => { EL.grid.innerHTML = ''; // Clear existing projects const searchTerm = EL.search.value.toLowerCase(); const filterStatus = EL.filterStatus.value; const filteredProjects = projects.filter(project => { const matchesSearch = project.name.toLowerCase().includes(searchTerm) || project.genre.toLowerCase().includes(searchTerm); const matchesStatus = filterStatus === '' || project.status === filterStatus; return matchesSearch && matchesStatus; }); if (filteredProjects.length === 0) { EL.grid.innerHTML = '

No projects found matching your criteria.

'; } else { filteredProjects.forEach(project => { EL.grid.appendChild(createProjectCard(project)); }); } }; // --- New Project Form --- const handleNewProjectSubmit = (e) => { e.preventDefault(); const newProject = { id: generateId(), name: EL.trackName.value.trim(), genre: EL.genre.value.trim(), status: EL.status.value, deadline: EL.deadline.value, tasks: [] }; if (newProject.name) { projects.unshift(newProject); // Add to the beginning saveProjects(); renderProjects(); EL.form.reset(); // Clear form } else { alert('Please enter a track name.'); } }; // --- Modal Logic --- const openProjectModal = (projectId) => { currentProjectId = projectId; const project = projects.find(p => p.id === projectId); if (!project) { console.error('Project not found:', projectId); return; } EL.modalTitle.textContent = project.name; EL.m_name.value = project.name; EL.m_genre.value = project.genre; EL.m_status.value = project.status; EL.m_deadline.value = project.deadline; renderTasks(project.tasks); EL.modal.showModal(); }; const closeProjectModal = () => { EL.modal.close(); currentProjectId = null; EL.modalForm.reset(); EL.taskList.innerHTML = ''; }; const handleModalSave = (e) => { e.preventDefault(); // Prevent default form submission inside dialog const projectIndex = projects.findIndex(p => p.id === currentProjectId); if (projectIndex === -1) return; const project = projects[projectIndex]; project.name = EL.m_name.value.trim(); project.genre = EL.m_genre.value.trim(); project.status = EL.m_status.value; project.deadline = EL.m_deadline.value; // Tasks are updated live via other functions if (project.name) { saveProjects(); renderProjects(); // Re-render to update card details closeProjectModal(); } else { alert('Track name cannot be empty.'); } }; const handleDeleteProject = () => { if (!currentProjectId) return; if (confirm(`Are you sure you want to delete "${EL.m_