Movie Scene Creator

Movie Scene Creator

Set the stage. Define the conflict. Create the moment.

Please enter at least one character name.

`; resultsContainer.style.display = 'block'; pdfButtonContainer.style.display = 'none'; return; } const charArray = characterInput.split(',').map(name => name.trim()); const char1 = charArray[0] || 'CHARACTER 1'; const char2 = charArray[1] || 'CHARACTER 2'; const sceneHeading = `
${setting} - ${timeOfDay}
`; const openingText = sceneTemplates.openings[genre]; const conflictText = sceneTemplates.conflicts[conflict](char1, char2); const closingText = sceneTemplates.closings[genre]; const fullScene = ` ${sceneHeading}
${openingText}

${conflictText}

${closingText}
`; sceneOutput.innerHTML = fullScene; resultsContainer.style.display = 'block'; pdfButtonContainer.style.display = 'block'; }; const downloadPDF = () => { try { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const genre = inputs.genre.value; const setting = inputs.setting.options[inputs.setting.selectedIndex].text; const timeOfDay = inputs.timeOfDay.value; const conflict = inputs.conflict.options[inputs.conflict.selectedIndex].text; const characters = inputs.characters.value; const sceneTextContent = sceneOutput.innerText; const pageWidth = doc.internal.pageSize.getWidth(); const margin = 15; // --- PDF Header --- doc.setFont('helvetica', 'bold'); doc.setFontSize(16); doc.text('MOVIE SCENE RUNDOWN', pageWidth / 2, 20, { align: 'center' }); doc.setLineWidth(0.5); doc.line(margin, 25, pageWidth - margin, 25); // --- Parameters Table --- doc.autoTable({ startY: 30, head: [], body: [ ['GENRE:', genre], ['SETTING:', setting], ['TIME:', timeOfDay], ['CHARACTERS:', characters], ['CORE CONFLICT:', conflict] ], theme: 'plain', styles: { fontSize: 10, font: 'helvetica' }, columnStyles: { 0: { fontStyle: 'bold', cellWidth: 40 } } }); const lastY = doc.previousAutoTable.finalY + 15; // --- Scene Script --- // Add Courier font if available in jsPDF's standard fonts try { doc.setFont('courier', 'normal'); } catch(e) { console.warn("Courier font not found, falling back to monospace."); doc.setFont('monospace', 'normal'); } doc.setFontSize(12); const textLines = doc.splitTextToSize(sceneTextContent, pageWidth - margin * 2); doc.text(textLines, margin, lastY); doc.save('Movie_Scene.pdf'); } catch (error) { console.error("Failed to generate PDF:", error); if (pdfButtonContainer && !pdfButtonContainer.querySelector('.error-msg')) { const errorMsg = document.createElement('p'); errorMsg.textContent = 'Sorry, the PDF could not be created.'; errorMsg.className = 'text-red-500 text-sm mt-2 error-msg'; pdfButtonContainer.appendChild(errorMsg); } } }; generateButton.addEventListener('click', createScene); downloadPdfButton.addEventListener('click', downloadPDF); });
Scroll to Top